web-dev-qa-db-ja.com

kvm、virt-manager、qemu、libvirtの違いと関係は何ですか?

私はこのトピックを調査し、ここに私の結論があります(しかし、私はまだ質問があり、私の結論に誤りを犯した場合は修正してください):

VMWare:

VMWareは1999年にVMハイパーバイザーSWを開発しましたが、それは私有でした。

QEMU:

VMWareの4年後、フランスの開発者であるファブリスベラールは2003年にQEMU(Quick Emulator)Hyporvisorを開発し、フリーでオープンソースにしました。 QEMUは、何年ものコミュニティ開発の結果、「完全仮想化」タイプ2ハイパーバイザーになりました。

  • QEMUは、CPUおよびI/Oデバイスを含むさまざまなHWをエミュレートできます。
  • QEMUは、VMのvCPUに送信された命令を実際の命令に解釈して、物理CPUに送信できます。
  • 一部のQEMUエミュレートデバイスは、VirtualBoxなどの仮想化ソフトウェアによって広く使用されています。
  • QEMUには独自のGUIとCLIがあります。

QEMUは、他のVM SWなしで独立して実行できます。

HW仮想化:

IntelとAMDは、2006年にHW仮想化テクノロジー(VT-xとAMD-V)を公開しました。

KVM:

2006年に(2008年に2年後にRed Hatが買収した)小さな会社が、前述のHW仮想化テクノロジーを使用してVMを作成できる「KVM」と呼ばれるLinux用のロード可能なカーネルモジュールを開発しました。その後、2007年に正式にLinuxカーネルに統合されました。

  • KVMはvCPUをエミュレートせず、物理CPUが提供するHW仮想化テクノロジーを使用します。
  • Linuxカーネルとして、KVMにはGUIもCLIもありません。 1つは、VMを作成するためにKVMモジュールを呼び出すCコードを作成する必要があり、エンドユーザーが役に立たないようにするためです。
  • KVMはハイパーバイザーと見なされます。

KVMは、QEMUなどのハイパーバイザーのサポートがなくても、独立してVMを作成できます。

libvirt:

市場には多くのハイパーバイザがあるため、libvirtは、VMの作成と管理のAPIとCLIを統合するために2005年末に開発されました。エンドユーザーの観点からは、次のようなCLIツールを提供します。

  • ヴァーシュ
  • virt-manager
  • virt-install

libvirt自体は仮想マシンを作成または管理しませんが、ユーザーが発行したコマンドを、基礎となるハイパーバイザーへの1つまたは一連のAPI呼び出しにマップします。

libvirtは無料でオープンソースです。

virt-manager:

KVMを使用してVMを作成すると、おそらく次の画面が表示されます。

Virtual Machine Manager GUI

以前はこのSWをKVMのGUIと見なしていましたが、調査の結果、タイトルが示すように「仮想マシンマネージャー」と呼ばれる別のSWであることがわかりました。 virt-managerとも呼ばれます。 virt-managerはRed Hatによってサポートされています。

そのWebサイトによると、virt-managerは主にKVM VMを対象としていますが、XenとLXCも管理しています。 Virtual Machine Manager公式Webサイト を参照してください。

virt-managerはlibvirtの上に構築されています。つまりユーザーインターフェイス(GUIとCLIの両方)に焦点を当てています。基盤となるVM管理の場合、単にlibvirtを呼び出し、最終的にKVMなどの基盤となるハイパーバイザーを呼び出します。

私の質問:

  1. 私の結論に間違いはありますか?
  2. VM仮想マシンを作成すると、virt-manager GUIのKVMリストに「localhost(QEMU)」または「QEMU/KVM」が表示されるのはなぜですか?
  3. libvirtは、virt- *で始まるほとんどすべての仮想化ツールがlibvirtツール、特にvirt-managerとvirt-installであると主張しています。 lib-virt FAQ を参照してください。しかし、virt-manager alcal virt-installはvirt-managerの一部です。 virt-manager web site を参照してください。どちらが正しいですか? virt-installとvirt-managerは正確には何に属していますか?
  4. 一部の記事ではqemu-kvmについて説明していますが、私の調査によると、それらは2つの異なるハイパーバイザーにすぎません。 KVMを個別に使用してVMを作成できますが、なぜqemu-kvmを使用する必要があるのですか?そして、qemu-kvmとは何ですか?必要に応じて一部のKVM機能を使用するQEMUか、一部のQEMU機能を使用する必要があるKVMでないとVMを作成できませんか?
3
Columbia Rover

KVMは、QEMUなどのハイパーバイザーのサポートがなくても、独立してVMを作成できます。

はいといいえ; VMを作成できますが、CPUとRAM以外のハードウェアを提供できません。

VM仮想マシンを作成すると、virt-manager GUIのKVMリストに「localhost(QEMU)」または「QEMU/KVM」が表示されるのはなぜですか?

KVMはそれ自体では機能しません。これは、カーネルがユーザースペースに提供するAPIにすぎません。あなたが言ったように:「Linuxカーネルとして、KVMにはGUIもCLIもありません。VMを作成するためにKVMモジュールを呼び出すCコードを書く必要があります。エンドユーザー。」

そのため、エンドユーザーは通常、QEMUを介してKVMを使用します(アクセラレーションメソッドとして存在する場合)。使い慣れたqemu CLIを使用してVMを起動し、-accel kvmまたは-enable-kvm(古いバージョン)を追加するだけです。 kvmtoolなどの他のKVMを使用するVMマネージャーは他にも多数ありますが、QEMUが最も人気があります。

Libvirtにも同じことが当てはまります。KVMを直接管理するのではなく、適切なオプションでQEMUを起動するだけです。

さらに、KVMはほとんどのハードウェアをエミュレートしません– VMにディスクまたはネットワークカードを提供しません。ユーザー空間プログラムがそうすることを可能にするのに必要なフックを提供するだけです。 KVM自体は、主に特権CPU命令のみを扱います。

つまり、QEMUを使用することには別の利点があります。ゼロから実行する代わりに、QEMUがすでに実装しているすべてのエミュレートされたハードウェア(SCSIアダプター、イーサネットコントローラー)を使用できます。

libvirtは、virt- *で始まるほとんどすべての仮想化ツールがlibvirtツール、特にvirt-managerとvirt-installであると主張しています。 lib-virt FAQを参照してください。

このような主張は強制できません。他の誰かがプログラムの名前にvirt- *を使用したい場合(特に、プログラムが主にmanages libvirtである場合は特に)、virt- *と名前を付けることができます。

一部の記事ではqemu-kvmについて説明していますが、私の調査によると、それらは2つの異なるハイパーバイザーにすぎません。 KVMを個別に使用してVMを作成できますが、なぜqemu-kvmを使用する必要があるのですか?そして、qemu-kvmとは何ですか?必要に応じて一部のKVM機能を使用するQEMUか、一部のQEMU機能を使用する必要があるKVMでないとVMを作成できませんか?

元々は、KVMベースのアクセラレーションサポートが追加されたQEMUのフォークでした。後でそれはメインラインQEMUにマージされたため、qemu-kvmコマンドはqemu -enable-kvmになりました(後でqemu -accel=kvmに調整されました)。

5
user1686