2015-10-01 2 views
1

J'analyse un comportement de temps d'exécution du programme bizarre avec perf, avec un peu d'aide sur IRC. Par défaut perf stat ne répertorie que quelques compteurs, et non ceux qui vous intéressent, donc il y a un ping-pong ennuyeux de "inclure ce compteur dans la sortie" et moi l'ajouter à la liste des arguments passés via -e et coller le résultat.Comment obtenir la liste stat perf tous les événements possibles

Y at-il un moyen de faire perf stat simplement tous les compteurs émettent, de sorte qu'un rapport tous les experts doivent me aider?

+0

Cela aurait aussi aidé http://stackoverflow.com/questions/14674463/why-doesnt-perf-report-cache-misses je suppose. –

+0

Give [* this a try. *] (Http://stackoverflow.com/a/378024/23771) Le fait que vous pensiez que les compteurs d'événements CPU vont vous dire quelque chose d'utile signifie peut-être que vous avez besoin d'une manière différente de Regarde ça. –

+0

Donc, après le rapport nominal, vous concluez que ces événements ne sont pas intéressants. Vous ne pouvez pas utiliser tous les jetons, mais même si c'était le cas, je pense que vous seriez submergé par trop d'informations. Vous devriez d'abord trouver si votre programme utilise trop de CPU, s'il a un problème lié au cache ou au TLB, ou s'il passe du temps à attendre des informations de IO (accède-t-il fortement au système de fichiers par exemple?). Gère-t-il mal les allocations de mémoire? Peut-être essayer valgrind et son outil «massif». – amigadev

Répondre

0

Réponse courte: non.

Justification: L'unité CPU d'un compteur de surveillance des performances (PMU) est mise en oeuvre par un certain nombre de registres supplémentaires afin que, pour un événement choisi le registre conçu est incrémenté. Maintenant, le nombre de registres est limité, car l'ajout du registre à la CPU est très "coûteux". Ainsi, il y a beaucoup plus d'événements que les registres PMU disponibles pour les compter eux.

Ligne inférieure, vous devez choisir le sous-ensemble d'événements CPU pour surveiller à l'aide de l'unité PMU du processeur.

+0

C'est aussi ce que je pensais au début, mais d'après [le wiki du perf] (https://perf.wiki.kernel.org/index.php/Tutorial#multiple_events), "il n'y a pas de limite théorique en termes de nombre d'événements pouvant être fournis. S'il y a plus d'événements que de compteurs hw réels, le noyau les multiplexera automatiquement. Il n'y a pas de limite au nombre d'événements logiciels. Il est possible de mesurer simultanément des événements provenant de différentes sources. ", Donc ce n'est peut-être pas vrai. –

+0

Joachim Breitner, il existe une variante 'perf stat -d' qui tente d'activer environ 10-12 événements. Mais le matériel moderne fournit l'accès simultané seulement à jusqu'à 7 événements de HW; 10 événements sont multiplexés par perf. Dans mon test, tout ** multiplexe perturbe grandement les résultats **, et je conclus que je n'utiliserai pas le multiplexage par perf ... Il y a des centaines d'événements hw dans les processeurs x86 modernes, et vous devriez commencer par les jeux de base perf stat, ou perf stat -d, mais en exécute des parties avec -e ... sans multiplexage par groupes de 5-7 - quand il n'y a pas de sortie [25%], [50%] ou [75%] dans stat) – osgx