为什么读取文件的 iowait 为零?
Why iowait of reading file is zero?
100 秒后找到 psutil, I had a simple experiment. There is a completely IO base function that repeatedly reads some numpy array from files (each of them has 763M size). Then, time usage of the function is measured using "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上。
psutil 作者在这里。可能该文件已经在缓存中?您可以尝试使用 vmtouch cmdline 实用程序清除文件缓存。
如果您多次读取文件并在每个循环中逐出缓存,我很确定计数器会增加。前段时间我引入iowait来试验文件副本,这是我当时的经验。
100 秒后找到 psutil, I had a simple experiment. There is a completely IO base function that repeatedly reads some numpy array from files (each of them has 763M size). Then, time usage of the function is measured using "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上。
psutil 作者在这里。可能该文件已经在缓存中?您可以尝试使用 vmtouch cmdline 实用程序清除文件缓存。 如果您多次读取文件并在每个循环中逐出缓存,我很确定计数器会增加。前段时间我引入iowait来试验文件副本,这是我当时的经验。