I/O %util 已死

2019-08-17  本文已影响0人  linjinhe

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,线程在哪个核心上跑都差不多。

参考文章

上一篇 下一篇

猜你喜欢

热点阅读