Ejecutar perf sin derechos de root

27

Estoy ejecutando las pruebas de Debian con el kernel 4.1 y la versión 4.1 de la perfherramienta. En esta versión, parecen haber agregado algún tipo de protección para evitar que los usuarios normales recopilen datos de esa herramienta. Entonces, correr perfcomo usuario normal dará este error:

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 en mi instalación. Lamentablemente, no puedo cambiar ese archivo ni siquiera como root. ¿Cómo puedo permitir que mi propio usuario use perfsin derechos de sudo?

Tengo una aplicación que me gustaría comparar que no necesita root y no quiero ejecutarla como root para compararla.

kain88
fuente
Funciona perf stat -e cycles:u? El valor "3" de perf_event_paranoidse agregó en 2016 lwn.net/Articles/696216 "No permitir perf_event_open ()" y se habilitó en "Android y Debian" (también lkml.org/lkml/2016/1/11/587 bugs.launchpad. net / bugs / 1612790 debian.org/security/2017/dsa-3791 )
osgx
1
@osgx: Para mí con nivel 3 paranoico, su sugerencia no funciona, todavía no puedo usarla.
Martin Ueding

Respuestas:

41

Los archivos /procque se pueden escribir generalmente se cambian haciendo eco de un valor en ellos. Deberías intentarlo:

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

Los archivos debajo /proc/sys/también tienen el comando sysctl para facilitar el acceso, por lo que puedes hacer lo siguiente:

sudo sysctl -w kernel.perf_event_paranoid=1

(aunque el -wfor write parece ser opcional). Para asegurarse de que esto se haga en el momento del arranque, cree su propio /etc/sysctl.d/99-mysettings.confarchivo con la línea

kernel.perf_event_paranoid=1

Elija un nombre de archivo que no anule los archivos existentes en /run/sysctl.d/y /usr/lib/sysctl.d/. Ver man sysctl.d .

meuh
fuente
12
Para persistir en los reinicios:sudo sh -c 'echo kernel.perf_event_paranoid=1 > /etc/sysctl.d/local.conf'
Márcio
1
agregue el comentario a la respuesta, por favor
Leos313
1
@ Leos313 hecho. Gracias por el recordatorio.
meuh
@ Márcio: ¿Quieres añadir a local.conf, no truncar. O escriba a/etc/sysctl.d/perf.conf
Peter Cordes