web-dev-qa-db-ja.com

KVMを使用してもQEMUが非常に遅いのはなぜですか

QEMUを使用してしばらく経ちましたが、私の経験から、VirtualBoxやVMwareなどの他のVMツールに比べて非常に遅いことがわかりました。

KVMを有効にしても、私にとってはあまりメリットはありません。多くの人々は、私が同意しない最悪のハードウェア構成を持っているかもしれないと言います。 VirtualBoxとVMwareは同じハードウェアで非常にうまく機能します。また、私は単一のシステムでそれに直面しませんでした。複数のシステムで試しました。

私のポイントをさらに明確にするために、同じ量のVMおよび他の可能な限り同一の同じRAM構成を作成しました。それでも、QEMUは遅すぎるようです。特に、VMをGUIモードで実行する場合。たとえば、テキストモードでUbuntuを実行すると、非常に高速です。しかし、UbuntuをGUIモードで実行すると、非常に遅くなります。 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ビットの両方のホストでテストしましたが、ゲストOSは常に32ビットでした。

また、システム内に他の既存の仮想化ツールを使用せずにQEMUを実行しました。私のシステム構成は、8GB RAMとIntel Core i3-2100 CPU @ 3.10GHz×4で十分です。

3
user1120675

-hdaまたはstdio IO呼び出しを使用する必要がありますか?また、少なくとも-enable-kvmフラグを追加する必要がありますが、良好なパフォーマンスをサポートする方法でqemuを完全に構成するため、最初にvirt-managerをインストールするか、またはlibvirtを使用することをお勧めします。

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を使用しても機能しますが、パフォーマンスは高くありません。

Libvirt virt-installコマンドは、コマンドラインからこれを支援します。また、--os-variantフラグが、ほとんどの癖と最適化を処理します。

1
gdahlm

Ubuntu 14.04のインストールでは、qemuの実行に非常に時間がかかっていました。 qemuをインストールした後にqemu-kvmをインストールし、次のコマンドでプログラムを開始しました。

kvm -cdrom xxxx.iso -m 700 -boot d

違いはすばらしく、現在は非常に高速です。

1
B.R

3Dグラフィックスパフォーマンスについて話しているのは、qemuにハードウェアアクセラレートされたGPUエミュレーターがないためです。

0
psusi