I/O %util 已死

TL;DR

SSD 下的 %util 已经没有任何作用了。

%util

iostat 命令可用来查看系统的 I/O 情况:

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util

scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
vda               0.00     0.00    2.02    0.00     0.01     0.00    12.00     0.00    0.00    0.00    0.00   0.00   0.00

%util 这一列一直被认为是表示 I/O 设备工作的“饱和度”。简单地说,就是 I/O 设备有请求需要处理的工作时间比例。

如果设备同一时间只能处理一个请求,比如 NoRaid 的 HDD, 用 %util 来表示 I/O 设备工作的“饱和度”没有任何问题。

但是,SSD 由于其内部的并行处理机制,同一时间可以处理多个请求,所以 %util 不能用来衡量这个设备的工作饱和度。

为什么会出现这种情况?
一个原因就是 I/O 设备都没有把内部架构、并行度暴露给内核。

为什么不把 I/O 设备的内部架构暴露给内核?(以下纯属本人瞎想)
一个原因是历史原因:HDD 的结构其实很简单。现在为了兼容以前,I/O 子系统没有做重新的设计。
另一个原因是:I/O 设备是有状态的,操作系统就算知道你的内部结构也比较难做什么优化。不像 CPU,线程在哪个核心上跑都差不多。

参考文章

  • https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/iostat.html
  • https://bean-li.github.io/dive-into-iostat/
  • https://linux.die.net/man/1/iostat
  • https://dbaplus.cn/news-149-290-1.html
  • https://www.percona.com/blog/2017/08/28/looking-disk-utilization-and-saturation/
  • https://www.percona.com/blog/2014/06/25/why-util-number-from-iostat-is-meaningless-for-mysql-capacity-planning/

你可能感兴趣的:(I/O %util 已死)