34

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

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

  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
4

3 に答える 3

31

いくつかの答え:

  • L1レベル 1 キャッシュで、最小かつ最速です。LLC一方、 はキャッシュ階層の最後のレベルを指し、最大だが最も遅いキャッシュを示します。
  • ivs.dは、命令キャッシュとデータ キャッシュを区別します。このように分割されるのは L1 だけで、他のキャッシュはデータと命令の間で共有されます。
  • TLB仮想アドレスを物理アドレスにマッピングするときに使用されるキャッシュである変換ルックアサイド バッファを指します。
  • 指定されたアドレスが命令またはデータのどちらを参照しているかに応じて、異なる TLB カウンター。
  • すべてのデータ アクセスについて、指定されたメモリ位置が読み取り、書き込み、またはプリフェッチ (つまり、後で読み取りのために取得) されたかどうかに応じて、異なるカウンターが保持されます。
  • ミスの数は、特定のデータ項目がアクセスされたがキャッシュに存在しなかった頻度を示します。
于 2012-09-26T12:50:31.197 に答える
28

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-missesperf リストで示されるイベントが対応していることがわかります。PERF_COUNT_HW_CACHE_MISSES

于 2013-03-07T22:52:02.353 に答える