2013-06-24 3 views
0

Я хочу, чтобы иметь возможность легко установить скорость записи файла программы сравнения. Это программа python, которую я использую для тестирования другой системы. Я хотел бы иметь возможность контролировать скорость создания файла. Один из методов, о котором я думал, состоит в том, чтобы иметь функцию с аргументом для количества создаваемых файлов. Это можно было бы вызвать в цикле, который отслеживает часы и только вызывает функцию каждую секунду. Это выполнило бы требование создания определенного количества файлов каждую секунду. Проблема в том, что может быть кусок мертвого времени (миллисекунды, но все же). Мне нужна непрерывная нагрузка.Programmatically Set File Write Rate

+2

ориентир - это сложно сделать хорошо (и ошибочные тесты хуже, чем бесполезно); есть много эталонных приложений, изобретать это колесо может быть сложнее, чем вы думаете. –

+0

Мне просто нужно создать файлы для загрузки нагрузки на приложение, которое я тестирую. Тем не менее, я фактически проверяю производительность сервера Linux под этой загрузкой. Хотя я буду проверять места в этом приложении, чтобы увидеть, можно ли повысить производительность. –

ответ

1

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

Если вы хотите выполнять N операций в секунду в среднем, вы можете запускать петли в несколько секунд (или дольше), и после каждого раунда смотрите, если вы работаете слишком быстро или медленно, и отрегулируйте сон () время между каждой операцией вверх или вниз на основе этого. Если вы работаете слишком быстро, увеличьте время сна больше, если вы только немного быстрее, увеличивайте меньше.

import time 
# target rate: 100 ops/1 second 
target = 100.0 
round_time = 1.0 
# at first, assume the writes are immediate 
sleepTime = round_time/target 

ops = 0 
t_start = time.time() 

while True: 
    #doYourIOoperationHere() 
    ops += 1 
    time.sleep(sleepTime) 

    # adjust sleep time periodically 
    if ops == target: 
     t_end = time.time() 
     elapsed = t_end - t_start 
     difference = round_time - elapsed 
     # print out the vars here to debug adjustment 
     print "%d ops done, elapsed %.3f, difference %.3f" % (ops, elapsed, difference) 
     # increase or decrease the sleep time, approach the target time slowly 
     sleepTime += difference/target/2 
     t_start = time.time() 
     ops = 0 

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