简体   繁体   English

调用 psutil.cpu_percent 时是否计算 iowait 时间?

[英]Does iowait time counted while psutil.cpu_percent are called?

I want to know if iowait time are counted in psutil.cpu_percent(), so write a code as below to test我想知道在psutil.cpu_percent()中是否统计了iowait时间,所以写了如下代码来测试

#cat test.py
import os
import psutil
import time


p = psutil.Process(os.getpid())


start = time.time()
times_before_workload = p.cpu_times()
# this function return cpu_percent between two call. so we have to call it once before workload
percent_before_workload = p.cpu_percent()  


# I call f open/close many times and read from the file 
# hoping cpu will spent time on both user system and iowait

c = 1000
while c:
    f = open('/tmp/big_text')
    content = f.read(10240)
    f.close()
    c -= 1

end = time.time()
percent_after_workload = p.cpu_percent()


times_after_workload = p.cpu_times()
user_seconds = times_after_workload.user - times_before_workload.user
system_seconds = times_after_workload.system - times_before_workload.system
iowait_seconds = times_after_workload.iowait - times_before_workload.iowait

# if cpu percent == user_percent + system_percent + iowait_percent then it means yes. iowait are counted

print 'user_percent %s' % round(user_seconds / (end - start) * 100, 2)
print 'system_percent %s' % round(system_seconds / (end - start) * 100, 2)
print 'iowait_percent %s' % round(iowait_seconds / (end - start) * 100, 2)
print 'percent %s' % percent_after_workload

here is this output这是这个 output

#python test.py
user_percent 67.06
system_percent 67.06
iowait_percent 0.0
percent 134.8

The iowait is 0 so still can not verify. iowait 为 0 所以仍然无法验证。 So question are所以问题是

  1. does iowait counted in cpu percent? iowait 是否计入 cpu 百分比?
  2. how to make iowait happen?(no zero)如何使 iowait 发生?(无零)
  1. No, iowait is not counted in cpu percent.不,iowait 不计入 cpu 百分比。
  2. Run vmtouch to evict pages from memory at the start of each iteration of the loop.在循环的每次迭代开始时运行vmtouch以逐出 memory 中的页面。

You may need to install vmtouch:您可能需要安装 vmtouch:

apt update
apt install vmtouch

Run vmtouch in Python:在 Python 运行 vmtouch:

import subprocess

subprocess.run(['vmtouch', '-e', '/tmp/big_text'], stdout=subprocess.DEVNULL)

Reference: Why iowait of reading file is zero?参考:为什么读取文件的iowait为零?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM