以编程方式设置文件写入速率

时间:2013-06-24 22:12:09

标签: python linux filesystems

我希望能够轻松设置基准测试程序的文件写入速率。这是我用来测试另一个系统的python程序。我希望能够控制文件创建速度。我想到的一种方法是使用一个函数,其中包含要创建的文件数的参数。这可以在循环中调用,该循环跟踪时钟并且每秒仅调用该函数。这将满足每秒创建一定数量文件的要求。这个问题是可能有一大块死区时间(毫秒,但仍然)。我想要一个持续的负荷。

1 个答案:

答案 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秒。