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

注: このトピックでは、「メモリ」は物理 RAM または永続的なメモリを参照できます。 []

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

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

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

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

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