Colección de Compiladores BPF [BPF Compiler Collection - BCC] es un conjunto de herramientas para crear programas eficientes de rastreo y manipulación del kernel. Incluye los ejecutables argdist-bpfcc, bashreadline-bpfcc, bindsnoop-bpfcc, biolatency-bpfcc, biolatpcts-bpfcc, biopattern-bpfcc, biosnoop-bpfcc, biotop-bpfcc, bitesize-bpfcc, bpflist-bpfcc, btrfsdist-bpfcc, btrfsslower-bpfcc, cachestat-bpfcc, cachetop-bpfcc, capable-bpfcc, cobjnew-bpfcc, compactsnoop-bpfcc, cpudist-bpfcc, cpuunclaimed-bpfcc, criticalstat-bpfcc, dbslower-bpfcc, dbstat-bpfcc, dcsnoop-bpfcc, dcstat-bpfcc, deadlock-bpfcc, dirtop-bpfcc, drsnoop-bpfcc, execsnoop-bpfcc, exitsnoop-bpfcc, ext4dist-bpfcc, ext4slower-bpfcc, f2fsslower-bpfcc, filegone-bpfcc, filelife-bpfcc, fileslower-bpfcc, filetop-bpfcc, funccount-bpfcc, funcinterval-bpfcc, funclatency-bpfcc, funcslower-bpfcc, gethostlatency-bpfcc, hardirqs-bpfcc, inject-bpfcc, javacalls-bpfcc, javaflow-bpfcc, javagc-bpfcc, javaobjnew-bpfcc, javastat-bpfcc, javathreads-bpfcc, killsnoop-bpfcc, klockstat-bpfcc, kvmexit-bpfcc, llcstat-bpfcc, mdflush-bpfcc, memleak-bpfcc, mountsnoop-bpfcc, mysqld_qslower-bpfcc, netqtop-bpfcc, nfsdist-bpfcc, nfsslower-bpfcc, nodegc-bpfcc, nodestat-bpfcc, offcputime-bpfcc, offwaketime-bpfcc, oomkill-bpfcc, opensnoop-bpfcc, perlcalls-bpfcc, perlflow-bpfcc, perlstat-bpfcc, phpcalls-bpfcc, phpflow-bpfcc, phpstat-bpfcc, pidpersec-bpfcc, ppchcalls-bpfcc, profile-bpfcc, pythoncalls-bpfcc, pythonflow-bpfcc, pythongc-bpfcc, pythonstat-bpfcc, rdmaucma-bpfcc, readahead-bpfcc, reset-trace-bpfcc, rubycalls-bpfcc, rubyflow-bpfcc, rubygc-bpfcc, rubyobjnew-bpfcc, rubystat-bpfcc, runqlat-bpfcc, runqlen-bpfcc, runqslower-bpfcc, shmsnoop-bpfcc, slabratetop-bpfcc, sofdsnoop-bpfcc, softirqs-bpfcc, solisten-bpfcc, sslsniff-bpfcc, stackcount-bpfcc, statsnoop-bpfcc, syncsnoop-bpfcc, syscount-bpfcc, tclcalls-bpfcc, tclflow-bpfcc, tclobjnew-bpfcc, tclstat-bpfcc, tcpaccept-bpfcc, tcpcong-bpfcc, tcpconnect-bpfcc, tcpconnlat-bpfcc, tcpdrop-bpfcc, tcplife-bpfcc, tcpretrans-bpfcc, tcprtt-bpfcc, tcpstates-bpfcc, tcpsubnet-bpfcc, tcpsynbl-bpfcc, tcptop-bpfcc, tcptracer-bpfcc, threadsnoop-bpfcc, tplist-bpfcc, trace-bpfcc, ttysnoop-bpfcc, ucalls, uflow, ugc, uobjnew, ustat, uthreads, vfscount-bpfcc, vfsstat-bpfcc, virtiostat-bpfcc, wakeuptime-bpfcc, wqlat-bpfcc, xfsdist-bpfcc, xfsslower-bpfcc, zfsdist-bpfcc y zfsslower-bpfcc.
# biolatency-bpfcc
# execsnoop-bpfcc
# execsnoop-bpfcc -u 1000
# runqlat-bpfcc
# tcptop-bpfcc
# tcpconnect-bpfcc
# tcpretrans-bpfcc
# bashreadline-bpfcc
# opensnoop-bpfcc
# execsnoop-bpfcc
# biolatency-bpfcc
# tcptop-bpfcc
# opensnoop-bpfcc
# bitesize-bpfcc (muestra un histograma del tamaño de las peticiones de entrada/salida a disco
# bitesize-bpfcc -p $(pgrep firefox)
# vfscount-bpfcc
# runqslower-bpfcc 5000 (
# oomkill-bpfcc
Nota.- Casi todas las herramientas de bpfcc-tools aceptan el flag -h que no solo muestra los parámetros, sino que suele incluir ejemplos de uso real al final de la ayuda.
Las columnas de las muestras indican:
Columna usecs --> Es el rango de tamaño. Se usa una escala logarítmica [potencias de 2: 1, 2, 4, 8, 16...].
Columna count --> Cuántas veces ha ocurrido una operación en ese rango.
Columna distribution --> Una barra visual para ver dónde está el "peso" de la actividad.
Interpretar los datos de un proceso;
4 -> 7 : 6 |****************************************|
4096 -> 8191 : 896 | |
El primer dato indica que un proceso ha realizado 6 operaciones de entre 4 y 7 KB. Si existen miles de eventos en la franja de 0 -> 1 o 2 -> 3, indica un software muy ineficiente que está "picoteando" el disco constantemente en lugar de leer bloques grandes. El segundo que hay 896 procesos que han tenido que esperar entre 4 y 8 milisegundos (4096 usecs) para poder ejecutarse. Este pico de carga es normal al abrir un navegador pero si el pc está en reposo significa saturación de CPU.