¿Necesito permisos de root (administrador) para ejecutar la herramienta 'perf' del espacio de usuario? (los eventos de perf están habilitados en el kernel de Linux)

25

¿Debo ejecutar la perfherramienta de espacio de usuario como administrador del sistema (root), o puedo ejecutarla (o al menos algunos subcomandos) como usuario normal?

Jakub Narębski
fuente
2
Los programas de Unix que no pueden hacer lo que deben hacer por falta de permisos generalmente generarán un error si no pueden hacer su trabajo. ¡Ejecútalo y mira!
Caleb
1
Estoy haciendo esta pregunta para decidir si vale la pena intentar instalar (como usuario normal, en $ HOME) parte del espacio de usuario de la perfherramienta (que es / puede no ser trivial).
Jakub Narębski
FYI en Ubuntu perfestá en el linux-toolspaquete, por lo que la instalación perfallí es simple.
Jakub Narębski
1
@ JakubNarębski: Excepto si no es su propia máquina y los administradores son reacios a instalar paquetes.
Martin Ueding

Respuestas:

33

Lo que puede hacer perfsin ser root depende de la configuración de sysctl .kernel.perf_event_paranoid

  • kernel.perf_event_paranoid= 2: no puedes tomar ninguna medida. La perfutilidad aún podría ser útil para analizar los registros existentes con perf ls, perf report, perf timecharto perf trace.
  • kernel.perf_event_paranoid= 1: puede rastrear un comando con perf stato perf record, y obtener datos de perfil del núcleo.
  • kernel.perf_event_paranoid= 0: puede rastrear un comando con perf stato perf record, y obtener datos de eventos de CPU.
  • kernel.perf_event_paranoid= -1: obtienes acceso sin procesar a los puntos de rastreo del kernel (específicamente, puedes mmapcrear el archivo perf_event_open, no sé cuáles son las implicaciones).
Gilles 'SO- deja de ser malvado'
fuente
1
Agradable. cat /proc/sys/kernel/perf_event_paranoiddevuelve 1, por lo que parece que podría tomar al menos algunas mediciones (BTW. ¿Cuál es la diferencia entre "datos de perfil de kernel" y "datos de eventos de CPU"? La referencia es suficiente)
Jakub Narębski
2
@Jakub: Por lo que entiendo, los eventos del kernel le permiten ver llamadas a varias funciones del kernel. Los eventos de la CPU son contadores en la CPU que le indican cuántas veces se golpeó una ubicación particular en la memoria. Nunca los he usado, así que no puedo contarte más sobre ellos; LWN tiene bastantes artículos sobre el tema, y ​​todavía está evolucionando.
Gilles 'SO- deja de ser malvado'
44
Con paranoid = 2, aún puede perfilar su propio código en el espacio de usuario (por ejemplo perf stat awk 'BEGIN{for(i=0;i<10000000;i++){}}', mostrará recuentos precisos de ciclo de espacio de usuario e instrucciones, e incluso puede obtener recuentos, uops_issued.any etc.), pero no obtiene recuentos para el código que se ejecutó durante las llamadas / interrupciones del sistema. Por lo tanto, la frecuencia de la CPU informada (ciclos / tiempo) es al menos un poco más baja que la real debido al tiempo que pasa en el núcleo. Vea también ¿Qué restricción es perf_event_paranoid == 1 realmente poniendo en x86 perf?
Peter Cordes
"Eventos de CPU" significa perfilar todo en un núcleo completo, en lugar de por proceso / subproceso. es decir, paranoid = 1 o superior le impide perfilar el código de otro usuario, y 1 solo le permite perfilar el código del núcleo invocado por sus propios procesos (llamadas al sistema).
Peter Cordes