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/
网友评论