在找到psutil之后,我做了一个简单的实验。有一个完全基于IO的函数,可以重复地从文件中读取一些numpy数组(每个文件都有763M大小)。然后,在100秒后使用"cpu_times"测量函数的时间使用情况。我预计大部分时间都在iowait上流逝,但结果如下:
pcputimes(user=22.92, system=77.1, children_user=0.0, children_system=0.0, iowait=0.0)为什么iowait是零?为什么系统大部分时间都在运行?
代码如下:
def io_read_bound():
i=0
while True:
a = np.load("/tmp/a%d.npy"%i)
print(a.sum()) # for forcing use of data
i = (i+1)%10
p = multiprocessing.Process(target=io_read_bound)
p.start()
ps = psutil.Process(p.pid)
time.sleep(100)
print(ps.cpu_times())对于写numpy数组,这个实验的结果是合理的,并且74%的时间用于iowait。
发布于 2019-12-09 14:35:10
这里是我的作者。可能文件已经在缓存中了?您可以尝试使用vmtouch cmdline应用工具逐出文件缓存。如果您多次读取该文件并在每次循环中清除缓存,我非常确定计数器将会增加。前段时间我引入了iowait来尝试文件复制,这是我当时的经验。
https://stackoverflow.com/questions/59239682
复制相似问题