我有 2 个基本相同的配置,在 CentOS 7.9.2009 (3.10.0-1160.24.1.el7.x86_64) 和 CentOS Steam 8 (4.18.0-301.1.el8.x86_64) 上处理 i/o 的方式似乎不同。两者都使用完全相同的硬件。
CentOS 8 上的 I/O 性能明显变慢,导致整个操作系统陷入瘫痪。运行的程序每约 50 毫秒写入约 4kb 到文件,并每隔几分钟创建新文件。
它们的分区完全相同:
NAME FSTYPE LABEL
sda
|-sda1 linux_raid_member
| `-md0 ext4 /
|-sda2 linux_raid_member
| `-md2 swap [SWAP]
|-sda3 linux_raid_member
| `-md3 ext4 /home
`-sda4 linux_raid_member
`-md4 vfat /boot/efi
sdb
|-sdb1 linux_raid_member
| `-md0 ext4 /
|-sdb2 linux_raid_member
| `-md2 swap [SWAP]
|-sdb3 linux_raid_member
| `-md3 ext4 /home
`-sdb4 linux_raid_member
`-md4 vfat /boot/efi
md3 ext4 分区已禁用日志记录 (^has_journal),因为这是所有写入操作发生的地方。
两者都使用 mdadm 版本 4.1 配置完全相同:
ARRAY /dev/md/0 metadata=1.2
ARRAY /dev/md/2 metadata=1.2
ARRAY /dev/md/3 metadata=1.2
ARRAY /dev/md/4 metadata=1.0
CentOS 7 i/o 信息(良好/工作版本):
avg-cpu: %user %nice %system %iowait %steal %idle
1.42 0.00 1.73 0.79 0.00 96.06
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdb 6.57 1.09 6.77 20.33 861.35 181.20 76.93 0.15 5.57 1.80 6.83 1.85 5.03
sda 6.57 1.09 6.89 20.34 871.93 181.20 77.37 0.16 5.73 2.06 6.97 1.86 5.05
md2 0.00 0.00 0.00 0.00 0.00 0.00 36.87 1.94 0.00 0.00 0.00 9189344.91 100.00
md0 0.00 0.00 0.12 2.04 3.04 13.32 15.18 0.38 0.00 0.00 0.00 463.89 100.01
md3 0.00 0.00 0.34 17.24 43.12 165.73 23.76 0.30 0.00 0.00 0.00 56.91 100.02
md4 0.00 0.00 0.00 0.00 0.00 0.00 9.63 0.05 0.00 0.00 0.00 1271435.74 100.00
请注意,%iowait 相对较低,md 设备处于 100 %util,而 sdX 处于较低 %util(最后一列)
CentOS Stream 8 i/o 信息(较新版本的iostat
不同列):
avg-cpu: %user %nice %system %iowait %steal %idle
4.15 0.00 5.17 8.72 0.00 81.96
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
sdb 15.06 51.51 1394.12 266.33 6.74 5.28 30.91 9.29 13.90 8.96 0.67 92.57 5.17 5.65 37.59
sda 15.24 51.52 1407.22 266.33 6.76 5.26 30.73 9.26 13.96 9.11 0.68 92.35 5.17 5.68 37.90
scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 2.10 0.00 0.00 0.20 0.00 2.80 0.00
md2 0.00 0.05 0.01 0.21 0.00 0.00 0.00 0.00 0.00 0.00 0.00 6.13 4.00 0.00 0.00
md0 0.16 5.46 5.68 23.85 0.00 0.00 0.00 0.00 0.00 0.00 0.00 34.53 4.36 0.00 0.00
md3 0.21 47.99 16.97 239.23 0.00 0.00 0.00 0.00 0.00 0.00 0.00 80.54 4.98 0.00 0.00
md4 0.00 0.00 0.02 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 6.01 0.50 0.00 0.00
请注意,%iowait 非常高,md 设备的 %util 为 0,而 sdX 的 %util 更高
看起来atop
CentOS 7 实际上表现更差; MD 设备呈红色闪烁。
MDD | md0 | busy 101% | read 0 | | write 29 | KiB/r 0 | KiB/w 4 | MBr/s 0.0 | MBw/s 0.0 | | avq 317813.45 | avio 345 ms
MDD | md3 | busy 101% | read 0 | | write 518 | KiB/r 0 | KiB/w 7 | MBr/s 0.0 | MBw/s 0.4 | | avq 113304.48 | avio 19.3 ms
DSK | sdb | busy 11% | read 0 | | write 551 | KiB/r 0 | KiB/w 7 | MBr/s 0.0 | MBw/s 0.4 | | avq 4.02 | avio 2.05 ms |
DSK | sda | busy 11% | read 0 | | write 551 | KiB/r 0 | KiB/w 7 | MBr/s 0.0 | MBw/s 0.4 | | avq 4.35 | avio 1.94 ms |
在 CentOS 8 Stream 上,MD 设备没有闪烁红色,因为电量为 0%
MDD | md0 | busy 0% | read 0 | write 58 | KiB/r 0 | KiB/w 4 | MBr/s 0.0 | MBw/s 0.0 | avq 0.00 | avio 0.0 ns |
MDD | md3 | busy 0% | read 0 | write 40 | KiB/r 0 | KiB/w 22 | MBr/s 0.0 | MBw/s 0.1 | avq 0.00 | avio 0.0 ns |
DSK | sdb | busy 7% | read 0 | write 93 | KiB/r 0 | KiB/w 12 | MBr/s 0.0 | MBw/s 0.1 | avq 1.30 | avio 6.97 ms |
DSK | sda | busy 6% | read 0 | write 93 | KiB/r 0 | KiB/w 12 | MBr/s 0.0 | MBw/s 0.1 | avq 1.30 | avio 6.58 ms |
NFS | rpc 4 | cread 0 | cwrit 0 | MBcr/s 0.0 | MBcw/s 0.0 | nettcp 4 | netudp 0 | badfmt 0 | badaut 0 | badcln 0 |
在 CentOS 8atop
读取上,还有一个 NFS 行,而在 CentOS 7 上则没有。它们都运行 NFS 服务器(安装了相同的客户端硬件/系统),所以也许这会以某种方式影响它?客户端安装到/home/user
(在 md3 分区上),这是所有写入发生的地方。
在两个系统上运行相同的程序(快速小写入),iotop
在 CentOS 7 上将显示 5-10% I/O 使用率,而在 CentOS 8 计算机上则显示 30-80% I/O 使用率。 CentOS 8 机器也显示了 [nfsd] 的一些 I/O 使用情况,但非常低 (<4%)。
我很确定罪魁祸首是 CentOS 8 机器出于某种原因写入 sdX,而不是 mdX,但我也可能完全误解了 MD 设备的工作原理。