Que signifient les événements perf cache?

j'essaie de comprendre pourquoi un programme C modifié tourne plus vite que sa partie counter non modifiée (j'ajoute très peu de lignes de code pour effectuer du travail supplémentaire). Dans ce contexte, je soupçonne "effets de cache" la principale explication (cache d'instructions). Donc j'arrive à l' <!-2 https://perf.wiki.kernel.org/index.php/Main_Page) outil de profilage mais malheureusement je ne suis pas en mesure de comprendre la signification de ses sorties concernant le cache manquer.

plusieurs événements sur le cache sont fournis:

  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]

Où puis-je trouver des explications sur ces champs ? l'événement cache-misses est toujours plus petit que les autres événements. Quel est cet événement de la mesure ?

comment interpréter les 26 760 L1-icache-load-miss pour ls vs les 5 708 cache-MISS dans l'exemple suivant ?

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
24
demandé sur osgx 2012-09-26 16:12:28

2 réponses

Vous semblez penser que l' cache-misses événement est la somme de tous les autres types de défauts de cache (L1-dcache-load-misses, et ainsi de suite). C'est en fait pas vrai.

cache-misses event représente le nombre d'accès mémoire qui ne peut être servi par aucun cache.

j'admets que la documentation de perf n'est pas la meilleure.

cependant, on peut apprendre beaucoup de choses à ce sujet en lisant (en supposant que vous avez déjà une bonne connaissance de la façon dont un CPU et une performance le doc de la fonction perf_event_open ():

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

Par exemple, en le lisant, vous pouvez voir que le cache-misses event shown by perf list correspond to PERF_COUNT_HW_CACHE_MISSES

19
répondu fireboot 2013-03-08 10:40:30

Quelques réponses:

  • L1 est le cache de niveau 1, le plus petit et le plus rapide. LLC d'autre part, se réfère au dernier niveau de l' hiérarchie de cache, indiquant ainsi le plus grand mais le plus lent cache.
  • i vs. d distingue le cache d'instruction du cache de données. Seul L1 est divisé de cette façon, les autres caches sont partagés entre les données et les instructions.
  • TLB se réfère au traduction lookaside tampon, un cache utilisé pour mapper des adresses virtuelles vers des adresses physiques.
  • différents compteurs TLB selon que l'adresse mentionnée renvoie à une instruction ou à certaines données.
  • pour tous les accès de données, différents compteurs sont conservés selon que l'emplacement de mémoire donné a été lu, écrit ou prédéfini (c.-à-d. récupéré pour la lecture à un moment ultérieur).
  • le nombre de données manquantes indique la fréquence d'accès à un élément de données donné, mais présent dans le cache.
25
répondu MvG 2012-09-26 12:50:31