Comando Linux perf

Linux 命令大全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 rendimiento
  • record: registrar datos de rendimiento
  • report: analizar los datos registrados
  • top: monitoreo de rendimiento en tiempo real
  • list: enumerar eventos disponibles
  • annotate: 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

# Contar la ejecución del comando ls
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

# Registrar la ejecución del comando ls
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

# Analizar el archivo perf.data predeterminado
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

# Monitorear el rendimiento del sistema en tiempo real
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

# Enumerar todos los eventos
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

# Registrar la ejecución del programa
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

# Primera ejecución
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

# Enumerar los puntos de seguimiento de llamadas del sistema disponibles
perf list 'syscalls:*'

# Rastrear la llamada del sistema open
perf stat -e 'syscalls:sys_enter_open' -a sleep 10

Consejos de uso de perf

  1. Reducir la sobrecarga: Para análisis de rendimiento de larga duración, reduzca adecuadamente la frecuencia de muestreo (por ejemplo, -F 99)

  2. 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

  3. Generación de gráficos de llama: Combine con la herramienta FlameGraph para generar gráficos de análisis de rendimiento intuitivos

  4. Análisis multinúcleo: Use la opción -a para monitorear todas las CPU, o use -C para especificar una CPU concreta

  5. 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

  1. Problemas de permisos:

    echo -1 > /proc/sys/kernel/perf_event_paranoid

    o ejecute perf con sudo

  2. 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
  3. 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
  4. 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

  1. Documentación oficial: El directorio tools/perf/Documentation en el código fuente del kernel de Linux

  2. Libros recomendados:

    • 《Systems Performance: Enterprise and the Cloud》
    • La cima del rendimiento: comprendiendo sistemas, empresas y computación en la nube
  3. Recursos en línea:

    • El blog y el conjunto de herramientas de Brendan Gregg
    • El conjunto de herramientas perf-tools
  4. 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.


Linux 命令大全Referencia completa de comandos de Linux

Otras extensiones