1

32 nm Intel Westmere プロセッサで Linux を実行しています。パフォーマンス カウンターからの DTLB ミス数に関する一見矛盾するデータに懸念があります。次のように、ランダム メモリ アクセス テスト プログラム (シングル スレッド) を使用して 2 つの実験を実行しました。

  • 実験 (1): 次のパフォーマンス カウンターを使用して DTLB ミスをカウントしました

    DTLB_MISSES.WALK_COMPLETED ((Event 49H, Umask 02H)

  • 実験 (2): 以下の 2 つのカウンター値を合計して、DTLB ミスをカウントしました。

    MEM_LOAD_RETIRED.DTLB_MISS (Event CBH, Umask 80H)

    MEM_STORE_RETIRED.DTLB_MISS (Event 0CH, Umask 01H)

これらの実験の結果は似ていると予想しました。しかし、実験 (1) で報告された数は、実験 (2) のほぼ 2 倍であることがわかりました。どうしてこうなったのか途方に暮れています。

誰かがこの明らかな不一致に光を当てるのを助けることができますか?

4

1 に答える 1

4

最初のイベントは、投機的に実行されたメモリ アクセスを含む、すべての考えられる理由 (ロード、ストア、プリフェッチ) によって引き起こされたすべての TLB レベルへのミスの数をカウントし、他の 2 つのイベントはリタイアした (つまり、非-投機的) ロードおよびストア操作、およびその中でエラーを引き起こさなかった操作のみ。

Intel® 64 and IA-32 Architectures Software Developer's Manual の Volume 3 の Chapter 19.6 を参照してください。

ありがとう、

スタス

于 2013-07-31T15:32:01.437 に答える