J'essaie d'utiliser perf
sur mon appareil avec un processeur AMD, mais je ne peux pas vraiment trouver des informations sur la façon d'obtenir, disons, cache-misses
de AMD. J'ai lu que vous devez écrire -e rNNN
, où NNN
est un code hex de l'événement, mais je n'ai pas réussi à trouver une table ou quelque chose à regarder ces codes. Pourriez-vous m'aider avec cela, car il semble qu'il n'y ait aucune information sur Internet! En fait, dans le manuel pour perf
il y a quelques liens, mais ils ne sont pas valides :(événements AMD perf
Répondre
Vérifiez perf list
sortie, dans les versions modernes du noyau Linux, il peut signaler certains événements matériels spécifiques à l'architecture.Certains événements matériels génériques peuvent être toujours signalés par perf list
(en particulier avec les noyaux plus anciens), mais tous ne sont pas mappés à un événement matériel réel.Les cache-misses
et cycles
sont des événements de performances génériques, pas toujours mappés (le mappage est en code source de performance autour de http://elixir.free-electrons.com/linux/latest/source/arch/x86/events/amd/core.c pour amd - avec cache-misses
Également essayer différents événements de la liste de perf avec perf stat -e event1,cycles,instructions,cpu-clock
où l'événement 1 est l'événement que vous voulez vérifier et il y a des événements de travail.
Pour encoder des événements bruts, il peut être plus facile d'utiliser des docs de processeur, des sources perf (pour un codage hexadécimal exact) et some external tools. Pour Intel il y a ocperf.py
du site http://github.com/andikleen/pmu-tools; Bojan Nikolic avec showevtinfo
util (il est également recommandé d'obtenir des codes rXXXX pour perf dans FAQ: http://web.eece.maine.edu/~vweaver/projects/perf_events/faq.html#q2e Q2e. Comment puis-je déterminer la valeur d'événement « brut » approprié):
afin d'utiliser pleinement ces compteurs on dispose actuellement de les spécifier aux
perf
outils comme code brut hexadécimal (-e rXXXX
oùXXXX
est le code). Cela soulève deux questions évidentes:
- Quels codes utiliser?
- Que signifie toute cette information?
Je vais couvrir la deuxième de ces messages dans la suite, mais pour le temps d'être ici est comment comprendre les codes premières à utiliser:
obtenir la dernière version de
perfmon2
/libpfm
(h/t cet article developerworks):git clone git: //perfmon2.git.sourceforge.net/gitroot/perfmon2/libpfm4; cd libpfm4; faire
Exécutez le programme
showevtinfo
(dansexamples
sous-répertoire) pour obtenir une liste de tous les événements disponibles, et les masques et les modificateurs qui sont pris en charge (voir la sortie ci-dessous un exemple de la sortie complète)Déterminez les événements et les masques et les modificateurs que vous souhaitez utiliser. Les masques sont préfixés par
Umask
et sont donnés sous forme de nombres hexadécimaux et également de noms symboliques entre crochets. Les modificateurs sont préfixés parModif
et leurs noms sont également entre crochets.Utilisez le programme
check_events
(également dans les exemples sous-répertoire) pour convertir en code brut duevent
,umask
etmodifiers
. Vous pouvez le faire en exécutant la commande comme suit:check_events <event name>:<umask>[(:modifers)*]
En d'autres termes, vous indiquez le nom de l'événement, l'umask et plusieurs modificateurs, tous séparés par le caractère deux-points. Le programme sera ensuite imprimer, entre autres, une spécification d'événement brut, par exemple:Codes: 0x531003
- Ce code hexadécimal peut être utilisé en tant que paramètre à des outils GNU/Linux
perf
, par exempleperf stat
par en lui fournissant-e r531003
option