Linux bereitet eBPF für die Erstellung von Aufgabenplanern vor

Linux

Wir wenige Tage nach der Veröffentlichung der stabilen Version von Linux 6.10, eine Version, die eine Reihe recht interessanter Änderungen sowie große Verbesserungen in Bezug auf Geräteunterstützung, Funktionen und mehr beinhalten wird.

Zu gegebener Zeit werden wir über diese Version sprechen, da der Grund für diesen Artikel in Bezug auf die nächste erwartete Version von Linux liegt, nämlich „Linux 6.11“, eine Version, für die einige Änderungen angekündigt wurden, die ich jedoch erwähne Genug Zeit, ich würde gerne in einem anderen Beitrag darauf eingehen.

Ok, jetzt komme ich zum Kern des Artikels, der in ist Verweis auf eine Ankündigung von Linus Torvalds über ihre Bereitschaft, sie in den Linux 6.11-Kernel aufzunehmen, einige Patches, die den Mechanismus implementieren „sched_ext“ (SCX).

Dieser Mechanismusoder soll eBPF verwenden, um CPU-Scheduler innerhalb des Linux-Kernels zu erstellen. Hier ist eine Zusammenfassung, wie es funktionieren wird:

  • eBPF- und CPU-Programmierer: Mithilfe von eBPF können CPU-Scheduler dynamisch geladen und im Linux-Kernel ausgeführt werden. Die Just-In-Time-Kompilierung (JIT) übersetzt eBPF-Bytecode zur Ausführung in Maschinenanweisungen.
  • SCHED_EXT-Klasse: Dies ist eine neue Programmierklasse, deren Kernel-Aufrufpriorität unter den Klassen liegt SCHED_IDLE und SCHED_NORMAL. BPF-Treiber verlinkt mit SCHED_EXT kann Aufgaben verarbeiten, die eine niedrigere Priorität als die Echtzeitausführung haben, ohne dass sich dies auf Aufgaben auswirkt, die bereits dem normalen Planer zugeordnet sind SCHED_NORMAL.
  • Operation: BPF-Treiber analysieren Warteschlangen von Aufgaben, die auf die Ausführung auf der CPU warten, und wählen aus, welche Aufgabe zugewiesen werden soll, wenn ein CPU-Kern freigegeben wird. Wenn keine aktiven BPF-Treiber vorhanden sind SCHED_EXT, Aufgaben werden über den Scheduler abgewickelt SCHED_NORMAL.
  • Vorteile: Der Mechanismus sched_ext erleichtert das dynamische Experimentieren mit verschiedenen Programmiertechniken und -strategien. Dadurch können Sie schnell funktionale Prototypen von Programmierern erstellen und diese im laufenden Betrieb in Produktionsumgebungen ersetzen. Es kann beispielsweise an die spezifischen Merkmale einer Anwendung angepasst werden und die Planungsstrategie basierend auf dem Systemstatus und anderen Faktoren ändern.

Es lohnt sich das zu erwähnen „sched_ext“ wurde ursprünglich im Jahr 2022 von Kernel-Entwicklern zur Prüfung vorgeschlagen, gefolgt von der Veröffentlichung von sechs Patch-Revisionen. Obwohl es im Hauptkernel nicht unterstützt wird, Mehrere Distributionen wie Ubuntu, Arch Linux, Fedora und NixOS bieten die Installation von „sched_ext“ über zusätzliche Pakete an. Canonical erwägt die Einbeziehung von Komponenten von „sched_ext» in Ubuntu 24.10 und Valve arbeitet an seiner Integration für das Steam Deck. In Meta basiert der Programmierer auf „sched_ext» wird bereits in der Produktionsinfrastruktur eingesetzt.

Darüber hinaus wird erwähnt, dass derzeit etwa ein Dutzend Programmierer darauf basieren „sched_ext“, jeweils mit Aufgabenplanungslogik, die im Benutzerbereich definiert und mithilfe von BPF-Programmen in den Kernel geladen wird.

  1. scx_layered: Ein hybrider Planer, der Aufgaben in Ebenen unterteilt, von denen jede ihre eigene Planungsstrategie hat. Ermöglicht Ihnen, bestimmte Aufgaben bestimmten Schichten mit garantierten CPU-Ressourcen zuzuweisen oder die Priorität einzelner Anwendungen zu erhöhen. Die von Meta entwickelte Userspace-Logik ist in Rust geschrieben.
  2. scx_rustland: Optimiert, um interaktiven Aufgaben Vorrang vor CPU-intensiven zu geben. Es verbessert beispielsweise die FPS im Terraria-Spiel während der gleichzeitigen Kernel-Kompilierung im Vergleich zum Standard-EEVDF-Scheduler. Entwickelt von einem Canonical-Mitarbeiter, mit Logik in Rust.
  3. scx_lavd: Implementiert den LAVD-Algorithmus (Latency-criticality Aware Virtual Deadline), der die Latenz bei Computerspielen und interaktiven Aufgaben reduziert, indem die Relevanz der Reduzierung von Verzögerungen und des Prozessfortschritts berücksichtigt wird. Entwickelt von Igalia und Valve, mit Logik in Rust.
  4. scx_rusty, scx_rlfifo, scx_mitosis: Planer, die Aufgabengruppen basierend auf der Last ausgleichen, einen einfachen FIFO-Scheduler implementieren und Aufgabengruppen an CPU-Kerne binden. Alles mit Rust-Komponenten.
  5. scx_central, scx_flatcg, scx_nest, scx_pair, scx_qmap, scx_simple, scx_userland: Beispiele von Programmierern mit C-Komponenten, die die verschiedenen Fähigkeiten von „sched_ext“ demonstrieren.

Abschließend ist es erwähnenswert, dass Google mit der Verwendung seines eigenen Frameworks ghOSt experimentiert, um Task-Scheduler-Entscheidungen mithilfe von BPF-Programmen zu beeinflussen, und mit der Migration von ghOSt nach sched_ext begonnen hat. Darüber hinaus entwickelt Google eine Portierung von „sched_ext“ für ChromeOS.

Quelle: https://lkml.org


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.