首先,我 5 天前在 Serverfault 上问过这个问题。我希望我把它带到 Unix&Linux 堆栈来并没有做坏事。我还在其他 3 个与 Stack 无关的网站上问过这个问题,但没有答案。如果我能得到答案,我计划用答案更新每个站点。开始了。
我很难理解 iostat -x 的输出,特别是 ZFS zvols。我正在运行 Proxmox 4.4,完全更新并遇到一些普遍较差的 IO 性能。
在对性能缓慢进行故障排除时,我正在查看 iostat -x 1 并看到这种利用率读数几乎不断。
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 77.00 115.00 308.00 640.00 9.88 2.02 10.33 9.92 10.61 3.58 68.80
sdb 0.00 0.00 81.00 116.00 324.00 644.00 9.83 1.32 6.72 6.42 6.93 2.50 49.20
...
sde 0.00 0.00 77.00 117.00 308.00 640.00 9.77 1.16 6.25 5.25 6.91 2.35 45.60
sdf 0.00 0.00 78.00 116.00 312.00 640.00 9.81 1.25 6.45 5.64 7.00 2.47 48.00
...
zd32 0.00 0.00 0.00 197.00 0.00 788.00 8.00 1.09 5.54 0.00 5.54 5.06 99.60
我感到困惑的是,zd32(我的 VM 的 zvol)的利用率百分比为 100%,而底层存储的利用率约为 50%。
我的问题是:zvol 利用率不应该反映底层存储设备的利用率吗?
作为参考,此系统上还有其他 VM,但此故障排除是在数小时后完成的,因此它们处于空闲状态。这台虚拟机是唯一一个繁忙的虚拟机,正在运行 Windows 更新。zpool 是 7200RPM SATA 磁盘的 RAID-Z2,因此并非完全为令人难以置信的速度而构建。我只是想知道现在的利用率。
这里有一些提示。是的,它应该,因为 zfs 卷是在位于存储设备上的 zpool 上创建的。如果该存储在其他资源之间共享,它们可能会影响 zfs 池和卷。
不幸的是,我不知道 Proxmox 是什么,但 %util 通常会显示设备具有积极事务队列的时间。队列中的事务数为 avgqu-sz。这两个值还取决于可以支持相当大队列的存储系统类型和型号。所以,这可能是一个不好的症状,也可能不是。因此,首先最好查看:await、r/s、w/s、rkB/s、wkB/s 以查看该卷是否存在真正的工作负载和性能问题。
有一个特殊的命令:
zpool iostat
监控zpool statistic。