Esegui perf senza i privilegi di root


27

Sto eseguendo test debian con il kernel 4.1 e la versione 4.1 dello perfstrumento. In questa versione sembrano aver aggiunto una sorta di protezione per impedire agli utenti normali di raccogliere dati da quello strumento. Quindi, in esecuzione perfcome utente normale darà questo errore:

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_paranoidcontiene 3 nella mia installazione. Sfortunatamente non posso cambiare quel file anche come root. Come posso consentire al mio utente di utilizzare perfsenza i diritti sudo?

Ho un'applicazione che vorrei fare il benchmark che non ha bisogno di root e non voglio eseguirla come root per confrontarla.


Funziona perf stat -e cycles:u? Il valore "3" di è perf_event_paranoidstato aggiunto nel 2016 lwn.net/Articles/696216 "Disallowing perf_event_open ()" ed è stato abilitato in "Android e Debian" (anche lkml.org/lkml/2016/1/11/587 bugs.launchpad. net / bugs / 1612790 debian.org/security/2017/dsa-3791 )
osgx

1
@osgx: per me con il livello paranoico 3 il tuo suggerimento non funziona, non mi è ancora permesso usarlo.
Martin Ueding

Risposte:


41

I file /procche sono scrivibili vengono generalmente modificati facendo eco a un valore in essi. Dovresti provare:

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

I file sotto /proc/sys/hanno anche il comando sysctl per un facile accesso, quindi puoi invece fare:

sudo sysctl -w kernel.perf_event_paranoid=1

(anche se la -wper la scrittura sembra essere facoltativo). Per assicurarti che ciò avvenga all'avvio, crea il tuo /etc/sysctl.d/99-mysettings.conffile con la linea

kernel.perf_event_paranoid=1

Scegli un nome file che non sovrascriverà i file esistenti in /run/sysctl.d/e /usr/lib/sysctl.d/. Vedi man sysctl.d .


12
Per persistere nei riavvii:sudo sh -c 'echo kernel.perf_event_paranoid=1 > /etc/sysctl.d/local.conf'
Márcio

1
aggiungi il commento alla risposta, per favore
Leos313

1
@ Leos313 fatto. grazie per il promemoria.
Meuh

@ Márcio: Si vuole accodare a local.conf, non tronca. Oppure scrivi a/etc/sysctl.d/perf.conf
Peter Cordes il
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.