Benötige ich root (admin) -Berechtigungen, um das Userspace-Tool 'perf' auszuführen? (Perf Events sind im Linux Kernel aktiviert)

25

Muss ich das perfUserspace-Tool als Systemadministrator (root) ausführen oder kann ich es (oder zumindest einige Unterbefehle) als normaler Benutzer ausführen?

Jakub Narębski
quelle
2
Unix-Programme, die aufgrund fehlender Berechtigungen nicht das tun können, was sie tun müssen, lösen normalerweise einen Fehler aus, wenn sie ihre Aufgabe nicht erfüllen können. Führen Sie es aus und sehen Sie!
Caleb
1
Ich stelle diese Frage, um zu entscheiden, ob es sich lohnt, den Userspace-Teil des perfTools (der nicht trivial ist / sein kann ) als normaler Benutzer in $ HOME zu installieren .
Jakub Narębski
FYI in Ubuntu perfist im linux-toolsPaket enthalten, daher ist die Installation perfdort einfach.
Jakub Narębski
1
@ JakubNarębski: Es sei denn, es handelt sich nicht um Ihre eigene Maschine, und die Administratoren zögern, Pakete zu installieren.
Martin Ueding

Antworten:

33

Was Sie tun können, perfohne root zu sein, hängt von der Einstellung von sysctl ab .kernel.perf_event_paranoid

  • kernel.perf_event_paranoid= 2: Sie können keine Messungen vornehmen. Der perfNutzen könnte noch nützlich sein , vorhandenen Datensätze zu analysieren mit perf ls, perf report, perf timechartoder perf trace.
  • kernel.perf_event_paranoid= 1: Sie können einen Befehl mit perf statoder verfolgen perf recordund Kernel-Profildaten abrufen.
  • kernel.perf_event_paranoid= 0: Sie können einen Befehl mit perf statoder verfolgen perf recordund CPU-Ereignisdaten abrufen.
  • kernel.perf_event_paranoid= -1: Sie erhalten unformatierten Zugriff auf Kernel-Tracepoints (insbesondere können Sie mmapdie von erstellte Datei perf_event_open, ich weiß nicht, was die Auswirkungen sind).
Gilles 'SO - hör auf böse zu sein'
quelle
1
Nett. cat /proc/sys/kernel/perf_event_paranoidGibt 1 zurück, so dass es den Anschein hat, als könnte ich zumindest einige Messungen durchführen (Übrigens: Was ist der Unterschied zwischen "Kernel-Profiling-Daten" und "CPU-Ereignisdaten"? Die Referenz ist ausreichend)
Jakub Narębski
2
@ Jakub: Soweit ich weiß, können Sie bei Kernel-Ereignissen Aufrufe verschiedener Kernelfunktionen sehen. CPU-Ereignisse sind Leistungsindikatoren in der CPU, die angeben, wie oft eine bestimmte Stelle im Speicher getroffen wurde. Ich habe sie nie benutzt, deshalb kann ich dir nicht mehr darüber erzählen. LWN hat eine ganze Reihe von Artikeln zu diesem Thema, die sich noch weiterentwickeln.
Gilles 'SO- hör auf böse zu sein'
4
Mit paranoid = 2 können Sie immer noch Ihren eigenen Code im User-Space profilieren (z. B. perf stat awk 'BEGIN{for(i=0;i<10000000;i++){}}'werden genaue Benutzer-Space-Zyklen und Anweisungszählungen angezeigt, und Sie können sogar Zählungen für uops_issued.any usw. abrufen), aber Sie erhalten keine Zählungen für Code das lief während Systemaufrufen / Interrupts. Daher ist die gemeldete CPU-Frequenz (Zyklen / Zeit) aufgrund der im Kernel verbrachten Zeit zumindest geringfügig niedriger als die tatsächliche. Siehe auch Welche Einschränkung setzt perf_event_paranoid == 1 tatsächlich auf x86 perf?
Peter Cordes
"CPU-Ereignisse" umfassen die Profilerstellung auf einem gesamten Kern anstatt pro Prozess / Thread. dh paranoid = 1 oder höher hindert Sie daran, den Code eines anderen Benutzers zu profilieren, und 1 lässt Sie nur den Kernel-Code profilieren, der von Ihren eigenen Prozessen aufgerufen wird (Systemaufrufe).
Peter Cordes