我在CentOS 6.3上安装了Qemu-KVM主机系统。 四个1TB SATA硬盘在软件RAID10中工作。 Guest CentOS 6.3安装在单独的LVM上。 人们说,他们看到客人的performance几乎等于主持人的performance,但是我没有看到。 我的I / Otesting显示客户端的性能比主机系统低30-70%。 我试图改变调度(设置elevator=deadline
主机和elevator=noop
elevator=deadline
elevator=noop
客人elevator=noop
),在cgroup中将blkio.weight
设置为1000,将io更改为virtio …但这些更改都没有给我任何显着的结果。 这是一个客户.xmlconfiguration部分:
<disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/dev/vgkvmnode/lv2'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </disk>
有我的testing:
主机系统:
iozonetesting
# iozone -a -i0 -i1 -i2 -s8G -r64k random random KB reclen write rewrite read reread read write 8388608 64 189930 197436 266786 267254 28644 66642
dd读取testing:一个进程然后四个同时进程
# dd if=/dev/vgkvmnode/lv2 of=/dev/null bs=1M count=1024 iflag=direct 1073741824 bytes (1.1 GB) copied, 4.23044 s, 254 MB/s # dd if=/dev/vgkvmnode/lv2 of=/dev/null bs=1M count=1024 iflag=direct skip=1024 & dd if=/dev/vgkvmnode/lv2 of=/dev/null bs=1M count=1024 iflag=direct skip=2048 & dd if=/dev/vgkvmnode/lv2 of=/dev/null bs=1M count=1024 iflag=direct skip=3072 & dd if=/dev/vgkvmnode/lv2 of=/dev/null bs=1M count=1024 iflag=direct skip=4096 1073741824 bytes (1.1 GB) copied, 14.4528 s, 74.3 MB/s 1073741824 bytes (1.1 GB) copied, 14.562 s, 73.7 MB/s 1073741824 bytes (1.1 GB) copied, 14.6341 s, 73.4 MB/s 1073741824 bytes (1.1 GB) copied, 14.7006 s, 73.0 MB/s
dd写testing:一个进程然后四个同时进程
# dd if=/dev/zero of=test bs=1M count=1024 oflag=direct 1073741824 bytes (1.1 GB) copied, 6.2039 s, 173 MB/s # dd if=/dev/zero of=test bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test2 bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test3 bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test4 bs=1M count=1024 oflag=direct 1073741824 bytes (1.1 GB) copied, 32.7173 s, 32.8 MB/s 1073741824 bytes (1.1 GB) copied, 32.8868 s, 32.6 MB/s 1073741824 bytes (1.1 GB) copied, 32.9097 s, 32.6 MB/s 1073741824 bytes (1.1 GB) copied, 32.9688 s, 32.6 MB/s
访客系统:
iozonetesting
# iozone -a -i0 -i1 -i2 -s512M -r64k random random KB reclen write rewrite read reread read write 524288 64 93374 154596 141193 149865 21394 46264
dd读取testing:一个进程然后四个同时进程
# dd if=/dev/mapper/VolGroup-lv_home of=/dev/null bs=1M count=1024 iflag=direct skip=1024 1073741824 bytes (1.1 GB) copied, 5.04356 s, 213 MB/s # dd if=/dev/mapper/VolGroup-lv_home of=/dev/null bs=1M count=1024 iflag=direct skip=1024 & dd if=/dev/mapper/VolGroup-lv_home of=/dev/null bs=1M count=1024 iflag=direct skip=2048 & dd if=/dev/mapper/VolGroup-lv_home of=/dev/null bs=1M count=1024 iflag=direct skip=3072 & dd if=/dev/mapper/VolGroup-lv_home of=/dev/null bs=1M count=1024 iflag=direct skip=4096 1073741824 bytes (1.1 GB) copied, 24.7348 s, 43.4 MB/s 1073741824 bytes (1.1 GB) copied, 24.7378 s, 43.4 MB/s 1073741824 bytes (1.1 GB) copied, 24.7408 s, 43.4 MB/s 1073741824 bytes (1.1 GB) copied, 24.744 s, 43.4 MB/s
dd写testing:一个进程然后四个同时进程
# dd if=/dev/zero of=test bs=1M count=1024 oflag=direct 1073741824 bytes (1.1 GB) copied, 10.415 s, 103 MB/s # dd if=/dev/zero of=test bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test2 bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test3 bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test4 bs=1M count=1024 oflag=direct 1073741824 bytes (1.1 GB) copied, 49.8874 s, 21.5 MB/s 1073741824 bytes (1.1 GB) copied, 49.8608 s, 21.5 MB/s 1073741824 bytes (1.1 GB) copied, 49.8693 s, 21.5 MB/s 1073741824 bytes (1.1 GB) copied, 49.9427 s, 21.5 MB/s
我不知道这是正常的情况还是我错过了什么?
你尚未完成性能调整。
<driver name='qemu' type='raw' cache='writethrough' io='native'/>
首先是哪个I / O机制使用。
QEMU有两个asynchronousI / O机制:使用工作线程池和本机Linux AIO的POSIX AIO仿真。
在您的XML中设置io='native'
或io='threads'
来对其中的每一个进行基准testing。
其次是使用哪种caching机制。 你可以设置cache='writeback'
, cache='writethrough'
或者你可以用cache='none'
来closures它,你实际上可能会发现它效果最好。
如果您正在使用原始卷或分区,则最好完全避免caching,这会减less数据副本和总线stream量。
除非您的RAIDarrays由电池供电,否则不要使用writeback
否则可能会丢失数据。 (当然,如果丢失数据是可以的,那就随意了。)
第三,其他一些可能帮助包括closures屏障的事情,以及在客人中使用最后期限调度程序。
最后,做一些研究。 IBM在2010 Linuxpipe道工大会上就KVM I / O性能做了一个非常有趣的演讲 。 此外,他们还有一套广泛的关于使用KVM的最佳实践,这当然会引起人们的兴趣。
PS冗长的顺序读取和写入很less代表真实世界的工作负载。 尝试使用其他types的工作负载进行基准testing,理想情况下您打算在生产中运行的实际应用程序。