我希望能够轻松设置基准测试程序的文件写入速率。这是我用来测试另一个系统的python程序。我希望能够控制文件创建速度。我想到的一种方法是使用一个函数,其中包含要创建的文件数的参数。这可以在循环中调用,该循环跟踪时钟并且每秒仅调用该函数。这将满足每秒创建一定数量文件的要求。这个问题是可能有一大块死区时间(毫秒,但仍然)。我想要一个持续的负荷。
答案 0 :(得分:1)
您必须以某种方式跟踪实际执行文件I / O调用所需的时间,并调整操作之间的休眠时间。调整需要是连续的,因为睡眠和IO调用可能需要不同的时间,具体取决于系统负载。
如果你想平均每秒进行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
或类似的东西(简单的代码未经测试)。这可能不适用于非常高的IO速率或系统负载,您可能必须在每个单独的睡眠调用中开始执行多个写操作。此外,可能需要更长的平均值而不是1秒。