Zurück zur Übersicht

Begriff

BTF (BPF Type Format)

Linux Kernel DevOps S5
2 Quellen 0 Lernpfade 0 Backlinks enriched

Warum wichtig?

Dieser Begriff ist ein Knoten im SengakujiWorks-Wissensnetz. Nutze Level 0 für die erste Einordnung, Level 1 für Praxis, Level 2 für technische Struktur und Level 3 für Grenzen, Fallstricke und Expertenkontext.

Wenn du ein eBPF-Programm schreibst (um Pakete zu filtern oder Crashes zu debuggen), greifst du auf Kernel-Strukturen zu (struct task_struct). Problem: Diese Strukturen ändern sich in jedem Linux-Update! Feld pid ist heute an Offset 0, morgen an Offset 4. Früher musste man eBPF-Programme auf jedem Server neu kompilieren (mit den passenden Kernel-Headern). Hölle. BTF ist wie "Metadaten für den Kernel". Der Kernel beschreibt sich selbst: "Ich habe eine Struktur task_struct, und pid ist an Offset 4." Das eBPF-Programm liest das zur Ladezeit und passt sich automatisch an (CO-RE: Compile Once - Run Everywhere). Jetzt kannst du ein Monitoring-Tool binary bauen, und es läuft auf Ubuntu, Fedora und Arch, Kernel 5.8 bis 6.5.

Merksatz: Ein kompaktes Metadatenformat im Linux-Kernel, das Typinformationen (ähnlich Debug-Symbolen) speichert, um eBPF-Programmen zu ermöglichen, portabel über verschiedene Kernel-Versionen hinweg zu laufen (CO-RE).


Quick-Check

  1. Nur für eBPF?
    Hauptsächlich. Aber es hilft auch beim "Pretty Printing" von Kernel-Strukturen in Debuggern.
  2. Was wenn Felder fehlen?
    Mit CO-RE kann man prüfen: if (bpf_core_field_exists(task->new_feature)). Dein Code kann sich also dynamisch anpassen, je nachdem, ob er auf einem alten oder neuen Kernel läuft.
  3. Voraussetzung?
    Clang/LLVM 10+ und ein Kernel ab ca. 5.8.