我正在尝试使用启用了 kvm 的 qemu-system-x86_64 2.3.0 在 Gentoo x86_64 主机(内核 3.18.9 强化)上创建 Windows 7 虚拟机。我已经成功编译了内核并安装了客户机(Windows 7),尽管客户机遇到了主要的性能问题,我认为这些问题与 IO 相关。
主机的规格为 1.7GHz(2.6GHz Turbo)i5-3317U(2 核,4 线程),配备 6GB DDR3 内存和 5300rpm 硬盘。主机运行安装在存储虚拟机映像的 /home 上的 AES luks 加密文件卷。客机的规格为 2 核、4 线程、4GB 内存、15GB 映像(留下 1GB 磁盘空间用于测试)。 guest 的容器是 qcow2,compat 1.1,lazy refcounts:true,recount 位:16,缓存设置为 none。我还尝试将这个 qcow2 容器转换为raw
格式,它对解决这个问题有一点帮助。
我已尽可能安装并启用 virtio 驱动程序,并通过info kvm
在 qemus 终端内发出命令来验证 qemu 正在使用 kvm。我还尝试手动调整我的启动脚本,如下所示:
#!/bin/bash
export QEMU_AUDIO_DRV=alsa
exec qemu-system-x86_64 \
--enable-kvm \
-machine type=pc,accel=kvm \
-smp cores=2,threads=4 \
-vga std \
-soundhw ac97 \
-drive file=/WindowsVM.img2,cache=none,if=virtio \
-netdev user,id=vmnic -device virtio-net,netdev=vmnic \
-cpu host \
-m 4G \
-balloon virtio \
-name Windows \
-usbdevice tablet \
-monitor stdio \
"$@"
问题是映像需要永远启动和关闭。打开应用程序也需要花费大量时间(打开 Internet Explorer 进行测试需要 15-20 秒),尽管一旦打开几次,应用程序打开速度就会增加几倍,就好像它们被缓存一样。我注意到的另一个事实是,提取 zip 文件的速度永远不会超过 50-60kb/s,并且文件下载以我的常规下载速度进行下载,但一旦达到 100%,它们就会在完成之前停滞一段时间。我已经运行 crystal disk mark 对虚拟磁盘 IO 进行基准测试,并且连续读取速度为 400mb/s,写入速度为 300mb/s,这显然是不正确的。这些高台是当我从存储在加密文件卷中的映像启动虚拟机时,如上所述。当将图像移动到未加密的安装点时,读取速度为 70mb/s,写入速度为 35mb/s,这看起来更合理。巧合的是,当映像存储在未加密的位置时,虚拟机遭受的这种“滞后”要小得多。启动/关闭时间仍然相当长,但远不及图像存储在加密位置所花费的时间,也远不及打开/关闭软件所需的时间。
正如我通过测试看到的,我希望图像所在的加密文件卷可能会导致问题,但我想要第二意见或我可以尝试的其他选择。 是否可以通过某种方法对图像本身进行加密,这种方法对性能的影响可能比将未加密的图像存储在加密的安装点上要小?我可以启用容器中内置的加密功能,还是有更好的方法使用 cryptsetup/luks 专门加密容器以提高性能?
感谢您的帮助。
答案1
您可以为来宾磁盘使用 LVM 卷,而不是位于主机操作系统文件系统之上的 .img 文件吗?这使得虚拟机更接近硬件,并消除了加密可能存在的瓶颈。如果这是一个问题的话,虚拟化的窗口可以运行它自己的加密。
非 SSD、非 RAID 存储->加密的Linux文件系统->NTFS为 I/O 减速提供了很多机会。