我正在浏览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 请求是否未完成的。
iowait 基本上是向要服务的设备发出 I/O 请求的平均时间(以毫秒为单位)。这包括队列中的请求所花费的时间以及为它们提供服务所花费的时间。
从 io 调度程序的前端开始按 io 进行测量,直到 io 完成。它涵盖了完成每个 io 所需的调度程序、驱动程序、控制器、传输(对于 san)和存储所花费的时间。它是存储完成 I/O 请求的平均时间(以毫秒为单位),包括调度程序队列中的请求所花费的时间以及存储为它们提供服务所花费的时间。
传输 IO 时有多个阶段。应用程序发送 IO 后,会为其分配一个请求,当请求被授予时,内核会查看是否可以将 io 合并到任何现有的请求队列中。在请求队列中花费的时间加到总服务时间中。然后合并完成后,将io提交到storage。如果存储处于压力之下或无法处理 IO 数量,那么我们的 IO 也必须等待由存储提供服务。因此,iostat 基本上有两个等待阶段。
proc 文件 /proc/diskstats 是它为此目的引用的文件。
通过询问内核。此信息直接包含在第一行中
/proc/stat
,请参阅proc 文档。