質問

Linuxを実行しているX86-64(Intel Nehalem)マシンのTLBミスのために、パフォーマンスオーバーヘッドを推定したいと思います。いくつかのパフォーマンスカウンターを使用して、この見積もりを取得したいと思います。誰かがこれを推定するための最良の方法は何ですか?

アルカに感謝します

役に立ちましたか?

解決

「Westmere」ベースのシステムにアクセスできる場合、コードのパフォーマンス特性は「Nehalem」にあるものと非常に似ている必要がありますが、ほぼ正確に測定する新しいハードウェアパフォーマンスカウンターイベントにアクセスできます。欲しいです。

Westmereでは、TLBミスが処理されるのを待っている間に失われたパフォーマンスの最良の見積もりは、おそらくハードウェアパフォーマンスカウンターイベント08Hからのものです。第2レベルのTLBの負荷ミスのために歩きます」。これは、「Intel®64およびIA-32 Architectures Software Developer's Manual Volume 3B:System Programming Guide、Part 2」(ドキュメント番号:253669)で説明されています。http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-3b-part-2-manual.html

このイベントが必要な理由は、TLBミス処理時間がページテーブルエントリを含むキャッシュラインを読み取るのに必要な時間によって支配されるためです。そのキャッシュラインがL2キャッシュにある場合、TLBミスのオーバーヘッドは非常に小さくなります(10サイクルのオーダー)。ラインがL3キャッシュにある場合は、おそらく25サイクルです。ラインがメモリにある場合、〜200サイクル。

  • 上位レベルのページ翻訳キャッシュにもミスがある場合、それは記憶に複数の旅行をして、目的のページテーブルエントリを見つけて取得するために必要になります(例: https://stackoverflow.com/a/9674980/1264917).
  • 一部のプロセッサでは、L2キャッシュカウンターは、L2でヒットして見逃したテーブルウォークの数を知ることができますが、ネハレムではわかりません。 (この場合、L3でヒットしたTLBウォークもかなり高速であり、メモリに行かなければならないTLBウォークは本当に必要なため、あまり役に立ちません。)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top