IA-32は、CPUがTLB全体を無効にする可能性があるさまざまなケースを定義しています。AMDがOpteronRev-Fプロセッサ(バルセロナ?)でリリースしたASID拡張機能から、特定のASIDのTLBエントリのみが無効になる場合があります。
問題は、ASID自体が無効になることはありませんか?ハイパーバイザーは、使用する前にASIDが有効であることを確認する必要がありますか?
IA-32は、CPUがTLB全体を無効にする可能性があるさまざまなケースを定義しています。AMDがOpteronRev-Fプロセッサ(バルセロナ?)でリリースしたASID拡張機能から、特定のASIDのTLBエントリのみが無効になる場合があります。
問題は、ASID自体が無効になることはありませんか?ハイパーバイザーは、使用する前にASIDが有効であることを確認する必要がありますか?
答えは「直接ではない」と思います。AMDシステムプログラミング仕様を見ると、VM制御ブロックのASIDフィールドは、ハイパーバイザーがVMのインスタンスごとに一意の値に設定する(最大)32ビットIDです。 TLBルックアップで追加のタグとして使用されます。
x86のTLBコンテンツを直接制御できないため、TLBに含まれるエントリを制御することはできません。プロセッサがTLBにエントリを追加することを決定した場合、エントリは現在のASIDでタグ付けされます。定義は追加すると有効になります。
これは、前述のシステムプログラミング仕様のセクション15.15.1でやや回りくどい方法で説明されています。
単一の指定されたASIDのすべての変換を選択的にフラッシュする方法を提供しない実装では、ソフトウェアは、ゲストに新しいASIDを割り当て、TLB全体が少なくともフラッシュされるまで古いASIDを再利用しないことにより、ゲストのTLBエントリを効果的にフラッシュできます。一度。
これは、プロセッサに有効または無効なASIDの概念がないことを意味します。これは、TLBがヒットするために現在の値がTLBエントリのASIDと一致する必要がある数値にすぎません。したがって、ハイパーバイザーがASIDを再利用する前に正しくフラッシュしない場合、古いTLBヒットが発生します。