qemu-kvm VM 中的磁盘 IO 非常慢

qemu-kvm VM 中的磁盘 IO 非常慢

我有一台运行 Debian Woody(内核 2.4.18)的虚拟机。Qemu-2.1.2、2 个 CPU 核心、512M RAM、qcow2 映像作为 IDE 连接、ext3。问题是磁盘 IO 很慢。以下是虚拟机重启后立即执行 dd“基准测试”的结果:

(无):~# time dd if=/dev/zero of=test1 bs=102400 count=100
100+0 条记录
100+0 条记录

实际 0分0.035秒
用户 0分0.000秒
系统 0分0.020秒
(无):~# time dd if=/dev/zero of=test1 bs=102400 count=100
100+0 条记录
100+0 条记录

实际 0分0.022秒
用户 0分0.000秒
系统 0分0.020秒
(无):~# time dd if=/dev/zero of=test1 bs=102400 count=100
100+0 条记录
100+0 条记录

实际 0分55.589秒
用户 0分0.020秒
系统 0分0.560秒

如果我查看主机上发生的情况,我会看到 qemu 进程消耗了大约 90% 的 CPU(总共 600%),并且读写速度约为 1.2MB/s。硬盘本身没问题,写入速度约为 70MB/s。我尝试了不同的 VM 设置(包括“线程”和“usafe”),将图像转换为原始格式,将图像移动到新格式化的文件系统(尝试了 ext4 和 btrfs)。没有明显的区别。

我还注意到其他具有较新内核的 VM 存在 IO 速度问题,但没有足够的时间对它们进行很好的测试,因此使用 NFS 挂载来解决这个问题。

这里有什么问题?

更新型多巴胺 甚至mount -t nfs ...挂起。strace说调用mount()本身冻结了:

mount("192.168.1.1:/mnt/gw/tmp", "/mnt", "nfs", 0xc0ed0000, 0x805a920) = -1 ENOSYS(未实现功能)
mount("192.168.1.1:/mnt/gw/tmp", "/mnt", "nfs", 0xc0ed0000, 0x805a920) = -1 ENOSYS(未实现功能)
mount("192.168.1.1:/mnt/gw/tmp", "/mnt", "nfs", 0xc0ed0000, 0x805a920) = -1 ENOSYS(未实现功能)
mount("192.168.1.1:/mnt/gw/tmp", "/mnt", "nfs", 0xc0ed0000, 0x805a920[这里冻结了几分钟]) = 0

答案1

我一直想这么做,所以我做了一些安装。

在这个设置中,IDE 样式设备的默认设置似乎确实以 PIO 模式速度运行,而 haparm 声称是 DMA ...在 VM 内部执行此操作可使我的机器的速度提高约 70 倍。

hdparm -d1 /dev/hda
echo hdparm -d1 /dev/hda > /etc/rcS.d/S00hdparm.sh
chmod +x /etc/rcS.d/S00hdparm.sh

另一个选项是使用 SCSI 磁盘仿真,在 qemu 命令行上替换此

-hda $DISK

有了这个

-drive if=scsi,file=$DISK

提供安装程序自动检测的“sym53c8xx”兼容设备仿真。这会产生很好的效果,即设备将被称为“/dev/sda”,而不是旧式的“/dev/hda”。

但请注意,在已安装的系统上切换此功能并不简单。

注意:使用 ahci 不起作用;Debian woody 早于 SATA。

PS:我的兼容性烟雾测试似乎大多成功了,只是几个愚蠢的 GCC 标志。祝你好运。

答案2

我使用带有 libvirt 的 kvm,使用不安全的设置和 i/o 线程使虚拟机非常快,当然不安全意味着不能在生产中使用。对于格式,我使用没有 lvm 的原始格式

相关内容