KVMとQEMUの違い


138

私は約読んでいるKVMと、Qemuいつかのために。今のところ、私は彼らが何をするのかを明確に理解しています。

KVMはハードウェア仮想化をサポートし、ゲストオペレーティングシステムにほぼネイティブのパフォーマンスを提供します。一方、QEmuはターゲットオペレーティングシステムをエミュレートします。

私が混乱しているのは、これら2つの座標がどのレベルにあるかです。好む

  1. RAMやメモリの共有は誰が管理しますか?
  2. 誰がI / O操作をスケジュールしますか?

回答:


194

ケム

QEmuは、独自の完全なスタンドアロンソフトウェアです。マシンをエミュレートするために使用します。非常に柔軟でポータブルです。主に、特定のプロセッサ用に作成されたバイナリコードを別のプロセッサに変換する特別な「リコンパイラ」によって機能します(たとえば、PPC macでMIPSコードを実行するか、x86 PCでARMを実行します)。

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

KQemu

ソースとターゲットの両方が同じアーキテクチャである特定のケース(x86でのx86の一般的なケースなど)では、コードを解析して「特権命令」を削除し、コンテキストスイッチに置き換える必要があります。x86 Linuxで可能な限り効率的にするために、これを処理するKQemuと呼ばれるカーネルモジュールがあります。

カーネルモジュールであるKQemuは、ほとんどのコードを変更せずに実行でき、最低レベルのring0のみの命令のみを置き換えます。その場合、ユーザー空間QemuはエミュレートされたマシンにすべてのRAMを割り当て、コードをロードします。違いは、コードを再コンパイルする代わりに、KQemuを呼び出してスキャン/パッチ/実行します。周辺ハードウェアのエミュレーションはすべてQemuで行われます。

これは、ほとんどのコードが変更されていないため、通常のQemuよりもはるかに高速ですが、ring0コード(VMカーネル内のほとんどのコード)を変換する必要があるため、パフォーマンスは依然として低下します。

KVM

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

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

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

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

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


3
そして、私はVTをサポートしたCPUを持っていないとして、悪いニュースは、誰thouseのため(だけでなく、それが«ニュース»と呼ばれることができなかった場合) - KQEMUは、もはやのUbuntuでサポート。KVMは、そのサポートなしではCPUでは動作しません。
ハイエンジェル

100

連携する場合、KVMはCPUとメモリへのアクセスを調停し、QEMUはハードウェアリソース(ハードディスク、ビデオ、USBなど)をエミュレートします。単独で作業する場合、QEMUはCPUとハードウェアの両方をエミュレートします。


9
@Javierの答えは詳細であり、もちろん受け入れられるべきですが、あなたの答えは、私が知る必要があることを正確にいくつかの文で教えてくれたので、+ 1とありがとう。
ビルの猿

-2

QEMUはより低速で、KVMはQEMUが非常に高速なハードウェア速度を達成してシステムに最高のパフォーマンスを提供するのに役立ちます。QEMUはハイパーバイザー/エミュレーターです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.