我在 SSD 上创建了一些 qemu/KVM 虚拟机。
主机有大约 6 个 SSD。1 个用于操作系统,其他每个 SSD 都二VM 客户机。
我正在使用iotune
来限制这些驱动器的功能:
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='writeback' io='threads'/>
<source file='/var/lib/libvirt/images/sdd/pz/heavy/virtual-machine-1/os.img' aio=''/>
<target dev='vda' bus='virtio'/>
<iotune>
<total_iops_sec>3000</total_iops_sec>
<total_bytes_sec>125829120</total_bytes_sec> #120Mb
</iotune>
</disk>
当我通过 SSH 连接到其中一台虚拟机并运行时,这些限制似乎起作用了——无论我在 fio 上使用什么配置( 、等),fio
我都无法超过 120Mb 的吞吐量或 3000 IOPS 。--iodepth
--bs
--rwmixread
然而,在负载下,当我运行时iostat -xm 2
,我偶尔会看到writes per second
或tps
跳出这些限制。
每个驱动器有 2 个虚拟机,并且强制执行这些限制,我应该看到最大 6000 IOPS 或 240Mb 读/写。在以下输出中,您可以看到情况并非如此:
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sdd 6515.00 0.00 23.10 0 46
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdd 0.00 4.50 0.00 7742.50 0.00 58.38 15.44 1.47 0.21 0.00 0.21 0.08 63.10
这也不是一次性事件。我有 4 台服务器运行相同的虚拟机设置,我发现这种情况在所有 SSD 和所有服务器上都相当频繁地发生:
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdb 0.00 0.00 0.00 9588.50 0.00 33.59 7.17 1.47 0.16 0.00 0.16 0.06 52.85
sdd 0.00 0.00 0.00 8528.00 0.00 66.15 15.89 1.36 0.16 0.00 0.16 0.07 59.30
这是我的配置失败、qemu/KVM 实现失败还是 iostat 对这些磁盘性能的解释失败?