Führen Sie perf ohne root-Rechte aus


27

Ich starte Debian-Tests mit dem 4.1-Kernel und der Version 4.1 des perfTools. In dieser Version scheinen sie eine Art Schutz hinzugefügt zu haben, um normale Benutzer davon abzuhalten, Daten von diesem Tool zu sammeln. Wenn Sie also perfals normaler Benutzer ausgeführt werden, wird der folgende Fehler ausgegeben:

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_paranoidEnthält 3 in meiner Installation. Leider kann ich diese Datei nicht einmal als root ändern. Wie kann ich meinem eigenen Benutzer die Verwendung perfohne Sudo-Rechte erlauben ?

Ich habe eine Anwendung, für die ich ein Benchmarking durchführen möchte, für die Root nicht erforderlich ist, und die ich nicht als Root ausführen möchte, um das Benchmarking durchzuführen.


Does perf stat -e cycles:uArbeit? Der Wert "3" von perf_event_paranoidwurde 2016 hinzugefügt. Lwn.net/Articles/696216 "perf_event_open () nicht zulassen" und wurde in "Android und Debian" aktiviert (auch lkml.org/lkml/2016/1/11/587 bugs.launchpad). net / bugs / 1612790 ( debian.org/security/2017/dsa-3791 )
osgx

1
@osgx: Bei mir mit Paranoid Level 3 funktioniert dein Vorschlag nicht, ich darf ihn trotzdem nicht verwenden.
Martin Ueding

Antworten:


41

Dateien /proc, die beschreibbar sind, werden normalerweise geändert, indem ein Wert in sie zurückgegeben wird. Du solltest es versuchen:

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

Die Dateien unter /proc/sys/haben auch den Befehl sysctl für den einfachen Zugriff, sodass Sie stattdessen Folgendes tun können:

sudo sysctl -w kernel.perf_event_paranoid=1

(obwohl das -wfor write optional zu sein scheint). Um dies beim Booten sicherzustellen, erstellen Sie eine eigene /etc/sysctl.d/99-mysettings.confDatei mit der Zeile

kernel.perf_event_paranoid=1

Wählen Sie einen Dateinamen, der vorhandene Dateien in /run/sysctl.d/und nicht überschreibt /usr/lib/sysctl.d/. Siehe man sysctl.d .


12
So bleiben Sie bei Neustarts erhalten:sudo sh -c 'echo kernel.perf_event_paranoid=1 > /etc/sysctl.d/local.conf'
Márcio

1
Fügen

1
@ Leos313 erledigt. Danke für die Erinnerung.
Meuh

@ Márcio: Sie wollen anhängen zu local.conf, nicht gestutzt. Oder schreiben Sie an/etc/sysctl.d/perf.conf
Peter Cordes
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.