6

私の現在の仕事は、Intel Core シリーズの CPU で規定数の TLB ミスを発生させる必要がありますが、うまくいきません。多くの方法を試しましたが、どれも TLB ヒット率が非常に高かったです。x86 TLB がどのように機能するか、またはユーザー プロセス内で多数の TLB ミスを生成する方法に関する有用な情報を知っている人はいますか?

4

1 に答える 1

5

TLB は、CPU が仮想アドレスに関連付けられた物理アドレスを記憶するために使用するキャッシュです。仮想アドレス空間はページに分割され、通常はそれぞれ 4KB です。TLB には、関連付けられた物理ページのアドレスを含む仮想ページごとにスペースがあります。物理アドレスがまだロードされていないページにアクセスしようとすると、TLB ミスが発生します。したがって、ミスを最大化するには、アクセスするさまざまなページの数を最大化する必要があります。

残念ながら、それはそれほど単純ではありません。単純な TLB ミスでは、ページ テーブル階層からエントリを読み取って、適切な物理アドレスを見つけます。ただし、これは物理アドレスを持つページにアクセスした場合にのみ発生します。OS は、どの仮想アドレスがどの物理アドレスを持っているかを判断します。他のアドレスから読み取ろうとすると、ページ フォールトが発生します。ページ フォールト ハンドラーは、そのページに不正にアクセスするためにプログラムを終了するか、データを移動してその仮想アドレスに物理ページを配置します。

できるだけ多くの TLB ミスを発生させる最善の方法は、次のとおりです。

  1. OS が許す限り多くのメモリを割り当てます。大きなピースと小さなピースを交互に割り当て、別の大きなピースを割り当てた後に小さなピースを解放する必要があります。これにより、断片化が最大化され、メモリができるだけ多くのページに分散されることが期待されます。
  2. 割り当てたメモリで使用されているすべての異なるページから 1 つのアドレスを含むリストを作成します。コードを含むページなど、読み取り可能であることがわかっている他のページを追加することもできます。
  3. このリストをループして、各ページからデータを読み取ります。OS は物理ページを解放して仮想ページに配置する必要があるため、(うまくいけば) ループ内の他のページに関連付けられていた物理ページが使用され、最大数の TLB ミスが発生します。

プログラムのニーズを満たすために、OS はより多くの物理ページを移動する必要があるため、使用可能な RAM が少なくなると、ミスの数が増えます。そのため、メモリを大量に消費する他のプロセスを同時に実行することをお勧めします。

于 2011-04-07T05:46:39.510 に答える