Modificateurs

Il est possible d’appliquer un certain nombre de contraintes à la façon dont perf enregistre des événements, par le biais de suffixes placés à la fin du nom de l’événement, après un signe : (par exemple L1-dcache-load-misses:u).

  • Le suffixe k permet de ne compter que les événements survenus pendant l’exécution du code du noyau Linux, et de façon symétrique le suffixe u permet de ne compter que les événements survenus hors du noyau (en user-space).
  • Le suffixe p peut être spécifié une ou plusieurs fois, pour indiquer avec quelle précision on souhaite que les événements soient localisés dans le code source du programme. Ceci concerne les mesures à base de PMU, pour lesquels une localisation parfaite des événements dans le code source peut être onéreuse voire impossible au niveau matériel à cause du parallélisme d’instructions.
    • Si ce suffixe n’est pas précisé, les événements peuvent être détectés à une distance arbitraire et variable du point où le programme se trouvait réellement quand ils se sont produit. L’interprétation de l’assembleur annoté (perf annotate) et du profil de fonctions courtes doit dans ce cas être effectuée avec de grandes précautions !
    • Si il est précisé une fois (comme dans L1-dcache-load-misses:p), les événements peuvent être détectés à distance du point du code source dont ils sont originaires, mais avec un décalage en instructions constant. Il suffit donc de trouver quel est ce décalage pour interpréter correctement l’assembleur annoté.
    • Si il est précisé deux fois (comme dans L1-dcache-load-misses:pp), perf demande en plus au CPU de viser un décalage en instructions nul. La demande sera ignorée si le CPU ne peut pas la satisfaire.
    • Si il est précisé trois fois (comme dans L1-dcache-load-misses:ppp), le CPU émulera un décalage en instructions nul si nécessaire en randomisant la position détectée du pointeur d’instruction. Attention, ce mode nécessite davantage de travail que le mode :pp du côté perf (il faut donc revoir les fréquences d’échantillonage à la baisse), et il n’est pas disponible pour tous les compteurs ni tous les fabricants de CPUs.
  • Le suffixe P représente vers la forme la plus précise du suffixe p disponible sur le CPU hôte.