Un runtime nel kernel
BPF (Berkeley Packet Filter) nasce nel 1992 come filtro pacchetti per tcpdump. Il concetto — eseguire piccoli programmi verificati nel kernel — viene esteso da Alexei Starovoitov (Facebook/Meta) dal 2014: eBPF introduce instruction set più ampio, verificatore statico, JIT compiler. Integrato nel kernel Linux 3.18 (dicembre 2014) e maturato nelle release 4.x-5.x.
Per 2018 eBPF è abbastanza maturo da permettere uso in produzione per observability, networking, security. Il momento di svolta per l’adozione è il rilascio di bpftrace da parte di Brendan Gregg (Netflix).
Cosa si può fare con eBPF
Programmi eBPF si “attaccano” a hook points del kernel:
- kprobes — funzioni kernel
- uprobes — funzioni userspace
- tracepoints — punti stabili nel kernel
- network (XDP, tc) — packet processing
- cgroup — eventi container
- perf events, LSM hooks (security), fentry/fexit
Ogni hook esegue codice eBPF che:
- Osserva stato kernel
- Accumula statistiche in maps (hash, array, histogram)
- Può modificare comportamento (in XDP, in LSM) entro limiti del verificatore
bpftrace — DSL per tracing
bpftrace, rilasciato nel novembre 2018 da Brendan Gregg e Alastair Robertson, porta eBPF alla portata di sysadmin. DSL simile a awk:
# Conta syscall per processo
bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @[comm] = count(); }'
# Latenza delle read syscall
bpftrace -e '
kprobe:vfs_read { @start[tid] = nsecs; }
kretprobe:vfs_read /@start[tid]/ {
@latency = hist(nsecs - @start[tid]);
delete(@start[tid]);
}'
Esegui uno script bpftrace, vedi lo stato del sistema a un livello di dettaglio precedentemente disponibile solo con SystemTap (più complesso, meno stabile).
BCC e BPF CO-RE
- BCC (BPF Compiler Collection, 2015) — raccolta di tool Python + eBPF di Brendan Gregg e team IO Visor:
execsnoop,opensnoop,tcpconnect,biolatency,tcplife, decine d’altri - BPF CO-RE (Compile Once, Run Everywhere, 2019-2020) — consente di compilare eBPF una volta e eseguirlo su kernel diversi, bypassando il problema di compatibilità dei symbol offsets
Progetti basati su eBPF
- Cilium — CNI/service mesh su eBPF (articolo dedicato)
- Falco — runtime security su eBPF probe (articolo dedicato)
- Pixie (Splunk/Palo Alto) — observability auto-telemetry via eBPF
- Tetragon (Isovalent) — runtime security con enforcement
- Parca (Polar Signals) — continuous profiling
- Pyroscope — profiling
- Katran (Facebook) — L4 load balancer
Nel contesto italiano
eBPF adottato indirettamente via Cilium, Falco, strumenti commerciali. Direttamente:
- Performance troubleshooting avanzato (team SRE)
- CERT e incident response
- Didattica Linux avanzata
Riferimenti: eBPF in Linux kernel 3.18 (dicembre 2014), Alexei Starovoitov. bpftrace 0.9 (novembre 2018), Brendan Gregg e Alastair Robertson. BCC (IO Visor). BPF CO-RE. Brendan Gregg, “BPF Performance Tools” (Addison-Wesley, 2019).
