GNU/Linux >> Linux Esercitazione >  >> Linux

Perché OpenStack segnala il tipo Hypervisor come QEMU quando libvirt_type è KVM?

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 |grep hypervisor_type anche il comando.

# 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).


Linux
  1. Perché Windows10 VM è lento su OpenStack?

  2. Perché Sudo ignora gli alias?

  3. Quando si utilizza Vlc, perché lo screen saver continua a svegliarsi?

  4. Perché il completamento automatico non funziona quando si digita un nome di comando dopo "source"?

  5. Perché il cursore salta durante la digitazione?

Quando viene gestito un segnale e perché alcune informazioni si bloccano?

Perché rsync non utilizza il trasferimento delta per i file locali?

Perché `find` in Linux salta i risultati previsti quando viene utilizzato `-o`?

Perché clang genera testo incomprensibile quando viene reindirizzato?

Perché il mio sistema mostra solo 3,2 GiB di RAM quando ho sicuramente 4,0 GiB

La CPU host non scala la frequenza quando il guest KVM ne ha bisogno