12

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

ありがとうアルカ

4

1 に答える 1

16

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

Westmereでは、TLBミスが処理されるのを待っている間に失われるパフォーマンスの最良の見積もりは、おそらくハードウェアパフォーマンスカウンターイベント08H、マスク04H「DTLB_LOAD_MISSES.WALK_CYCLES」からです。第2レベルTLBでのロードミスによる歩行」。これについては、http: //www.intel.com/content/www/からオンラインで入手できる「インテル®64およびIA-32アーキテクチャーソフトウェア開発者マニュアル第3B巻:システムプログラミングガイド、パート2」(文書番号:253669)で説明されてい ます。 us / en / archive-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でヒットおよびミスしたテーブルウォークの数を示しますが、Nehalemではわかりません。(この場合、L3でヒットするTLBウォークもかなり高速であり、本当に必要なのはメモリに移動する必要があるTLBウォークであるため、あまり役に立ちません。)
于 2012-03-12T22:26:58.663 に答える