2017-09-07 4 views
1

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

1

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 rXXXXXXXX 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:

  1. 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

  2. Exécutez le programme showevtinfo (dans examples 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)

  3. 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 par Modif et leurs noms sont également entre crochets.

  4. Utilisez le programme check_events (également dans les exemples sous-répertoire) pour convertir en code brut du event, umask et modifiers. 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

  5. Ce code hexadécimal peut être utilisé en tant que paramètre à des outils GNU/Linux perf, par exemple perf stat par en lui fournissant -e r531003 option