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
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
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.