Linux-Kernel: Linux 5.17 mit neuem AMD-Powermanagement

Seite 3: Umsetzung der VMA-Namen

Inhaltsverzeichnis

Der neue Patch adressiert die Probleme durch zwei Maßnahmen. Zum einen speichert er die Namen der anonymen VMAs im Kernel-Space. Um dabei einer zusätzlichen Speicherbelastung entgegenzuwirken, nutzt er eine union in der Struktur vm_area_struct, deren Speicherbereich sonst nur in file-backed Pages genutzt wird. In anonymen Pages war dieser bislang ungenutzt.

Als zweite Maßnahme gestattet er, den String mit dem Namen zwischen VMAs zu teilen. Anstatt jedem VMA seinen eigenen exklusiven String mitzugeben, gibt es bei VMAs mit gleichem Namen einen String und jede VMA verweist per Zeiger auf diesen. Als Buchhaltung nutzt die Neuimplementierung noch einen Referenzzähler auf den String, um zu erkennen, wie oft dieser verwendet wird und wann dieser obsolet wird.

Damit beendet Linux 5.17 eine lange Odyssee und gewährt der fast neun Jahre alten Idee den Einzug. Als sehr VM-getriebenes System hatte das Linux-Schwestersystem Android dieses Problem schon länger im Fokus. Es verfügt schon seit einiger Zeit über einen ähnlichen Mechanismus.

Der extended Berkeley Packet Filter (eBPF) ist eine spezielle virtuelle Laufzeitumgebung im Kernel. Sie erlaubt es, BPF-Programme aus dem Userspace zu laden und im Kernel-Kontext aufzuführen. Ein Ändern des Kernel-Quellcodes oder das Laden von Kernel-Modulen ist hierfür nicht notwendig. Bei den eBPF-Programmen hapert es aber an der Portabilität. Sie greifen auf Kernel-Strukturen zu, die sich von einer Linux-Version zur anderen ändern. Teilweise genügt es schon, den gleichen Kernel mit anderen Compiler-Optionen zu übersetzen, um die Position von Datenstrukturen zu verändern.

Vorcompilierte eBPF-Programme kommen daher nicht zum Einsatz. Das Compilieren erfolgt erst auf der Zielplattform. Bei diesem Ansatz mĂĽssen auch die passenden Software-Werkzeuge zum "Fertigstellen" der eBPF-Programme unweigerlich mit auf das Zielsystem. Zudem heiĂźt das auch, einen neuen Compile-Vorgang beim Kernel-Update.

Das Ziel der Kernel-Entwickler ist es daher, auch den Einsatz von bereits compilierten eBPF-Programmen zu ermöglichen. Diesen portablen Programmen kommt Linux 5.17 mit dem Einführen des "BPF CO-RE" (BPF Compile One, Run Everywhere) ein Stück näher. Im Zusammenspiel mit einer Userspace-Infrastruktur lassen sich damit eBPF-Programme erzeugen, die in verschiedenen Kerneln ohne eine Neu-Compilierung laufen können.

Primäres Ziel ist dabei, den Zugriff auf Kernel-Datenstrukturen unabhängig von deren Lage im Kernel zu machen. Das BPF-Programm soll Datenstrukturen über Hilfsfunktionen verwenden und das Lokalisieren der Strukturen im Kernel CO-RE überlassen. Damit werden die BPF-Programme relozierbar. Eine Einführung und Referenz bietet der BPF CO-RE reference guide von Andrii Nakryiko.