Comando Linux bpftrace
Manual completo de comandos de Linux
bpftrace es una herramienta de rastreo avanzada basada en eBPF (Filtro de Paquetes Berkeley Extendido) que permite a los desarrolladores observar y analizar dinámicamente el estado de ejecución del sistema Linux sin modificar el código del kernel.
eBPF es una tecnología revolucionaria en el kernel de Linux que proporciona un entorno de máquina virtual seguro para ejecutar código definido por el usuario en el kernel. bpftrace se construye sobre eBPF y ofrece una capa de abstracción más simple y de mayor nivel.
Ventajas principales de bpftrace
Observación del sistema en tiempo real
- Sin necesidad de reiniciar el sistema o las aplicaciones
- Sobrecarga de rendimiento extremadamente baja
- Puede observar programas del kernel y del espacio de usuario
Capacidades de sondeo flexibles
- Admite múltiples tipos de puntos de sondeo: entrada/salida de funciones, temporizadores, eventos de hardware, etc.
- Puede rastrear llamadas al sistema, eventos de red, E/S de disco, etc.
Lenguaje de scripting simple
- Sintaxis similar a AWK, con una curva de aprendizaje suave
- Funciones y variables integradas abundantes
- Admite filtrado de condiciones y estadísticas de agregación
Instalación y configuración de bpftrace
Método de instalación
Ejemplo
sudo apt install bpftrace
# CentOS/RHEL
sudo yum install bpftrace
# Compilar desde el código fuente
git clone https://github.com/iovisor/bpftrace.git
mkdir bpftrace/build && cd bpftrace/build
cmake ..
make
sudo make install
Verificar la instalación
sudo bpftrace -e 'BEGIN { printf("Hello, bpftrace!n"); }'
Sintaxis básica de bpftrace
Un programa bpftrace se compone de puntos de sondeo (probe) y acciones asociadas (action). La estructura básica es la siguiente:
probe /filter/ {
action
}
Tipos de puntos de sondeo
| Tipo de punto de sondeo | Descripción | Ejemplo |
|---|---|---|
kprobe |
Entrada de función del kernel | kprobe:vfs_read |
kretprobe |
Retorno de función del kernel | kretprobe:vfs_read |
uprobe |
Entrada de función de espacio de usuario | uprobe:/bin/bash:readline |
tracepoint |
Punto de rastreo estático del kernel | tracepoint:syscalls:sys_enter_open |
interval |
Disparo por temporizador | interval:s:5 |
software |
Evento de software | software:faults:major |
Variables integradas comunes
pid: ID del proceso actualtid: ID del hilo actualcomm: Nombre del proceso actualnsecs: Marca de tiempo en nanosegundosarg0-argN: Parámetros de la funciónretval: Valor de retorno de la función
Ejemplos prácticos de bpftrace
1. Rastrear llamadas al sistema
Ejemplo
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_open { @[comm] = count(); }'
2. Analizar el tiempo de ejecución de funciones
Ejemplo
sudo bpftrace -e '
kprobe:vfs_read { @start[tid] = nsecs; }
kretprobe:vfs_read /@start[tid]/ {
@times = hist(nsecs - @start[tid]);
delete(@start[tid]);
}'
3. Monitorear el acceso a archivos de procesos
Ejemplo
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_openat /pid == 1234/ { printf("%s -> %sn", comm, str(args->filename)); }'
4. Contar conexiones TCP
Ejemplo
sudo bpftrace -e 'kprobe:tcp_connect { @[comm] = count(); }'
Características avanzadas de bpftrace
1. Función de mapa (Map)
bpftrace proporciona varios tipos de mapas integrados para la agregación de datos:
Ejemplo
@hist = hist(nsecs);
# Calcular el promedio
@avg = avg(nsecs);
# Contar valores únicos
@unique = count();
2. Filtrado de condiciones
Ejemplo
tracepoint:syscalls:sys_enter_read /pid == 1234/ {
printf("PID %d reading %d bytesn", pid, args->count);
}
3. Combinación de múltiples sondas
Ejemplo
kprobe:sock_alloc {
@socket[tid] = 1;
}
kprobe:tcp_connect /@socket[tid]/ {
printf("socket %d connecting to %s:%dn", args->sock->__sk_common.skc_dport,
ntop(args->sock->__sk_common.skc_daddr),
args->sock->__sk_common.skc_dport);
delete(@socket[tid]);
}
Mejores prácticas de bpftrace
- Limitar el alcance del rastreo: Usar PID o nombre de comando para filtrar, reduciendo la sobrecarga del sistema
- Evitar impresión excesiva: Demasiados printf pueden afectar el rendimiento
- Usar agregaciones: Utilice tanto como sea posible funciones de agregación como count(), sum(), etc.
- Limpiar recursos: Los scripts de larga duración deben limpiar los datos del mapa periódicamente
- Consideraciones de seguridad: bpftrace requiere permisos de root; ejecute scripts desconocidos con precaución
Comparación de bpftrace con otras herramientas
| Herramienta | Ventajas | Desventajas |
|---|---|---|
| bpftrace | Flexible, alto rendimiento y fácil de usar | Requiere permisos de root |
| strace | Simple, sin necesidad de compilar | Alta sobrecarga de rendimiento |
| perf | Completo en funciones, baja sobrecarga | Curva de aprendizaje pronunciada |
| SystemTap | Potente | Requiere compilación y configuración compleja |
Recursos de aprendizaje recomendados
- Documentación oficial de bpftrace
- Tutorial de una línea de bpftrace (one-liners)
- Repositorio de ejemplos de bpftrace
bpftrace es una herramienta poderosa para el análisis de rendimiento del sistema y la resolución de problemas. Al practicar estos ejemplos y dominar sus conceptos clave, podrás comprender y optimizar más profundamente el comportamiento operativo del sistema Linux.
Otras extensiones