我有一台 CentOS 7 服务器(内核3.10.0-957.12.1.el7.x86_64
),带有 2 个 NVMe 磁盘,设置如下:
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 477G 0 disk
├─nvme0n1p1 259:2 0 511M 0 part /boot/efi
├─nvme0n1p2 259:4 0 19.5G 0 part
│ └─md2 9:2 0 19.5G 0 raid1 /
├─nvme0n1p3 259:7 0 511M 0 part [SWAP]
└─nvme0n1p4 259:9 0 456.4G 0 part
└─data-data 253:0 0 912.8G 0 lvm /data
nvme1n1 259:1 0 477G 0 disk
├─nvme1n1p1 259:3 0 511M 0 part
├─nvme1n1p2 259:5 0 19.5G 0 part
│ └─md2 9:2 0 19.5G 0 raid1 /
├─nvme1n1p3 259:6 0 511M 0 part [SWAP]
└─nvme1n1p4 259:8 0 456.4G 0 part
└─data-data 253:0 0 912.8G 0 lvm /data
我们的监控iostat
持续显示nvme0n1
ionvme1n1
利用率超过 80%,而各个分区的 io 利用率为 0% 并且完全可用(250k iops,每秒 1GB 读/写)。
avg-cpu: %user %nice %system %iowait %steal %idle
7.14 0.00 3.51 0.00 0.00 89.36
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
nvme1n1 0.00 0.00 0.00 50.50 0.00 222.00 8.79 0.73 0.02 0.00 0.02 14.48 73.10
nvme1n1p1 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
nvme1n1p2 0.00 0.00 0.00 49.50 0.00 218.00 8.81 0.00 0.02 0.00 0.02 0.01 0.05
nvme1n1p3 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
nvme1n1p4 0.00 0.00 0.00 1.00 0.00 4.00 8.00 0.00 0.00 0.00 0.00 0.00 0.00
nvme0n1 0.00 0.00 0.00 49.50 0.00 218.00 8.81 0.73 0.02 0.00 0.02 14.77 73.10
nvme0n1p1 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
nvme0n1p2 0.00 0.00 0.00 49.50 0.00 218.00 8.81 0.00 0.02 0.00 0.02 0.01 0.05
nvme0n1p3 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
nvme0n1p4 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
md2 0.00 0.00 0.00 48.50 0.00 214.00 8.82 0.00 0.00 0.00 0.00 0.00 0.00
dm-0 0.00 0.00 0.00 1.00 0.00 4.00 8.00 0.00 0.00 0.00 0.00 0.00 0.00
有什么想法可能是这种行为的根本原因吗?
除了监控触发高 io 警报外,一切似乎都工作正常。
答案1
和iostat
的糟糕输出的来源似乎与内核错误有关,该错误将在RHEL/CentOS 版本 7.7 中解决。设置了调度程序的设备会受到影响,这是 NVME 驱动器的默认设置。 %util
svctm
kernel-3.10.0-1036.el7
none
作为参考,有一个红帽解决方案(需要登录)描述了该错误。
在里面CentOS 错误报告有人写道,上述问题将通过上述内核/发行版本得到解决。
更改调度程序应该可以解决问题,直到新内核可用。由于它似乎只影响指标而不影响实际性能,因此另一种可能性是在新内核出现之前忽略这些指标。
由于缺少 NVME 驱动器,我无法验证这一点,也许 @michal kralik 可以验证这一点。
答案2
Linux 内核将指向各个逻辑分区的 IO 重新映射到实际执行 IO 的物理设备。