eBPF e bpftrace: il superpotere del kernel Linux moderno

eBPF (extended Berkeley Packet Filter) maturo nei kernel Linux 4.x-5.x, con bpftrace (Brendan Gregg, 2018): DSL simile a awk per tracing kernel, hooks su syscalls/funzioni/eventi. La nuova generazione di observability e security Linux.

Open SourceCyber Security eBPFbpftraceLinux KernelBrendan GreggTracingObservabilityCyber SecurityOpen Source

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

Vuoi supporto? Sei sotto attacco? Stato dei servizi
Vuoi supporto? Sei sotto attacco? Stato dei servizi