我有几个 KVM 客户机在 Ubuntu 14.04 上使用 libvirt 运行。它们的性能非常差。性能不佳的间歇性、简单基准测试中数量级的变化以及对其他虚拟机活动的明显影响强烈表明问题出在主机中对资源的争用。客户机上的 Sar 监控揭示了一个问题,即 virtblk 磁盘必须等待很长时间才能处理 I/O 请求。例如
00:00:01 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
00:05:01 dev253-0 0.10 0.00 1.39 14.34 0.00 682539.72 0.14 0.00
等待时间始终非常长,并且所有客人的等待时间都差不多。
典型的磁盘配置是
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/var/lib/libvirt/images/Base-dev-0002-clone.img'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</disk>
在客户机上尝试了许多方法,包括驱动程序行中的缓存设置和 io=native、从原始 img 文件存储克隆到逻辑卷、elevator=deadline、virtio_blk.use_bio=1,但没有任何重大影响。
我知道虚拟磁盘必然会受到性能影响,但这是极端情况。
KVM 客户端的典型等待时间是多长?
考虑到我的资源争用声明,主机上可能需要分配哪些资源、ulimit 等?主机拥有充足的资源,没有出现明显问题迹象。
答案1
我最近遇到了同样的问题
# iostat -dx 60
Linux 3.13.0-32-generic (hostname) Wednesday, 04 March, 2015 _x86_64_ (6 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 2.46 51.49 4.12 1742.66 325.36 74.38 0.05 770.46 487.83 4300.67 0.15 0.81
scd0 0.00 0.00 0.08 0.00 0.31 0.00 8.00 0.00 0.73 0.73 0.00 0.73 0.01
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 0.03 0.02 0.20 0.13 0.93 9.85 0.00 35787.38 4.00 38769.33 0.31 0.01
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
升级内核并在 KVM 客户机上安装 linux-headers 和 linux-headers-generic 解决了我的 I/O 问题。安装后重新启动。
# aptitude install linux-headers-3.13.0-46 linux-headers-3.13.0-46-generic linux-image-3.13.0-46-generic
安装后:
# iostat -dx 60
Linux 3.13.0-46-generic (hostname) Wednesday, 04 March, 2015 _x86_64_ (6 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 0.36 19.36 0.42 227.23 4.51 23.44 0.01 0.50 0.45 2.92 0.14 0.28
scd0 0.00 0.00 0.04 0.00 0.18 0.00 8.00 0.00 0.36 0.36 0.00 0.36 0.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 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
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
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 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
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
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 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
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
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 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
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
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 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
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