![kvm virtio 磁盘性能随 iozone 工作负载严重扩展](https://linux22.com/image/683447/kvm%20virtio%20%E7%A3%81%E7%9B%98%E6%80%A7%E8%83%BD%E9%9A%8F%20iozone%20%E5%B7%A5%E4%BD%9C%E8%B4%9F%E8%BD%BD%E4%B8%A5%E9%87%8D%E6%89%A9%E5%B1%95.png)
我正在进行一些测试,以了解为什么我们的一些工作负载会产生非常糟糕的“用户体验”。db 相关活动。
我们有一台 dl160g9 服务器,B140i 控制器(4 个 LFF 磁盘 7.2k rpm)。主持人是centos 7,虚拟化引擎是虚拟机,版本是105.el7_2.4(1.5.3)来自 centos virt sig。磁盘是厚 LVM 卷在顶部假袭击 5由b140i控制器生成。调整设置为表演(设置为 virt guest 不会发生太大变化)。
我们跑win 和 linux VM. 无论如何存储是本地的,连接到虚拟机通过 virtio和缓存=无和io=本机。
由于我们的数据库文件很小,因此我使用以下命令模拟工作负载:
iozone -i 0 -i 8 -s 4m -t X
在哪里X 为 1(简单情况)或 25(实际用户群)。
这些是主持人:
Children see throughput for 1 mixed workload = 1768421.25 kB/sec
Parent sees throughput for 1 mixed workload = 293368.05 kB/sec
Min throughput per process = 1768421.25 kB/sec
Max throughput per process = 1768421.25 kB/sec
Avg throughput per process = 1768421.25 kB/sec
Min xfer = 4096.00 kB
Children see throughput for 25 mixed workload = 12061204.12 kB/sec
Parent sees throughput for 25 mixed workload = 39519.61 kB/sec
Min throughput per process = 1017999.00 kB/sec
Max throughput per process = 1237047.00 kB/sec
Avg throughput per process = 482448.16 kB/sec
Min xfer = 2212.00 kB
这Linux 虚拟机(ubuntu 14.04 LTS)显示:
Children see throughput for 1 mixed workload = 1901520.62 KB/sec
Parent sees throughput for 1 mixed workload = 176180.65 KB/sec
Min throughput per process = 1901520.62 KB/sec
Max throughput per process = 1901520.62 KB/sec
Avg throughput per process = 1901520.62 KB/sec
Min xfer = 4096.00 KB
Children see throughput for 25 mixed workload = 5338608.75 KB/sec
Parent sees throughput for 25 mixed workload = 15434.67 KB/sec
Min throughput per process = 0.00 KB/sec
Max throughput per process = 2675395.75 KB/sec
Avg throughput per process = 213544.35 KB/sec
Min xfer = 0.00 KB
Windows 10 64 位专业版虚拟机结果:
Children see throughput for 1 mixed workload = 496220.16 KB/sec
Parent sees throughput for 1 mixed workload = 162133.06 KB/sec
Min throughput per process = 496220.16 KB/sec
Max throughput per process = 496220.16 KB/sec
Avg throughput per process = 496220.16 KB/sec
Min xfer = 4096.00 KB
Children see throughput for 25 mixed workload = 1298231.58 KB/sec
Parent sees throughput for 25 mixed workload = 7626.09 KB/sec
Min throughput per process = 0.00 KB/sec
Max throughput per process = 285706.31 KB/sec
Avg throughput per process = 51929.26 KB/sec
Min xfer = 0.00 KB
我在这里看到一些问题:
根据virtio 开销但线程并发访问似乎很乱,尤其是 0 KB/秒的最小值很奇怪
虽然 Linux VM 的扩展性似乎很差,但即使在 1 个线程的情况下,Win(以及相关的 virtio 驱动程序)也似乎一团糟。虽然我预计会有一些开销,但人们得到了更好的结果这里
当然,win 10 是新的,仅受最新(117)驱动程序支持,但 win 8.1 也给出了类似的结果(由于本文篇幅较大,因此省略)。
我愿意接受任何可以指明正确方向的文档或建议:我所知道的是,cache=none、原始 LVM 和正确的 tuned-adm 足以获得良好的结果。
更新信息
内核(库存):Linux dl190g9 3.10.0-327.18.2.el7.x86_64 #1 SMP 2016 年 5 月 12 日星期四 11:03:55 UTC x86_64 x86_64 x86_64 GNU/Linux
qemu-kvm(centos virt sig):105.el7_2.4(1.5.3)
libvirtd:1.2.17
当我说 virtio 驱动程序时,我的意思是 libvirt xml 文件将 virtio 报告为总线。
Win 显示“Red Hat virtIO SCSI 磁盘设备”
linux 将磁盘报告为“00:06.0 SCSI 存储控制器:Red Hat,Inc Virtio 块设备”
更新 2
我之前说过,Windows 上的 1 线程性能出乎意料地差。它实际上符合发布的结果这里:本机和Win VM的吞吐量比率为1:3。
这使得两种场景都存在严重的扩展问题:主机扩展为 1:3,虚拟机扩展为 1:10
根据评论,我希望在 7.3 中有所改进,根据 Red Hat发布时间表应该在不久的将来发生(两次发布之间大约间隔 6 个月)。
谢谢