Ok, donc je suppose que j'ai compris.
Pour la machine Intel que j'utilise, le format est le suivant :<umask><eventselector>
où les deux sont des valeurs hexadécimales. Les zéros non significatifs du umask peuvent être supprimés, mais pas pour le sélecteur d'événement.
Donc pour l'événement 0xB0
avec le masque 0x01
Je peux appeler :
perf record -e r1B0 ./mytestapp someargs
Je n'ai pas réussi à en trouver l'analyse exacte dans le code du noyau perf (un pirate du noyau ici ?), mais j'ai trouvé ces sources :
- Une description de l'utilisation de perf avec des événements bruts dans le magazine c't 13/03 (abonnement requis), qui décrit certains événements bruts avec leur description du Manuel des développeurs de logiciels d'architecture Intel (Vol 3b)
- Un correctif sur la liste de diffusion du noyau, expliquant comment le documenter correctement. Il spécifiait que le modèle ci-dessus était "... était spécifique à x86 et incomplet en plus"
- (Mise à jour) La page de manuel des versions plus récentes montre un exemple sur les machines Intel :
man perf-list
Mettre à jour :Comme indiqué dans les commentaires (merci !), le traducteur libpfm peut être utilisé pour obtenir le bon descripteur d'événement. Le site Web lié dans les commentaires (Bojan Nikolic :Comment surveiller l'ensemble des événements de performances du processeur), découvert par l'utilisateur « osgx », l'explique plus en détail.
Il semble que vous puissiez également utiliser :
perf record -e cpu/event=0xB1,umask=0x1/u ./mytestapp someargs
Je ne sais pas où cette syntaxe est documentée.
Vous pouvez probablement utiliser les autres arguments (edge, inv, cmask) également.