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

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

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

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

ハードウェア MMU は、ハードウェアで広範なキャッシュ機能を実装して導入されるようになってから、パフォーマンスが向上しています。ソフトウェアによるメモリ仮想化の技術を使用すると、一般的なゲストでコンテキスト スイッチが毎秒 100 〜 1000 回の頻度で発生することがあります。ソフトウェア MMU では、コンテキスト スイッチごとに VMM がトラップされます。ハードウェア MMU の方法では、この問題は回避されます。

デフォルトでは、ハイパーバイザーは、ハードウェア アシスト モードで大きなページを使用して、TLB ミスのコストを削減します。最適なパフォーマンスは、ゲストの仮想アドレスからゲストの物理アドレスへの変換とゲストの物理アドレスからマシン アドレスへの変換の両方で大きなページを使用することで実現されます。

オプション LPage.LPageAlwaysTryForNPT によって、ゲストの物理アドレスからマシン アドレスへの変換で大きなページを使用するようにポリシーを変更できます。​ 詳細については、メモリの詳細属性 を参照してください。

注: バイナリ変換は、ソフトウェア ベースのメモリ仮想化でのみ機能します。