GNU/Linux >> Linux の 問題 >  >> Linux

libvirt_typeがKVMの場合、OpenStackがハイパーバイザータイプをQEMUとして報告するのはなぜですか?

OpenStack Mitakaをインストールし、horizo​​nダッシュボードのさまざまな機能を確認したいと思いました。たとえば、システム>ハイパーバイザー ダッシュボードのメニューには、さまざまなコンピューティングホストの概要、そのハイパーバイザータイプ、および使用法の詳細が表示されます。コンピューティングノードはKVMを使用するように構成されていますが、ハイパーバイザータイプがKVMではなくQEMUとして報告されているのを見て驚いた。 nova hypervisor-show | grep hypervisor_typeの使用中に同じハイパーバイザータイプが報告されました コマンドも。

# nova hypervisor-show 1 |grep hypervisor_type
| hypervisor_type | QEMU

nova.conf ファイルは、 libvirt_type =kvmを使用するように構成されています

[libvirt]
libvirt_type=kvm
compute_driver=libvirt.LibvirtDriver

私はこの問題をグーグルで検索し、OpenStackクライアントコマンドが nova.conf のlibvirt_type属性を使用する代わりに、libvirt接続タイプを使用してハイパーバイザータイプを決定することを理解しました。 。このバグの詳細なレポートは次のとおりです。

ただし、インスタンスがQEMUではなくKVMハイパーバイザーで開始されているかどうかを知りたいと思いました。幸い、これを行う方法はいくつかあります。

これらすべてのコマンドを計算ノードで実行しました。

KVMモジュールがロードされているかどうかを確認します

[compute_node]# lsmod |grep kvm
kvm_intel 172032 9
kvm 536576 1 kvm_intel
irqbypass 16384 7 kvm

/ dev/kvmが存在するかどうかを確認します

[compute_node]# ls -l /dev/kvm
crw-rw---- 1 root kvm 10, 232 Jun 14 11:01 /dev/kvm

/ dev/kvmがQEMUにアクセス可能かどうかを確認します

[compute_node]# virt-host-validate |grep kvm
 QEMU: Checking if device /dev/kvm exists : PASS
 QEMU: Checking if device /dev/kvm is accessible

上記の出力は、QEMUがKVMアクセラレータを使用している可能性があることを意味します。

KVMアクセラレータがQEMUで使用されているかどうかを確認します

[compute_node]# ps -aef|grep kvm

出力例:

/usr/bin/qemu-system-x86_64  -name instance-00000021 -S  -machine pc-i440fx-wily,accel=kvm,usb=off -cpu Nehalem

上記の出力では、アクセラレータkvmを使用したプロセスqemu-system-x86_64を確認できます。 。このページによると、計算ノードが qemuを実行している場合 KVMアクセラレータを使用して処理する場合、ハイパーバイザーはKVMを使用するQEMUです。

インスタンスのlibvirt.xmlを確認します

[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"/>

libvirt.xml type =kvmのファイルルックアウト およびdriver=qemu 、これは、ハイパーバイザーがKVMを備えたQEMUであることを意味します。

インスタンスのconsole.logを確認します

[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

インスタンスxmlをダンプしてハイパーバイザータイプを確認します

以下に示すようにvirshを起動します:

# virsh

インスタンスを一覧表示します:

virsh # list
 Id Name State
 ----------------------------------------------------
 4 instance-00000021 running
 5 instance-00000023 running
 6 instance-00000024 running

1つのインスタンスのIDをコピーします-「instance-00000021」と言い、以下に示すようにそのxmlをダンプします:

virsh # quit

インスタンスのXMLをダンプします:

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

上記の出力は、QEMUがKVMアクセラレーターを使用していることを確認します。

ボーナス…

また、任意のインスタンスにログインし、いくつかの仮想化検出手法を実行して、ここに示すように、基盤となるハイパーバイザーの種類を特定することもできます。 。

結論

OpenStackダッシュボードとクライアントコマンドはハイパーバイザータイプをQEMUとして報告しますが、実際にはQEMU(単なるソフトウェアエミュレーター)ではなく、KVMアクセラレーターを備えたQEMUです。したがって、結論として、KVMを使用したQEMUが有効になっている場合、ハイパーバイザータイプをQEMUとして報告するのは、OpenStackのバグである可能性があります。または、OpenStackが報告する方法と同じです。サポートされているハイパーバイザーの種類を明確に記載していないOpenStackドキュメントのバグであると主張するフォーラムはほとんどありません(OpenStackでサポートされているハイパーバイザーの種類を一覧表示するページが表示されますが、QEMUとKVMの違いを提供することはできません)。

>
Linux
  1. OpenStackでWindows10VMが遅いのはなぜですか?

  2. Vlcを使用しているときに、スクリーンセーバーが起動し続けるのはなぜですか?

  3. `source`の後にコマンド名を入力するとオートコンプリートが機能しないのはなぜですか?

  1. 入力時にカーソルがジャンプするのはなぜですか?

  2. ファイルにリダイレクトするときに stdout を明示的にフラッシュする必要があるのはなぜですか?

  3. Bash:子スクリプトが SIGINT をトラップするときに親スクリプトが SIGINT で終了しないのはなぜですか?

  1. rsync がローカル ファイルにデルタ転送を使用しないのはなぜですか?

  2. `-o` を使用すると、Linux の `find` が期待される結果をスキップするのはなぜですか?

  3. リダイレクト時にclangが理解できないテキストを生成するのはなぜですか?