Ai-je besoin d'autorisations root (admin) pour exécuter l'outil 'perf' de l'espace utilisateur? (les événements perf sont activés dans le noyau Linux)

25

Dois-je avoir à exécuter l' perfoutil d'espace utilisateur en tant qu'administrateur système (root), ou puis-je l'exécuter (ou au moins certaines sous-commandes) en tant qu'utilisateur ordinaire?

Jakub Narębski
la source
2
Les programmes Unix qui ne peuvent pas faire ce qu'ils doivent faire par manque d'autorisations génèrent généralement une erreur s'ils ne peuvent pas faire leur travail. Exécutez-le et voyez!
Caleb
1
Je pose cette question pour décider s'il vaut la peine d'installer (en tant qu'utilisateur ordinaire, dans $ HOME) une partie de l'espace utilisateur de l' perfoutil (qui est / peut être non triviale).
Jakub Narębski
FYI dans Ubuntu perfest en linux-toolspackage, donc l'installation perfest simple.
Jakub Narębski
1
@ JakubNarębski: Sauf s'il ne s'agit pas de votre propre machine et que les administrateurs hésitent à installer des packages.
Martin Ueding

Réponses:

33

Ce que vous pouvez faire perfsans être root dépend du paramètre sysctl .kernel.perf_event_paranoid

  • kernel.perf_event_paranoid= 2: vous ne pouvez prendre aucune mesure. L' perfutilitaire pourrait encore être utile d'analyser les enregistrements existants avec perf ls, perf report, perf timechartou perf trace.
  • kernel.perf_event_paranoid= 1: vous pouvez tracer une commande avec perf statou perf record, et obtenir des données de profilage du noyau.
  • kernel.perf_event_paranoid= 0: vous pouvez tracer une commande avec perf statou perf record, et obtenir des données d'événement CPU.
  • kernel.perf_event_paranoid= -1: vous obtenez un accès brut aux points de trace du noyau (en particulier, vous pouvez mmaple fichier créé par perf_event_open, je ne sais pas quelles sont les implications).
Gilles 'SO- arrête d'être méchant'
la source
1
Agréable. cat /proc/sys/kernel/perf_event_paranoidrenvoie 1, il semble donc que je serais en mesure de prendre au moins quelques mesures (BTW. quelle est la différence entre "données de profilage du noyau" et "données d'événement CPU"? La référence suffit)
Jakub Narębski
2
@Jakub: D'après ce que je comprends, les événements du noyau vous permettent de voir les appels à diverses fonctions du noyau. Les événements CPU sont des compteurs dans le CPU qui vous indiquent combien de fois un emplacement particulier en mémoire a été atteint. Je ne les ai jamais utilisés, donc je ne peux pas vous en dire plus à leur sujet; LWN a pas mal d'articles sur le sujet, et il évolue toujours.
Gilles 'SO- arrête d'être méchant'
4
Avec paranoïaque = 2, vous pouvez toujours profiler votre propre code dans l'espace utilisateur (par exemple perf stat awk 'BEGIN{for(i=0;i<10000000;i++){}}', affichera le nombre précis de cycles et d'instructions de l'espace utilisateur, et vous pouvez même obtenir des décomptes pour uops_issued.any etc.), mais vous n'obtenez pas de décomptes pour le code qui a fonctionné pendant les appels / interruptions système. La fréquence CPU (cycles / temps) signalée est donc au moins légèrement inférieure à la fréquence réelle en raison du temps passé dans le noyau. Voir aussi Quelle restriction perf_event_paranoid == 1 applique-t-elle réellement à x86 perf?
Peter Cordes
«Événements CPU» signifie profiler tout sur un noyau entier, au lieu de par processus / thread. c'est-à-dire que paranoïaque = 1 ou supérieur vous empêche de profiler le code d'un autre utilisateur, et 1 vous permet uniquement de profiler le code du noyau invoqué par vos propres processus (appels système.)
Peter Cordes