Как смоделировать нагрузку

Я должен написать программу (Perl, Python или Java) для имитации рабочей нагрузки на нашем сервере, так что она принимает 2 аргумента:

  1. объем памяти

  2. Время

И на основе этих аргументов он должен запустить процесс, который потребляет указанный объем памяти в течение указанного промежутка времени. Максимальное значение памяти может достигать 50-100 ГБ, а время может составлять до 12-24 часов.

Я не могу использовать разветвление или многопоточность, этот процесс должен быть одним потоком и должен непрерывно выполнять операции (например, целое число / число с плавающей запятой и т. Д.). Я также не хочу выполнять операции ввода-вывода.

Самый простой способ, которым я мог придумать, был:

 1. while(timeSpent < timeLimit || memoryConsumed < memorySpecified){
 2.           if(memoryConsumed < ){
 3.                Add random number to ArrayList 
 4.           }else{
 5.                Multiply all numbers (Do some exception handling to prevent this from overflowing) 
 6.           }
 7. }

Пожалуйста, дайте мне знать, если есть лучший способ сделать это.

Спасибо,

Amit

3 ответа

Решение

Я использую утилиту стресса weather.ou.edu/~apw/projects/stress ... хотя немного подправил его, чтобы расширить возможности, которые я хотел...

Спасибо за помощь ребята.

Разве что-то вроде этого кода Python не подходит для ваших нужд?

import argparse
import datetime

def main():
    parser = argparse.ArgumentParser(description = "Consume memory and time.")
    parser.add_argument('memory', metavar = 'M', type=int, help = "memory (in megabytes) to consume")
    parser.add_argument('time', metavar = 'H', type=int, help = "time (in hours) to consume")
    args = parser.parse_args()

    data = bytearray(args.memory * 1000000)
    now = datetime.datetime.today()
    finish = now + datetime.timedelta(hours = args.time)
    while now < finish:
        for i in xrange(args.memory * 1000000):
             data[i] = now.second
        now = datetime.datetime.today()


if __name__ == '__main__':
    main()

Ваш пример кажется разумным, по крайней мере, для первого шага. Однако есть много мелких деталей, чтобы получить право:

  • Вы говорите, что не хотите выполнять ввод / вывод, и это нормально, однако при выделении 50–100 ГБ на современном компьютере вы будете выполнять ввод / вывод независимо от того, хотите вы этого или нет (из-за ошибок страницы) так что вы можете переопределить свою спецификацию там.
  • Кроме того, примите во внимание гранулярность ваших "объектов", многие приложения для научных вычислений не могут понять принцип "много мелких объектов". Многие хотят иметь какой-то параметр для баланса между "множеством мелких объектов" и "несколькими крупными объектами".
  • Кроме того, умножая или добавляя все значения данных в вашем контейнере, вы можете генерировать последовательность сбоев страниц, которые ОС может легко предсказать, и, следовательно, они нереалистичны в реальном мире. Возможно, вы захотите добавить некоторую случайность при прохождении Это.

Это более тонкая проблема, чем кажется, и многие хотят начать с простых и, возможно, даже со стандартных тестов, таких как: SETI или raytracer.

Другие вопросы по тегам