Comando Linux perf
Referencia completa de comandos de Linux
perf es un conjunto de herramientas de análisis de rendimiento del sistema Linux, cuyo nombre completo es Performance Event Counters. Se basa en el subsistema perf_events del kernel de Linux y proporciona capacidades de análisis de rendimiento a nivel de hardware y software.
Las funciones principales de perf incluyen:
- Análisis de rendimiento de CPU
- Seguimiento de llamadas a funciones
- Estadísticas de eventos de hardware
- Monitoreo de eventos de software
- Rastreo de llamadas del sistema
Sintaxis básica de perf
El formato básico de sintaxis del comando perf es:
perf [--version] [--help] COMMAND [ARGS]
Los subcomandos comunes incluyen:
stat: estadísticas de contadores de rendimientorecord: registrar datos de rendimientoreport: analizar los datos registradostop: monitoreo de rendimiento en tiempo reallist: enumerar eventos disponiblesannotate: análisis a nivel de código fuente
Explicación detallada de los subcomandos comunes de perf
perf stat
Cuenta diversos eventos de hardware y software durante la ejecución del comando.
perf stat [options] command [command-options]
Opciones comunes:
-e: especificar el evento a monitorear-p: monitorear el ID de proceso especificado-a: monitorear todas las CPU-r: ejecutar repetidamente y mostrar el promedio-d: mostrar más eventos detallados
Ejemplo:
Ejemplo
perf stat ls
# Monitorear el proceso especificado
perf stat -p 1234
# Monitorear eventos específicos
perf stat -e cycles,instructions,cache-misses ls
perf record
Registra datos de rendimiento en un archivo (por defecto, perf.data).
perf record [options] command [command-options]
Opciones comunes:
-g: registrar gráfico de llamadas (call graph)-F: frecuencia de muestreo (Hz)-p: registrar el proceso especificado-o: especificar archivo de salida-e: especificar los eventos a registrar
Ejemplo:
Ejemplo
perf record ls
# Registrar el proceso 1234 a una frecuencia de 99 Hz
perf record -F 99 -p 1234 -g
perf report
Analiza los datos registrados por perf record.
perf report [options]
Opciones comunes:
-i: especificar archivo de entrada-n: mostrar la cantidad de muestras--stdio: salida en modo texto-g: mostrar gráfico de llamadas-s: ordenar por el campo especificado
Ejemplo:
Ejemplo
perf report
# Analizar el archivo especificado y generar salida en modo texto
perf report -i perf.data.old --stdio
perf top
Muestra en tiempo real las funciones que más consumen recursos del sistema.
perf top [options]
Opciones comunes:
-e: especificar el evento a monitorear-p: monitorear el proceso especificado-K: ocultar símbolos del kernel-U: ocultar símbolos del espacio de usuario-g: mostrar gráfico de llamadas
Ejemplo:
Ejemplo
perf top
# Monitorear eventos específicos
perf top -e cache-misses
perf list
Enumera todos los eventos que se pueden monitorear.
perf list [hw|sw|cache|tracepoint|pmu|event_glob]
Ejemplo:
Ejemplo
perf list
# Enumerar eventos de caché de hardware
perf list cache
Tipos de eventos de perf
perf puede monitorear varios tipos de eventos:
| Tipo de evento | Descripción | Ejemplo |
|---|---|---|
| Hardware | Eventos de hardware de CPU | cycles, instructions |
| Software | Eventos de software del kernel | context-switches, page-faults |
| Cache | Eventos relacionados con caché | cache-references, cache-misses |
| Tracepoints | Puntos de seguimiento estáticos del kernel | syscalls, block, sched |
| PMU | Eventos específicos del procesador | (vendor specific) |
| Breakpoints | Eventos de punto de interrupción | mem:[:access] |
Ejemplos de aplicación práctica de perf
1. Analizar cuellos de botella de rendimiento del programa
Ejemplo
perf record -g ./my_program
# Analizar resultados
perf report -g
2. Encontrar funciones calientes de la CPU
perf top -p $(pidof my_program)
3. Comparar diferencias de rendimiento entre dos ejecuciones
Ejemplo
perf record -o perf.data.1 ./my_program input1
# Segunda ejecución
perf record -o perf.data.2 ./my_program input2
# Comparar diferencias
perf diff perf.data.1 perf.data.2
4. Analizar llamadas del sistema
Ejemplo
perf list 'syscalls:*'
# Rastrear la llamada del sistema open
perf stat -e 'syscalls:sys_enter_open' -a sleep 10
Consejos de uso de perf
-
Reducir la sobrecarga: Para análisis de rendimiento de larga duración, reduzca adecuadamente la frecuencia de muestreo (por ejemplo, -F 99)
-
Resolución de símbolos: Asegúrese de que los símbolos de depuración estén disponibles; puede instalar paquetes de depuración o compilar el programa con -g
-
Generación de gráficos de llama: Combine con la herramienta FlameGraph para generar gráficos de análisis de rendimiento intuitivos
-
Análisis multinúcleo: Use la opción -a para monitorear todas las CPU, o use -C para especificar una CPU concreta
-
Separación de espacio de usuario/kernel: Use las opciones -k y -u para analizar el kernel y el espacio de usuario respectivamente
Solución de problemas comunes
-
Problemas de permisos:
echo -1 > /proc/sys/kernel/perf_event_paranoid
o ejecute perf con sudo
-
Falta información de símbolos:
- Asegúrese de que el programa se compile con la opción -g
- Instale paquetes de símbolos de depuración
-
Datos de muestreo demasiado grandes:
- Reducir la frecuencia de muestreo
- Acortar el tiempo de muestreo
- Use --no-call-graph para reducir la información del gráfico de llamadas
-
No se pueden resolver lenguajes de alto nivel como Java/Python:
- Se requiere soporte de herramientas perf específicas para el lenguaje
- Considere usar herramientas de análisis específicas del lenguaje
Recursos de aprendizaje avanzado
-
Documentación oficial: El directorio tools/perf/Documentation en el código fuente del kernel de Linux
-
Libros recomendados:
- 《Systems Performance: Enterprise and the Cloud》
- La cima del rendimiento: comprendiendo sistemas, empresas y computación en la nube
-
Recursos en línea:
- El blog y el conjunto de herramientas de Brendan Gregg
- El conjunto de herramientas perf-tools
-
Herramientas relacionadas:
- FlameGraph: visualización de datos de rendimiento
- bpftrace: rastreo dinámico más flexible
Al dominar el comando perf, podrás analizar en profundidad las características de rendimiento del sistema Linux, localizar rápidamente los cuellos de botella de rendimiento y optimizar las aplicaciones y la configuración del sistema.
Otras extensiones