Как смоделировать нагрузку - PullRequest
0 голосов
/ 07 декабря 2011

Мне нужно написать программу (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. }

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

Спасибо,

Амит

Ответы [ 3 ]

1 голос
/ 04 января 2012

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

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

1 голос
/ 07 декабря 2011

Разве что-то вроде этого кода 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()
0 голосов
/ 07 декабря 2011

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

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

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

...