セカンドレベルアドレス変換(SLAT)は、ネストページングとも呼ばれ、ハードウェア支援型の仮想化技術であり、ソフトウェアで管理されるシャドウページテーブルに関連するオーバーヘッドを回避することを可能にします。
AMDは、第3世代Opteronプロセッサ(コードネーム:Barcelona)の登場以来、Rapid Virtualization Indexing(RVI)技術を通じてSLATをサポートしてきました。IntelのSLAT実装はExtended Page Table(EPT)として知られ、一部のCore i7、Core i5、およびCore i3プロセッサに搭載されているNehalemマイクロアーキテクチャで導入されました。
ARMの仮想化拡張機能は、ステージ2 MMUによって提供されるステージ2ページテーブルとして知られるSLATをサポートしています。ゲストOSはステージ1 MMUを使用します。この機能はARMv7veアーキテクチャでオプションとして追加され、ARMv8(32ビットおよび64ビット)アーキテクチャでもサポートされています。
Intel 80286プロセッサによる x86 アーキテクチャへのプロテクト モードの導入により、物理メモリと仮想メモリの概念が主流のアーキテクチャに導入されました。プロセスが仮想アドレスを使用し、命令がメモリへのアクセスを要求すると、プロセッサはページ テーブルまたは変換ルックアサイド バッファ(TLB)を使用して仮想アドレスを物理アドレスに変換します。仮想システムを実行すると、ホスト システムの仮想メモリがゲスト システムの物理メモリとして割り当てられ、ゲスト システム内でも同様のアドレス変換処理が行われます。アドレス変換は、ゲスト システム内 (ソフトウェア エミュレートされたゲスト ページ テーブルを使用) とホスト システム内 (物理マップ [pmap] を使用) の 2 回実行されるため、メモリ アクセスのコストが増加します。
ソフトウェアベースのシャドウページテーブルは、二重変換に比べて変換オーバーヘッドを削減するための一般的なソリューションです。シャドウページテーブルは、ゲストの仮想アドレスをホストの物理アドレスに直接変換します。各仮想マシンは個別のシャドウページテーブルを持ち、ハイパーバイザがそれらの管理を担当します。シャドウページテーブルは二重変換よりも高速ですが、仮想マシンで実行しない場合と比較すると依然としてコストがかかります。ゲストがページテーブルを更新するたびに、ハイパーバイザはシャドウテーブルの変更も管理する必要があるためです。
この変換をより効率的に行うために、プロセッサベンダーはSLATと呼ばれる技術を実装しました。各ゲスト物理アドレスをホスト仮想アドレスとして扱うことで、非仮想化ページテーブル(現在はゲストページテーブル)を走査するために使用されるハードウェアを少し拡張するだけで、ホストページテーブルを走査できるようになります。マルチレベルページテーブルの場合、ホストページテーブルは概念的にゲストページテーブル内にネストされていると考えることができます。ハードウェアページテーブルウォーカーは、追加の変換レイヤーをページテーブルにレベルを追加するのとほぼ同じように扱うことができます。
SLATとマルチレベルページテーブルを使用する場合、ゲスト物理アドレスとゲスト仮想アドレスのサイズが同じで、かつ同じサイズのページが使用されると、変換を見つけるためにたどる必要のあるレベル数が2倍になります。このため、ホストおよびゲストページテーブルの中間レベルから値をキャッシュすることの重要性が高まります。また、ホストページテーブルで大きなページを使用してレベル数を減らすことも有効です(たとえば、x86-64では、2MBページを使用するとページテーブルのレベルが1つ減ります)。仮想マシンへのメモリ割り当ては通常粗い粒度で行われるため、ゲスト物理アドレスの変換に大きなページを使用することは明らかな最適化であり、ルックアップの深さとホストページテーブルに必要なメモリを削減します。
Rapid Virtualization Indexing (RVI) は、開発中は Nested Page Tables (NPT) として知られており、プロセッサのメモリ管理ユニット(MMU) 用のAMD の第 2 世代ハードウェア支援仮想化技術です。[ 1 ] [ 2 ] RVI は、コードネーム Barcelona の 第 3 世代Opteronプロセッサで導入されました。[ 3 ]
VMwareの研究論文によると、RVI はソフトウェアのみ (シャドウ ページ テーブル) の実装と比較して最大 42% のパフォーマンス向上をもたらすことがわかりました。[ 4 ] Red Hatが実施したテストでは、OLTPベンチマークのパフォーマンスが 2 倍になることが示されました。[ 5 ]
拡張ページテーブル (EPT) は、メモリ管理ユニット(MMU) 用のIntel 第 2 世代x86 仮想化技術です。 EPT は、Intel のCore i3、Core i5、Core i7、Core i9 CPU などでサポートされています。[ 6 ]また、一部の新しいVIA CPU にも搭載されています。 EPT は、論理プロセッサをリアルモードで直接起動するために必要です。これは、Intel の用語で「無制限ゲスト」と呼ばれる機能で、Westmere マイクロアーキテクチャで導入されました。[ 7 ] [ 8 ]
VMwareの評価論文によると、「EPTはMMU集約型ベンチマークで最大48%、MMU集約型マイクロベンチマークで最大600%のパフォーマンス向上をもたらす」が、実際には一部の特殊なケースではソフトウェア実装よりもコードの実行速度が遅くなる可能性がある。[ 9 ]
ステージ2ページテーブルのサポートは、例外レベル2(EL2)を実装するARMプロセッサに搭載されています。
モードベース実行制御(MBEC)は、Intel Kaby LakeおよびAMD Zen 2 CPU(後者ではゲストモード実行トラップまたはGMETとして知られています)で初めて利用可能になったx86 SLAT実装の拡張機能です。[ 10 ]この拡張機能は、拡張ページテーブル(ゲストページテーブル)の実行ビットを2ビットに拡張します。1つはユーザー実行用、もう1つはスーパーバイザ実行用です。[ 11 ]
MBECは、カーネルモードのコード整合性を強制しながら、ゲストユーザーモードの署名なしコードの実行を高速化するために導入されました。この構成では、署名なしコードページはユーザーモードでは実行可能としてマークできますが、カーネルモードでは実行不可としてマークする必要があります。ゲストカーネルが侵害された場合でも、すべてのゲストカーネルモード実行可能コードが署名されていることを保証することで整合性を維持するため、ゲストカーネルはメモリページの実行ビットを変更する権限を持ちません。実行ビットの変更、または実行ビットを含むゲストページテーブルの切り替えは、より高い特権を持つエンティティ(この場合はホストハイパーバイザ)に委任されます。MBEがない場合、署名なしユーザーモード実行から署名付きカーネルモード実行への各エントリには、カーネルモードページテーブルへの切り替えを実行するためにハイパーバイザへのVM出口が伴う必要があります。逆の操作では、署名付きカーネルモードから署名なしユーザーモードへの出口には、別のページテーブル切り替えを実行するためにVM出口が伴う必要があります。VM出口はコード実行パフォーマンスに大きな影響を与えます。[ 12 ] [ 13 ] MBE を使用すると、同じページ テーブルを署名なしのユーザー モード コードと署名付きカーネル モード コード間で共有でき、実行コンテキストに応じて 2 組の実行権限が付与されます。実行コンテキストが署名なしのユーザー モードと署名付きカーネル モードの間で切り替わる場合、VM 出口は不要になります。
SLATをサポートするハイパーバイザーには、以下のものがあります。
上記のハイパーバイザーの中には、ソフトウェアシャドウページテーブルを実装していないため、動作するために(単に高速化するだけでなく)SLATを必要とするものがあります。このリストは、その点を完全に反映するように更新されていません。
「unrestricted guest」VM 実行制御が 1 の場合、「enable EPT」VM 実行制御も 1 にする必要があります。
{{cite web}}:|last=一般的な名前を持っています (ヘルプ)