AMD SVM-V や Intel Xeon 5500 シリーズなどの一部の CPU は、ページ テーブルの 2 つのレイヤーを使用することで、ハードウェアからメモリ仮想化をサポートする機能を提供しています。

ページ テーブルの 1 番目のレイヤーには、ゲストの仮想メモリから物理メモリへの変換が格納されています。 ページ テーブルの 2 番目のレイヤーには、ゲストの物理メモリからマシンへの変換が格納されています。TLB (変換索引バッファ) は、プロセッサの MMU (メモリ管理ユニット) ハードウェアが維持する変換のキャッシュです。TLB ミスはこのキャッシュのミスであり、ハードウェアはメモリに (おそらく複数回) アクセスして必要な変換を検索する必要があります。TLB でゲストの仮想アドレスが参照できない場合、ハードウェアが両方のページ テーブルを検索し、ゲストの仮想アドレスをホストの物理アドレスに変換します。

図は、ESXi でのメモリ仮想化の実装を示しています。

図 1. ESXi のメモリ マッピング


この図は、メモリ仮想化の実装を示しています。

  • ボックスはページを表し、矢印はそれぞれメモリ マッピングを表します。

  • ゲスト仮想メモリからゲスト物理メモリへの矢印は、ゲスト OS 内のページ テーブルが保持するマッピングを表します(仮想メモリから x86 アーキテクチャ プロセッサのリニア メモリへのマッピングは示していません)。

  • ゲスト物理メモリからマシン メモリへの矢印は、VMM が保持するマッピングを表します。

  • 点線の矢印は、ゲストの仮想メモリから、シャドウ ページ テーブル (これも VMM が保持) のマシン メモリへのマッピングを表します。仮想マシンを実行している基盤となるプロセッサは、シャドウ ページ テーブルのマッピングを使用します。

仮想化によって導入される特別なレベルのメモリ マッピングのため、ESXi は、すべての仮想マシン間でメモリを効率的に管理できます。仮想マシンの物理メモリの一部は、共有ページ、またはマッピング解除されるかスワップ アウトされるページにマッピングされる場合があります。

ホストは仮想メモリ管理を行いますが、ゲスト OS が認識したり、ゲスト OS のメモリ管理サブシステムの干渉を受けたりすることはありません。

パフォーマンスについての考慮事項

ハードウェア アシストを使用すると、ソフトウェア メモリ仮想化のオーバーヘッドをなくすことができます。特に、ハードウェア アシストによって、シャドウ ページ テーブルをゲスト ページ テーブルと同期させておくために必要なオーバーヘッドがなくなります。ただし、ハードウェア アシストを使用すると、TLB ミスの遅延が大幅に増えます。結果として、ハードウェア アシストを使用することによってワークロードにメリットがあるかどうかは、ソフトウェアによるメモリ仮想化を使用した場合に発生するメモリ仮想化のオーバーヘッドに大きく依存します。ワークロードに含まれるページ テーブル アクティビティ (プロセス作成、メモリのマッピング、コンテキスト スイッチなど) が少ない場合、ソフトウェアの仮想化では、大きなオーバーヘッドは発生しません。逆に、ワークロードに大量のページ テーブル アクティビティが含まれている場合は、ハードウェア アシストを使用すると有益です。