![iostat 如何计算 CPU 空闲时间以 %idle 或 %iowait 表示?](https://linux22.com/image/796267/iostat%20%E5%A6%82%E4%BD%95%E8%AE%A1%E7%AE%97%20CPU%20%E7%A9%BA%E9%97%B2%E6%97%B6%E9%97%B4%E4%BB%A5%20%25idle%20%E6%88%96%20%25iowait%20%E8%A1%A8%E7%A4%BA%EF%BC%9F.png)
我浏览了iostat
手册页。根据手册页,
%iowait
Show the percentage of time that the CPU or CPUs were idle during which the system
had an outstanding disk I/O request.
%idle
Show the percentage of time that the CPU or CPUs were idle during which the system
did not have an outstanding disk I/O request.
我不明白 iostat 如何判断 I/O 请求是否未完成。
答案1
iowait 基本上是向设备发出 I/O 请求的平均时间(以毫秒为单位)。这包括请求在队列中花费的时间和为它们提供服务所花费的时间。
按每个 IO 测量,从 IO 调度程序前端开始,直到 IO 完成。它涵盖完成每个 IO 所需的调度程序、驱动程序、控制器、传输(对于 SAN)和存储的时间。它是存储完成 I/O 请求的平均时间(以毫秒为单位),包括请求在调度程序队列中花费的时间和存储为这些请求提供服务所花费的时间。
IO 在传输过程中有多个阶段。应用程序发送 IO 后,会为其分配一个请求,当请求被批准时,内核会查看是否可以将 IO 合并到任何现有请求队列。在请求队列中花费的时间会增加总服务时间。然后,合并完成后,将 IO 提交给存储。如果存储压力很大或无法处理 IO 数量,那么我们的 IO 也必须等待存储提供服务。因此,iostat 基本上可以测量两个等待阶段。
proc 文件 /proc/diskstats 是其为此目的所引用的文件。
答案2
通过询问内核。此信息直接包含在 的第一行中/proc/stat
,请参阅程序文档。