Exécutez perf sans droits root


27

J'exécute des tests Debian avec le noyau 4.1 et la version 4.1 de l' perfoutil. Dans cette version, ils semblent avoir ajouté une sorte de protection pour empêcher les utilisateurs normaux de collecter des données à partir de cet outil. Donc, exécuter en perftant qu'utilisateur normal donnera cette erreur:

perf stat ls
Error:
You may not have permission to collect stats.
Consider tweaking /proc/sys/kernel/perf_event_paranoid:
 -1 - Not paranoid at all
  0 - Disallow raw tracepoint access for unpriv
  1 - Disallow cpu events for unpriv
  2 - Disallow kernel profiling for unpriv

perf_event_paranoiden contient 3 dans mon installation. Malheureusement, je ne peux pas changer ce fichier même en tant que root. Comment puis-je autoriser mon propre utilisateur à utiliser perfsans les droits sudo?

J'ai une application que je voudrais comparer qui n'a pas besoin de root et je ne veux pas l'exécuter en tant que root pour la comparer.


Ça perf stat -e cycles:umarche? La valeur "3" de a perf_event_paranoidété ajoutée en 2016 lwn.net/Articles/696216 "Interdiction de perf_event_open ()" et a été activée dans "Android et Debian" (également lkml.org/lkml/2016/1/11/587 bugs.launchpad. net / bugs / 1612790 debian.org/security/2017/dsa-3791 )
osgx

1
@osgx: Pour moi avec le niveau 3 paranoïaque, votre suggestion ne fonctionne pas, je ne suis toujours pas autorisé à l'utiliser.
Martin Ueding

Réponses:


41

Les fichiers /procinscriptibles sont généralement modifiés en y faisant écho une valeur. Tu devrais essayer:

sudo sh -c 'echo 1 >/proc/sys/kernel/perf_event_paranoid'

Les fichiers sous /proc/sys/ont également la commande sysctl pour un accès facile, vous pouvez donc faire à la place:

sudo sysctl -w kernel.perf_event_paranoid=1

(bien que l' écriture-w for semble facultative). Pour vous assurer que cela se fait au démarrage, créez votre propre fichier avec la ligne/etc/sysctl.d/99-mysettings.conf

kernel.perf_event_paranoid=1

Choisissez un nom de fichier qui ne remplacera pas les fichiers existants dans /run/sysctl.d/et /usr/lib/sysctl.d/. Voir man sysctl.d .


12
Pour persister à travers les redémarrages:sudo sh -c 'echo kernel.perf_event_paranoid=1 > /etc/sysctl.d/local.conf'
Márcio

1
ajouter le commentaire à la réponse, s'il vous plaît
Leos313

1
@ Leos313 fait. Merci pour le rappel.
meuh

@ Márcio: Vous voulez ajouter à local.conf, pas tronquer. Ou écrivez à/etc/sysctl.d/perf.conf
Peter Cordes
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.