我已经使用 QEMU 有一段时间了,从我的经验来看,与其他 VM 工具(例如 VirtualBox 或 VMware)相比,它非常慢。
即使启用 KVM 对我来说也没有多大好处。很多人说我的硬件配置可能是最差的,我不同意。VirtualBox 和 VMware 在相同的硬件上运行得很好。而且我没有在单个系统上遇到过这个问题。我在多个系统上试过了。
为了更清楚地说明我的观点,我创建了相同的 VM 配置,其 RAM 数量相同,其他东西也尽可能相同。但 QEMU 似乎还是太慢了。特别是如果我以 GUI 模式运行 VM。例如,如果我以文本模式运行 Ubuntu,它非常快。但是当我以 GUI 模式运行 Ubuntu 时,它就太慢了。QEMU 慢的原因是什么?它与 VMware 或 VirtualBox 有何不同?
我使用以下方法启动 QEMU:
qemu-system-i386 -enable-kvm -hda Ubuntu.img -monitor stdio
如果我运行命令info kvm
,监视器中会显示 kvm 已启用。我还在 Ubuntu 12.04、13.10 和 14.04 上测试了 QEMU。作为客户机,我运行 Windows XP 和 Ubuntu 12.04。我使用 32 位和 64 位主机进行了测试,但客户机操作系统始终是 32 位。
此外,我确实在系统中没有其他现有虚拟化工具的情况下运行了 QEMU。我的系统配置足够好,有 8GB RAM 和 Intel Core i3-2100 CPU @ 3.10GHz × 4。
答案1
您是否必须使用 -hda 或 stdio IO 调用?另请注意,您-enable-kvm
至少需要添加该标志,但我鼓励您首先尝试安装virt-manager
和/或使用,libvirt
因为它将以支持良好性能的方式完全配置 qemu。
qemu 始终默认使用最兼容的配置,但如果配置正确,可以轻松获得裸机性能的几个百分点。
作为最佳安装可能需要多少个选项的示例,这里是我刚刚启动的 VM 的 /proc/$pid/cmdline 的内容。
qemu-system-x86_64
-enable-kvm
-name guest=ubuntu16.04_32_bit_test,debug-threads=on
-S
-object secret,id=masterKey0,format=raw,file=/var/lib/libvirt/qemu/domain-1-ubuntu16.04_32_bit_t/master-key.aes
-machine pc-i440fx-zesty,accel=kvm,usb=off,dump-guest-core=off
-cpu Skylake-Client
-m 1024
-realtime mlock=off
-smp 1,sockets=1,cores=1,threads=1
-uuid 4aaf9c8f-f8b5-477b-ac18-d273318dfe90
-no-user-config
-nodefaults
-chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-1-ubuntu16.04_32_bit_t/monitor.sock,server,nowait
-mon chardev=charmonitor,id=monitor,mode=control
-rtc base=utc,driftfix=slew
-global kvm-pit.lost_tick_policy=discard
-no-hpet
-no-reboot
-global PIIX4_PM.disable_s3=1
-global PIIX4_PM.disable_s4=1
-boot strict=on
-device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x5.0x7
-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5
-device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x5.0x1
-device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x5.0x2
-device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x6
-drive file=/var/lib/libvirt/images/ubuntu16.04_32_bit_test.qcow2,format=qcow2,if=none,id=drive-virtio-disk0
-device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x7,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=2
-drive file=/home/gdahlman/Downloads/ubuntu-16.04.2-server-i386.iso,format=raw,if=none,id=drive-ide0-0-0,readonly=on
-device ide-cd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1
-netdev tap,fd=26,id=hostnet0,vhost=on,vhostfd=28
-device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:22:78:27,bus=pci.0,addr=0x3
-chardev pty,id=charserial0-deviceisa-serial,chardev=charserial0,id=serial0
-chardev spicevmc,id=charchannel0,name=vdagent
-device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=com.redhat.spice.0
-device usb-tablet,id=input0,bus=usb.0,port=1
-spice port=5900,addr=127.0.0.1,disable-ticketing,image-compression=off,seamless-migration=on
-device qxl-vga,id=video0,ram_size=67108864,vram_size=67108864,vram64_size_mb=0,vgamem_mb=16,max_outputs=1,bus=pci.0,addr=0x2
-device intel-hda,id=sound0,bus=pci.0,addr=0x4
-device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0
-chardev spicevmc,id=charredir0,name=usbredir
-device usb-redir,chardev=charredir0,id=redir0,bus=usb.0,port=2
-chardev spicevmc,id=charredir1,name=usbredir
-device usb-redir,chardev=charredir1,id=redir1,bus=usb.0,port=3
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x8
-msg timestamp=on
root@rodin
从命令行使用 qemu 可以工作,但性能不会很高。
libvirtvirt-install
命令将从命令行帮助您完成此操作,并且它的--os-variant
标志将为您处理大多数怪癖和优化。
答案2
不管怎样,qemu
在我的 Ubuntu 14.04 安装上运行非常慢。我qemu-kvm
安装后安装qemu
,并使用以下命令启动该程序:
kvm -cdrom xxxx.iso -m 700 -boot d
差异令人惊奇,而且现在运行速度非常快。
答案3
如果您谈论的是 3d 图形性能,那是因为 qemu 没有硬件加速的 gpu 模拟器。
答案4
我遇到了同样的问题(Ubuntu 20.04 主机和客户机)。我重建了一台机器,但忘记在 BIOS 中打开内核虚拟化。qemu/kvm 非常慢;解决方法是打开 KVM,并重建我之前拥有的虚拟机。
首先检查 KVM 是否正在使用 - 如果使用 virt-manager,请检查概述对于虚拟机(无需运行;打开虚拟机,然后在菜单栏中转到查看详情,然后选择概述在左栏中)。在右侧区域,应该显示基本详细信息在顶部,然后虚拟机管理程序详细信息以下虚拟机管理程序详细信息应该显示虚拟机管理程序:KVM(就我而言,即使启用了 KVM,所有虚拟机仍然显示虚拟机管理程序是 Qemu,因此即使可用也不会使用 KVM。)
如果不使用 virt-manager,请检查 XML 模式;它应该以 开头<domain type="qemu">
。
解决这个问题后,性能又恢复到了我习惯的水平。只启用 KVM 而不重新创建虚拟机是行不通的。