我有一个运行Debian Woody的虚拟机(内核2.4.18)。 Qemu-2.1.2,2个CPU内核,512M内存,qcow2映像作为IDE连接,ext3。 问题是磁盘IO很慢。 这是虚拟机重启后dd“基准”的结果:
(none):〜#time dd if = / dev / zero of = test1 bs = 102400 count = 100 100 + 0logging 100 + 0logging 真正的0m0.035s 用户0m0.000s sys 0m0.020s (none):〜#time dd if = / dev / zero of = test1 bs = 102400 count = 100 100 + 0logging 100 + 0logging 实际0m0.022s 用户0m0.000s sys 0m0.020s (none):〜#time dd if = / dev / zero of = test1 bs = 102400 count = 100 100 + 0logging 100 + 0logging 真实0m55.589s 用户0m0.020s sys 0m0.560s
如果我看看主机上发生了什么事情,我会看到qemu进程消耗约90%的CPU(总计600%),而读写约1.2MB / s。 硬盘本身没问题,写入速度大概是70MB / s。 我尝试了不同的虚拟机设置(包括“线程”和“美国”),将图像转换为原始图像,将图像移动到新格式化的文件系统(尝试过ext4和btrfs)。 没有明显的差异。
我还注意到其他虚拟机的IO速度问题与更新的内核,但没有足够的时间来testing它们,并使用NFS挂载来解决这个问题。
这里有什么问题?
UPD甚至mount -t nfs ...挂起。 strace说, mount()调用自己冻结:
mount(“192.168.1.1:/mnt/gw/tmp”,“/ mnt”,“nfs”,0xc0ed0000,0x805a920)= -1 ENOSYS(function未执行) mount(“192.168.1.1:/mnt/gw/tmp”,“/ mnt”,“nfs”,0xc0ed0000,0x805a920)= -1 ENOSYS(function未执行) mount(“192.168.1.1:/mnt/gw/tmp”,“/ mnt”,“nfs”,0xc0ed0000,0x805a920)= -1 ENOSYS(function未执行) mount(“192.168.1.1:/mnt/gw/tmp”,“/ mnt”,“nfs”,0xc0ed0000,0x805a920 [这里冻结了几分钟])= 0
我一直有这样做的意思,所以我做了一些安装。
在这个设置中IDE风格的设备的默认似乎运行在PIO模式速度思想haparm声称DMA …这样做在虚拟机内使我的机器快了约70倍。
hdparm -d1 /dev/hda echo hdparm -d1 /dev/hda > /etc/rcS.d/S00hdparm.sh chmod +x /etc/rcS.d/S00hdparm.sh
另一种select是使用SCSI磁盘模拟,在qemu命令行上将其replace
-hda $DISK
有了这个
-drive if=scsi,file=$DISK
给出了安装程序自动检测的“sym53c8xx”兼容设备仿真。 这具有很好的效果,该设备将被称为“/ dev / sda”,而不是旧式的“/ dev / hda”。
但要小心,在已经安装的系统上切换这个并不简单。
注意:使用ahci将不起作用; Debian木质版早于SATA。
PS:我的兼容性烟雾testing似乎大部分成功,只是一些愚蠢的GCC标志。 祝你好运。
我使用libvirt的kvm,使用不安全的设置和用于I / O的线程使得vm真的很快,当然不安全的意思是在生产中使用NOT。 对于格式我使用原始的没有lvm