web-dev-qa-db-ja.com

パフォーマンスキャッシュイベントとは何ですか?

変更されたCプログラムが、変更されていない対応プログラムよりも高速に実行される理由を理解しようとしています(追加の作業を実行するためにコード行をほとんど追加していません)。この文脈では、「キャッシュ効果」が主な説明(命令キャッシュ)であると思います。したがって、perf(https://perf.wiki.kernel.org/index.php/Main_Page)プロファイリングツールに到達しましたが、残念ながら、キャッシュミスに関する出力の意味を理解できません。

キャッシュに関するいくつかのイベントが提供されています。

  cache-references                                   [Hardware event]
  cache-misses                                       [Hardware event]
  L1-dcache-loads                                    [Hardware cache event]
  L1-dcache-load-misses                              [Hardware cache event]
  L1-dcache-stores                                   [Hardware cache event]
  L1-dcache-store-misses                             [Hardware cache event]
  L1-dcache-prefetches                               [Hardware cache event]
  L1-dcache-prefetch-misses                          [Hardware cache event]
  L1-icache-loads                                    [Hardware cache event]
  L1-icache-load-misses                              [Hardware cache event]
  L1-icache-prefetches                               [Hardware cache event]
  L1-icache-prefetch-misses                          [Hardware cache event]
  LLC-loads                                          [Hardware cache event]
  LLC-load-misses                                    [Hardware cache event]
  LLC-stores                                         [Hardware cache event]
  LLC-store-misses                                   [Hardware cache event]
  LLC-prefetches                                     [Hardware cache event]
  LLC-prefetch-misses                                [Hardware cache event]
  dTLB-loads                                         [Hardware cache event]
  dTLB-load-misses                                   [Hardware cache event]
  dTLB-stores                                        [Hardware cache event]
  dTLB-store-misses                                  [Hardware cache event]
  dTLB-prefetches                                    [Hardware cache event]
  dTLB-prefetch-misses                               [Hardware cache event]
  iTLB-loads                                         [Hardware cache event]
  iTLB-load-misses                                   [Hardware cache event]
  branch-loads                                       [Hardware cache event]
  branch-load-misses                                 [Hardware cache event]
  node-loads                                         [Hardware cache event]
  node-load-misses                                   [Hardware cache event]
  node-stores                                        [Hardware cache event]
  node-store-misses                                  [Hardware cache event]
  node-prefetches                                    [Hardware cache event]
  node-prefetch-misses                               [Hardware cache event]

これらのフィールドに関する説明はどこにありますか? cache-missesイベントは常に他のイベントよりも小さくなります。このイベントは何を測定しますか?

次の例で、lsの26,760 L1-icache-load-missesと5,708 cache-missesを解釈する方法は?

perf stat -e L1-icache-load-misses ls
caches  caches~  out

 Performance counter stats for 'ls':

            26,760 L1-icache-load-misses                                       

       0.002816690 seconds time elapsed



perf stat -e cache-misses ls
caches  caches~  out

 Performance counter stats for 'ls':

             5,708 cache-misses                                                

       0.002822122 seconds time elapsed
29
Manuel Selva

cache-missesイベントは、他のすべての種類のキャッシュミス(L1-dcache-load-missesなど)の合計であると考えているようです。実際にはそうではありません。

cache-missesイベントは、どのキャッシュでも処理できなかったメモリアクセスの数を表します。

Perfのドキュメントが最善ではないことを認めます。

ただし、perf_event_open()関数のドキュメントを読むことで、CPUとパフォーマンスモニタリングユニットの仕組みについて十分な知識があることを前提として、これについて多くのことを学ぶことができます。

http://web.eece.maine.edu/~vweaver/projects/perf_events/perf_event_open.html

たとえば、それを読むと、パフォーマンスリストに表示されるcache-missesイベントがPERF_COUNT_HW_CACHE_MISSESに対応していることがわかります。

20
fireboot

いくつかの答え:

  • L1はレベル1キャッシュであり、最小かつ最速のキャッシュです。一方、LLCキャッシュ階層 の最後のレベルを指し、最大の、ただし最も遅いキャッシュを示します。
  • idは、命令キャッシュとデータキャッシュを区別します。このようにL1のみが分割され、他のキャッシュはデータと命令間で共有されます。
  • TLBは、仮想アドレスを物理アドレスにマッピングするときに使用されるキャッシュである translation lookaside buffer を指します。
  • 名前付きアドレスが命令を参照したのか、データを参照したのかに応じて、異なるTLBカウンター。
  • すべてのデータアクセスについて、指定されたメモリロケーションが読み取られたか、書き込まれたか、プリフェッチされたか(後で読み取るために取得されたか)に応じて、異なるカウンタが保持されます。
  • ミスの数は、データの特定の項目がアクセスされた頻度を示しますが、キャッシュに存在しません
26
MvG

コメントの評判制限により、Mvgのコメントには返信できません。 perf tutorial によると、ハードウェアイベントは、PMU evnetに直接マッピングできるイベントを指します。ただし、ハードウェアキャッシュイベントは、perfによって提供される一部のハードウェアイベントモニカーを指し、CPUによって提供される実際のイベントにマップされる場合があります。

0
dongxiao