仮想化:KVMとQEMUの違いは何ですか?


ベストアンサー

KVMはQEMUのフォークです。 KVMコードベースは、利用可能な場合にハードウェアアクセラレーションをサポートするように変更されます(ホストVMとゲストVMで同じアーキテクチャ)

ほとんどの場合、QEMUを使用して別のアーキテクチャをエミュレートします(たとえば、x86プロセッサを使用したARM / Powerアーキテクチャのエミュレート) 。私はこれを使用して、Intelプロセッサを搭載したラップトップのARMで実行されるRaspberryPIイメージを実行しています。

両者の違いの1つは、QEMUがハードウェア仮想化拡張機能を必要としないプロセッサで実行されることです(Intel VT / VT-d、AMD-V)、KVMはそれを使用します。ハードウェア仮想化拡張機能を使用すると、物理マシン上のハードウェアに直接アクセスできます。欠点は、KVMコードベースが別のアーキテクチャをエミュレートできないことです。

KVMがHWvirt ext。のないマシンで実行されると、VMを実行するためにQEMUに戻ります。

プロセッサがハードウェアvirtをサポートしているかどうかを確認するには、Windowsの場合、

またはhttp://www.grc.com/securable.htmで、「vmx」または「svm」拡張子を確認します。 (後者の方がはるかに簡単です)

Linuxでは、

  • egrep “(vmx | svm)” / proc / cpuinfo
両方のコードベースのマージが進行中であり、将来的には1つのプロジェクトと見なされます。これにより、KVMは廃止され、QEMUコードベースにマージされます。

ちなみに、 IntelとAMDは仮想化をサポートしていますが、ハードウェア仮想化をサポートしていないIntelプロセッサを搭載したAcerラップトップを見たことがあります。また、この拡張機能が有効になっているかどうか、BIOSを確認してください。他のBIOSでは、拡張機能がデフォルトで無効になっています。

回答

元々はサーバー障害

KVM

KVMはいくつかのものです。プロセッサを新しい「ゲスト」状態に切り替えるLinuxカーネルモジュール(現在はメインラインに含まれています)。ゲスト状態には独自のリング状態のセットがありますが、特権ring0命令はハイパーバイザーコードにフォールバックします。これは「新しいプロセッサモードの実行であるため、コードを変更する必要はありません。

プロセッサの状態の切り替えとは別に、カーネルモジュールはいくつかの低レベルの部分も処理します。 MMUレジスタ(VMの処理に使用)やPCIエミュレートされたハードウェアの一部のようなエミュレーション。

次に、KVMはQemu実行可能ファイルのフォークです。両方のチームは、差異を最小限に抑えるために積極的に取り組んでおり、差異を減らすことには進歩があります。最終的には、Qemuがどこでも機能するようにすることが目標であり、KVMカーネルモジュールが利用可能な場合は、それを使用できます。しかし、当面の間、Qemuチームはハードウェアエミュレーションと移植性に焦点を合わせ、KVMの人々はカーネルモジュール(パフォーマンスが向上することが証明されている場合は、エミュレーションの小さな部分をそこに移動することもあります)と残りのユーザースペースコードとのインターフェースに焦点を当てます。

kvm-qemu実行可能ファイルは通常のQemuと同じように機能します。つまり、RAMを割り当て、コードをロードし、再コンパイルしたりKQemuを呼び出したりする代わりに、スレッドを生成します(これは重要です)。スレッドはKVMカーネルモジュールを呼び出してゲストモードに切り替え、VMコードの実行に進みます。特権命令では、KVMカーネルモジュールに戻ります。KVMカーネルモジュールは、必要に応じて、ほとんどのハードウェアエミュレーションを処理するようにQemuスレッドに通知します。

このアーキテクチャの優れた点の1つは、ゲストがコードはposixスレッドでエミュレートされ、通常のLinuxツールで管理できます。 2コアまたは4コアのVMが必要な場合、kvm-qemuは2つまたは4つのスレッドを作成し、それぞれがKVMカーネルモジュールを呼び出して実行を開始します。並行性(十分な実際のコアがある場合)またはスケジューリング(ない場合)は、通常のLinuxスケジューラーによって管理され、コードを小さく保ち、驚きを制限します。

Qemu

QEmuは、それ自体が完全なスタンドアロンソフトウェアです。マシンをエミュレートするために使用します。非常に柔軟で移植性があります。主に、特定のプロセッサ用に記述されたバイナリコードを別のプロセッサに変換する特別な「リコンパイラ」によって機能します(たとえば、PPC MacまたはARMでMIPSコードを実行するため)。 x86 PCの場合)。

プロセッサだけでなく、Qemuには、ディスク、ネットワーク、VGA、PCI、USB、シリアル/パラレルポートなどの周辺エミュレーターの長いリストが含まれています。

出典: KVMとQEMUの違い

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です