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

Statistiques détaillées

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

Statistiques des événements de cache CPU

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.