Ho bisogno delle autorizzazioni di root (admin) per eseguire lo strumento 'perf' di userspace? (gli eventi perf sono abilitati nel kernel Linux)


25

Devo eseguire lo perfstrumento userspace come amministratore di sistema (root) oppure posso eseguirlo (o almeno alcuni sottocomandi) come utente normale?


2
I programmi Unix che non possono fare ciò che devono fare per mancanza di autorizzazioni di solito generano un errore se non possono fare il loro lavoro. Eseguilo e vedi!
Caleb,

1
Sto ponendo questa domanda per decidere se vale la pena provare a installare (come utente normale, in $ HOME) parte dello spazio utente dello perfstrumento (che è / può essere non banale).
Jakub Narębski,

FYI in Ubuntu perfè in linux-toolspacchetto, quindi l'installazione perfè semplice.
Jakub Narębski,

1
@ JakubNarębski: Tranne se non è la tua macchina e gli amministratori sono riluttanti ad installare i pacchetti.
Martin Ueding

Risposte:


33

Quello che puoi fare perfsenza essere root dipende dall'impostazione sysctl .kernel.perf_event_paranoid

  • kernel.perf_event_paranoid= 2: non è possibile eseguire alcuna misurazione. Il perfprogramma di utilità potrebbe essere ancora utile per analizzare i record esistenti con perf ls, perf report, perf timecharto perf trace.
  • kernel.perf_event_paranoid= 1: è possibile tracciare un comando con perf stato perf recorde ottenere i dati di profilazione del kernel.
  • kernel.perf_event_paranoid= 0: è possibile tracciare un comando con perf stato perf recorde ottenere i dati degli eventi della CPU.
  • kernel.perf_event_paranoid= -1: ottieni un accesso non elaborato ai tracepoint del kernel (in particolare, puoi mmapil file creato da perf_event_open, non so quali siano le implicazioni).

1
Bello. cat /proc/sys/kernel/perf_event_paranoidrestituisce 1, quindi sembra che sarei in grado di prendere almeno alcune misurazioni (A proposito. qual è la differenza tra "dati di profilo del kernel" e "dati di eventi della CPU"? Il riferimento è sufficiente)
Jakub Narębski

2
@Jakub: Da quanto ho capito, gli eventi del kernel consentono di vedere le chiamate a varie funzioni del kernel. Gli eventi CPU sono contatori nella CPU che indicano quante volte è stata colpita una determinata posizione in memoria. Non li ho mai usati, quindi non posso dirti di più su di loro; LWN ha parecchi articoli sull'argomento ed è ancora in evoluzione.
Gilles 'stop SO-essere malvagio'

4
Con paranoico = 2, puoi comunque profilare il tuo codice nello spazio utente (ad es. perf stat awk 'BEGIN{for(i=0;i<10000000;i++){}}'Mostrerà un ciclo accurato dello spazio utente e conteggi delle istruzioni, e puoi anche ottenere conteggi per uops_issued.any e così via), ma non ottieni conteggi per il codice eseguito durante le chiamate di sistema / interruzioni. Quindi la frequenza della CPU riportata (cicli / tempo) è almeno leggermente inferiore a quella effettiva a causa del tempo trascorso nel kernel. Vedi anche Quale restrizione perf_event_paranoid == 1 sta effettivamente mettendo su x86 perf?
Peter Cordes,

"Eventi CPU" significa profilare tutto su un intero core, anziché per processo / thread. cioè paranoico = 1 o superiore ti impedisce di profilare il codice di un altro utente e 1 ti consente solo di profilare il codice del kernel invocato dai tuoi processi (chiamate di sistema.)
Peter Cordes,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.