web-dev-qa-db-fra.com

Pourquoi QEMU est-il si lent, même avec KVM

Je travaille avec QEMU depuis quelque temps déjà et, d’après mon expérience, je constate qu’il est très lent comparé à d’autres outils VM tels que VirtualBox ou VMware.

Même activer KVM ne présente pas un avantage considérable pour moi. Beaucoup de gens disent que je pourrais avoir la pire configuration matérielle pour laquelle je ne suis pas d'accord. VirtualBox et VMware fonctionnent plutôt bien pour le même matériel. De plus, je ne l'ai pas affronté sur un seul système. Je l'ai essayé sur plusieurs systèmes.

Pour rendre mon propos encore plus clair, j'ai créé la même configuration VM avec la même quantité de RAM et d'autres éléments identiques autant que je le pouvais. Il semble que QEMU soit trop lent. Surtout si je lance le VM en mode graphique. Par exemple, si je lance Ubuntu en mode texte, c'est très rapide. Mais lorsque je lance Ubuntu en mode graphique, c'est beaucoup trop lent. Quelle est la raison de la lenteur de QEMU? En quoi est-il différent de VMware ou de VirtualBox?

Je lance QEMU en utilisant:

qemu-system-i386 -enable-kvm -hda Ubuntu.img -monitor stdio

Sur le moniteur, si je lance la commande info kvm, il est indiqué que kvm est activé. J'ai aussi testé QEMU sur Ubuntu 12.04, 13.10 et 14.04. En tant qu'invité, j'utilise Windows XP et Ubuntu 12.04. J'ai testé avec les hôtes 32 bits et 64 bits, mais le système d'exploitation invité était toujours 32 bits.

De plus, j'ai exécuté QEMU sans autre outil de virtualisation existant dans le système. La configuration de mon système est suffisante avec 8 Go RAM et Intel Core i3-2100 CPU à 3.10GHz × 4.

3
user1120675

Devez-vous utiliser -hda ou l'appel stdio IO? Notez également que vous devrez au minimum ajouter le drapeau -enable-kvm, mais je vous encourage à essayer d’abord d’installer virt-manager et/ou d’utiliser libvirt car il configurera entièrement qemu dans un façon de soutenir de bonnes performances.

par défaut, qemu utilise toujours la configuration la plus compatible, mais peut facilement atteindre quelques points de pourcentage de la performance sans système si elle est configurée correctement.

Voici un exemple du nombre d'options nécessaires pour une installation optimale: le contenu de/proc/$ pid/cmdline à partir d'un VM que je viens de créer.

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

Utiliser qemu à partir de la ligne de commande fonctionnera, mais les performances ne seront pas élevées.

La commande libvirt virt-install vous aidera à cela avec la ligne de commande. Son drapeau --os-variant prendra en charge la plupart des problèmes et des optimisations pour vous.

1
gdahlm

Pour ce que ça vaut, qemu fonctionnait très lentement sur mon installation Ubuntu 14.04. J'ai installé qemu-kvm après avoir installé qemu et j'ai lancé le programme avec la commande suivante:

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

La différence était incroyable et fonctionne très vite maintenant.

1
B.R

Si vous parlez de performances graphiques en 3D, c'est parce que qemu ne possède pas d'émulateur gpu avec accélération matérielle.

0
psusi