Statistiques détaillées
Avec l’option --detailed
, qui s’abbrévie en -d
, on peut demander à
perf stat
d’afficher des statistiques plus détaillées incluant l’activité des
différents niveaux de cache CPU.
srun --pty \
perf stat -d \
./scale.bin 2048 10000000
Vous constaterez toutefois qu’en complément de ces nouvelles statistiques (où LLC signifie Last Level Cache, et désigne donc le cache L3 sur les processeurs Intel actuels qui ont trois niveau de cache), des pourcentages entre parenthèses sont apparus à droite de l’affichage.
Ces pourcentages sont la manière de perf
de nous avertir que nous sommes un
peu gourmands et demandons davantage de données que le CPU n’est capable d’en
surveiller à un instant T. Dans ce cas, perf
doit simuler un CPU pouvant
effectuer toutes les mesures demandées par multiplexage temporel : il alterne
entre les différents types de mesures demandés et extrapole ces résultats de
mesure partiels en supposant que l’activité du CPU est constante au fil du temps.
Le pourcentage indique pendant quel pourcentage du temps le compteur de performance CPU était réellement actif. Plus il est petit, plus la mesure est extrapolée, donc moins elle est fiable.
Si l’on veut éviter toute extrapolation, on peut demander à perf de ne mesurer
que les quantités qui nous intéressent, ici l’activité des cache CPU, en
spécifiant les événements souhaités avec l’option --event
, qui s’abbrévie en
-e
.
srun --pty \
perf stat -e L1-dcache-loads,L1-dcache-load-misses,LLC-loads,LLC-load-misses \
./scale.bin 2048 10000000
Exercice : Répétez l’expérience précédente (varier la taille du jeu de données à nombre de calculs constant), en surveillant cette fois l’activité cache.
Les métriques observées au niveau du cache L3 pourraient vous surprendre. Cependant, gardez à l’esprit que comme vous l’avez observé dans l’exercice précédent, la fréquence d’horloge du CPU diminue en situation de stress mémoire, ce qui laisse davantage de temps aux caches pour précharger spontanément des données que vous allez probablement demander par la suite. Dans ce programme simple, la prédiction de vos accès futurs est 100% efficaces.
Pour avoir une vue plus complète de l’activité des caches, vous pouvez utiliser
la liste d’événements spécifiques à Intel
mem_inst_retired.all_loads,mem_load_retired.l1_hit,mem_load_retired.l1_miss,mem_load_retired.fb_hit,mem_load_retired.l2_hit,mem_load_retired.l2_miss,mem_load_retired.l3_hit,mem_load_retired.l3_miss
.
Et pour observer ce qui se change quand vos accès mémoire ne suivent plus une
logique prévisible, essayez le programme chase.bin
, qui lit les éléments d’un
gros tableau dans un ordre aléatoire. Vous aurez probablement envie de diminuer
la charge de travail ce faisant, car c’est très inefficace.