Ho installato OpenStack Mitaka ed ero curioso di controllare varie funzionalità nella dashboard di Horizon. Ad esempio, il Sistema> Hypervisor Il menu nella dashboard fornisce un riepilogo di vari host di calcolo, il tipo di hypervisor e i dettagli sull'utilizzo, dove sono stato sorpreso di vedere il tipo di hypervisor segnalato come QEMU e non come KVM, sebbene i nodi di calcolo siano stati configurati per utilizzare KVM. Lo stesso tipo di hypervisor è stato segnalato durante l'utilizzo di nova hypervisor-show
# nova hypervisor-show 1 |grep hypervisor_type | hypervisor_type | QEMU
Il nova.conf il file è configurato per utilizzare libvirt_type=kvm
[libvirt] libvirt_type=kvm compute_driver=libvirt.LibvirtDriver
Ho cercato su Google questo problema e ho capito che il comando client OpenStack utilizza il tipo di connessione libvirt per determinare il tipo di hypervisor invece di utilizzare l'attributo libvirt_type in nova.conf . Ecco un rapporto dettagliato su questo bug.
Tuttavia, volevo sapere se le istanze vengono avviate su hypervisor KVM anziché su QEMU. Fortunatamente, ci sono pochi modi per farlo.
Ho eseguito tutti questi comandi sul nodo di calcolo.
Verifica se i moduli KVM sono caricati
[compute_node]# lsmod |grep kvm kvm_intel 172032 9 kvm 536576 1 kvm_intel irqbypass 16384 7 kvm
Verifica se /dev/kvm esiste
[compute_node]# ls -l /dev/kvm crw-rw---- 1 root kvm 10, 232 Jun 14 11:01 /dev/kvm
Verifica se /dev/kvm è accessibile a QEMU
[compute_node]# virt-host-validate |grep kvm QEMU: Checking if device /dev/kvm exists : PASS QEMU: Checking if device /dev/kvm is accessible
L'output sopra indica che QEMU potrebbe utilizzare l'acceleratore KVM.
Verifica se l'acceleratore KVM è utilizzato da QEMU
[compute_node]# ps -aef|grep kvm
Risultato di esempio:
/usr/bin/qemu-system-x86_64 -name instance-00000021 -S -machine pc-i440fx-wily,accel=kvm,usb=off -cpu Nehalem
Nell'output sopra, puoi vedere il processo qemu-system-x86_64 utilizzando l'acceleratore kvm . Secondo questa pagina, se il tuo nodo di calcolo esegue qemu processo con acceleratore KVM, quindi l'hypervisor è QEMU con KVM.
Controlla libvirt.xml di un'istanza
[compute_node]# cd /var/lib/nova/instances/<instance_id> [compute_node]# cd /var/lib/nova/instances/b127f332-c631-4bd0-bde0-e90626d8bc27 [compute_node]# grep type libvirt.xml
<domain type="kvm"> <nova:root type="image" uuid="2cfff576-95e8-45cf-814a-63b695cb32e5"/> <sysinfo type="smbios"> <type>hvm</type> <disk type="file" device="disk"> <driver name="qemu" type="qcow2" cache="none"/> <interface type="bridge"> <model type="virtio"/> <serial type="file"> <serial type="pty"/> <input type="tablet" bus="usb"/> <graphics type="vnc" autoport="yes" keymap="en-us" listen="0.0.0.0"/> <model type="cirrus"/>
In libvirt.xml ricerca file per type=kvm e driver=qemu , il che significa che l'hypervisor è QEMU con KVM.
Controlla console.log dell'istanza
[compute_node]# cd /var/lib/nova/instances/<instance_id> [compute_node]# cd /var/lib/nova/instances/b127f332-c631-4bd0-bde0-e90626d8bc27
[compute_node]# grep KVM console.log [ 0.000000] Booting paravirtualized kernel on KVM [ 0.000000] KVM setup async PF for cpu 0
Esegui il dump dell'istanza xml per verificare il tipo di hypervisor
Avvia virsh come mostrato di seguito:
# virsh
Elenca le istanze:
virsh # list Id Name State ---------------------------------------------------- 4 instance-00000021 running 5 instance-00000023 running 6 instance-00000024 running
Copia l'id di un'istanza, pronuncia "instance-00000021" e scarica il suo xml come mostrato di seguito:
virsh # quit
Esegui il dump di xml di un'istanza:
# virsh dumpxml instance-00000021 | grep kvm <domain type='kvm' id='4'>
# virsh dumpxml instance-00000021 | grep driver <driver name='qemu' type='qcow2' cache='none'/>
# virsh dumpxml instance-00000021 | grep emulator <emulator>/usr/bin/qemu-system-x86_64</emulator>
Gli output di cui sopra confermano che QEMU utilizza l'acceleratore KVM.
Bonus...
Puoi anche accedere a qualsiasi istanza ed eseguire alcune tecniche di rilevamento della virtualizzazione per identificare il tipo di hypervisor sottostante come mostrato qui .
Conclusione
Sebbene il dashboard di OpenStack e i comandi del client riportino il tipo di hypervisor come QEMU, in realtà è QEMU con acceleratore KVM e non solo QEMU (che è solo un emulatore software). Quindi la conclusione è che potrebbe essere un bug in OpenStack che segnala il tipo di hypervisor come QEMU quando QEMU con KVM è abilitato o è solo il modo in cui OpenStack segnala. Pochi forum sostengono che si tratti di un bug nella documentazione di OpenStack che non ha menzionato chiaramente il tipo di hypervisor supportato (anche se vedo una pagina che elenca il tipo di hypervisor supportati in OpenStack, manca di fornire la differenza tra QEMU e KVM).