Parece que la herramienta de ejecución en Linux funciona registrando un evento cuando los contadores alcanzan un valor específico, en lugar de muestrear a intervalos regulares. El perf record -e cycles,instructions -c 10000
almacena un evento cada 10000 ciclos y cada 10000 instrucciones. Se puede ejecutar contra un nuevo comando o un pid existente. Registra a perf.data
en el directorio actual.
Analizar los datos es otro asunto. Usando perf script
que se pone bastante estrecha:
ls 16040 2152149.005813: cycles: c113a068 ([kernel.kallsyms])
ls 16040 2152149.005820: cycles: c1576af0 ([kernel.kallsyms])
ls 16040 2152149.005827: cycles: c10ed6aa ([kernel.kallsyms])
ls 16040 2152149.005831: instructions: c1104b30 ([kernel.kallsyms])
ls 16040 2152149.005835: cycles: c11777c1 ([kernel.kallsyms])
ls 16040 2152149.005842: cycles: c10702a8 ([kernel.kallsyms])
...
Usted tiene que escribir un guión que lleva un montón de líneas de producción y que cuenta el número de ciclos '' y eventos 'instrucciones' en ese conjunto. Puede ajustar la resolución cambiando el parámetro -c 10000
en el comando de grabación.
He verificado el análisis ejecutando perf stat
y perf record
contra ls /
. Stat reportó 2 634 205 ciclos, 1 725 255 instrucciones, mientras que la secuencia de comandos tuvo 410 eventos de ciclos y 189 eventos de instrucciones. Cuanto menor sea el valor de -c
, más gastos adicionales parece haber en la lectura de ciclos.
También hay una opción de -F
en perf record
, que toma muestras a intervalos regulares. Sin embargo, no pude encontrar una manera de recuperar los valores del contador al usar esta opción.
Editar:perf stat
aparentemente también funciona en pids, y captura datos hasta que se presiona ctrl-c. Debería ser bastante fácil modificar la fuente para que siempre capture durante N segundos y luego ejecutarla en un bucle.
Cómo hacer ¿ejecutas el script de perf? He intentado ejecutar 'perf record -e cycles, instrucciones -c 10000 -R ls;' 'perf script', pero aparece el error ** Fatal: no event_list! **. – Ben
@Skim extraño, para mí solo escribiendo 'perf script' works. ¿Funciona 'perf informe', es decir, el archivo perf.data grabado está bien? – jpa
Resulta que estaba usando una versión anterior de perf (2.6). perf 3.0.38 funciona como usted indicó anteriormente. Volveré y te votaré cuando tenga suficiente representante. Gracias! – Ben