Kontaktiere uns

info@serverion.com

PREEMPT_RT erklärt: Echtzeit-Kernel-Funktionen

PREEMPT_RT erklärt: Echtzeit-Kernel-Funktionen

PREEMPT_RT wandelt den Linux-Kernel in ein Echtzeitbetriebssystem um und gewährleistet so präzises Timing für kritische Aufgaben. Vollständig in Linux 6.12 (veröffentlicht am 20. September 2024) integriert, ermöglicht es Echtzeitfunktionen für Architekturen wie x86, ARM64 und RISC-V. Hier erfahren Sie alles Wichtige:

  • Hauptmerkmale:
    • Ersetzt herkömmliche Drehverschlüsse durch vorab bedienbare Schlafschlösser.
    • Wandelt Interrupt-Handler in Threads um, wodurch diese planbar und unterbrechbar werden.
    • Implementiert Prioritätsvererbung, um Probleme mit Prioritätsinversionen zu beheben.
    • Macht RCU-Operationen (Lesen-Kopieren-Aktualisieren) vollständig unterbrechbar.
  • Anwendungen:
    • Wird in Branchen wie der Automobilindustrie, der Robotik, der Telekommunikation und der Medizintechnik eingesetzt, wo präzises Timing von entscheidender Bedeutung ist.
    • Stromversorgungssysteme wie industrielle Automatisierungswerkzeuge, Flugsteuerungen und Hosting-Umgebungen benötigen Virtuelle private Server mit niedriger Latenz.
  • Aufstellen:
    • Aktivieren CONFIG_PREEMPT_RT in der Kernelkonfiguration.
    • Feineinstellungen wie CONFIG_NO_HZ_FULL und CONFIG_RCU_BOOST für optimale Leistung.
    • Verwenden Sie Tools wie zyklischer Test um die Latenz zu messen und die Leistung zu validieren.

PREEMPT_RT priorisiert die Zeitmessung gegenüber dem Durchsatz und macht Linux damit ideal für Anwendungen, bei denen Fristen unabdingbar sind. Für Branchen, die deterministische Leistung erfordern, ist dies ein entscheidender Vorteil.

PREEMPT_RT Kernfunktionen: Wie Linux Echtzeitleistung erreicht

PREEMPT_RT Kernfunktionen: Wie Linux Echtzeitleistung erreicht

PREEMPT_RT erklärt: Linux-Kernel für Echtzeit und extrem niedrige Latenzzeiten erstellen und optimieren

PREEMPT_RT Kernfunktionen

PREEMPT_RT konzentriert sich auf vier Hauptfunktionen, die darauf abzielen, nicht unterbrechbaren Code zu reduzieren und die Kontrolle über die Aufgabenplanung zu verbessern. Im Folgenden werden die einzelnen Funktionen genauer betrachtet.

Vollständige Kernel-Präemption

Eine der größten Neuerungen ist die Umgestaltung der Standard-Drehverschlüsse (spinlock_t) und Leser-Schreib-Sperren (rwlock_t) hinein Mutex-basierte schlafende Spinlocks. Herkömmliche Spinlocks können Verzögerungen verursachen, da sie die Präemption deaktivieren und Aufgaben in den aktiven Wartezustand zwingen. PREEMPT_RT ändert dies durch die Einführung von Sperren, die es Aufgaben ermöglichen, zu schlafen und unterbrochen zu werden, selbst wenn sie eine Ressource belegen.

Das bedeutet, dass Aufgaben mit hoher Priorität Aufgaben mit niedrigerer Priorität unterbrechen können, selbst wenn die Aufgaben mit niedrigerer Priorität Sperren halten. Bei bestimmten kritischen Operationen – wie dem Scheduler oder Hardware-Einstiegspunkten – behält PREEMPT_RT jedoch die Sperre bei. raw_spinlock_t, das sich wie die ursprünglichen nicht-präemptiven Sperren verhält. Wie Paul McKenney, ein angesehener Ingenieur, es ausdrückt:

"Der Hauptvorteil des PREEMPT_RT-Patches besteht darin, die Menge an nicht unterbrechbarem Kernel-Code zu minimieren und gleichzeitig den Umfang des Codes zu minimieren, der geändert werden muss, um diese zusätzliche Unterbrechbarkeit zu ermöglichen."

Als Nächstes wollen wir sehen, wie die Interruptbehandlung von diesem Ansatz profitiert.

Threaded Interrupts

PREEMPT_RT verschiebt die meisten Hardware-Interrupt-Handler vom "Hard-IRQ"-Kontext in Kernel-Threads Ausführung im Prozesskontext. Diese Anpassung ermöglicht es, Interrupt-Handler zu priorisieren, zu unterbrechen oder sogar zu blockieren.

In einem Standard-Linux-Kernel kann ein langlaufender Interrupt-Handler zu unbegrenzter Latenz führen, da er die gesamte übrige Ausführung unterbricht. Threaded Interrupts lösen dieses Problem. Standardmäßig laufen diese Interrupt-Threads mit einer SCHED_FIFO Die Priorität beträgt 50, Administratoren können ihre Prioritäten jedoch mithilfe von Tools wie beispielsweise anpassen. chrt. Beispielsweise könnte man die Interrupts einer Netzwerkkarte für industrielle Steuerungsprozesse priorisieren und gleichzeitig die Priorität für Festplatten-E/A senken. Da diese Threads schlafende Spinlocks anstelle von rohen Spinlocks verwenden, entfällt die Notwendigkeit, Hardware-Interrupts während des Haltens einer Sperre zu deaktivieren.

Nun wollen wir untersuchen, wie PREEMPT_RT mit Herausforderungen im Zusammenhang mit Prioritäten umgeht.

Prioritätsvererbung und Rtmutex

Prioritätsumkehr Ein schwerwiegendes Problem besteht darin, dass ein Prozess mit hoher Priorität auf eine Ressource wartet, die von einem Prozess mit niedriger Priorität belegt wird, während ein Prozess mit mittlerer Priorität (der die Ressource nicht benötigt) den Prozess mit niedriger Priorität unterbricht. PREEMPT_RT behebt dieses Problem mit Prioritätsvererbung, wodurch die Priorität der Aufgabe mit niedriger Priorität vorübergehend erhöht wird, um sie an die Priorität der Aufgabe mit der höchsten Priorität anzupassen, die auf die Ressource wartet.

Der rtmutex Das Werkzeug „primitive“ ermöglicht dies. Es stellt sicher, dass bei einem Konflikt die Aufgabe mit niedriger Priorität eine Prioritätserhöhung erhält, um ihren kritischen Abschnitt ohne Störungen durch Aufgaben mit mittlerer Priorität abzuschließen. Wird die priorisierte Aufgabe durch eine andere Sperre blockiert, wird die Prioritätserhöhung entlang der Abhängigkeitskette weitergegeben. Wie die Linux-Kernel-Dokumentation erklärt:

"Die Prioritätsvererbung ermöglicht es gut konzipierten Anwendungen, Benutzerspeichersperren in kritischen Teilen eines Threads mit hoher Priorität zu verwenden, ohne die Deterministik zu verlieren."

Um dies zu erreichen, rtmutex Verwendet ein Flag und einen prioritätsgeordneten Baum zur Verwaltung wartender Aufgaben, wodurch der Overhead auf unterstützten Architekturen gering gehalten wird.

Schauen wir uns zum Schluss an, wie PREEMPT_RT die RCU-Operationen verbessert.

Präemptives RCU (Lesen-Kopieren-Aktualisieren)

RCU

Read-Copy-Update (RCU) ist eine im Linux-Kernel weit verbreitete Synchronisierungstechnik. In Standardkerneln sind RCU-Leseabschnitte nicht unterbrechbar, was zu unvorhersehbaren Verzögerungen führen kann. PREEMPT_RT ändert dies, indem es RCU-Leseabschnitte unterbrechbar macht. vollständig präemptiv, Dadurch wird sichergestellt, dass die Fristen für Echtzeitaufgaben nicht gefährdet werden. Diese Anpassung ist ein Eckpfeiler für das Erreichen des in Echtzeitsystemen erforderlichen vorhersehbaren Verhaltens.

Konfiguration und Verwendung von PREEMPT_RT

PREEMPT_RT ist vollständig in die Linux-Kernel integriert, wodurch externe Patches nicht mehr erforderlich sind. Dennoch empfiehlt es sich, die neuesten Patches zu installieren, um eine bessere Architekturunterstützung und verbesserte Grafik zu gewährleisten. Sobald der Kernel bereit ist, müssen Sie seine Einstellungen anpassen, um sein volles Potenzial auszuschöpfen.

Kernel-Konfigurationseinstellungen

Um einen vollständig präemptiven Kernel zu aktivieren, schalten Sie ihn ein. CONFIG_PREEMPT_RT. In neueren Kerneln befindet sich diese Einstellung unter "Allgemeine Einstellungen", möglicherweise müssen Sie sie jedoch aktivieren. CONFIG_EXPERT Zuerst muss es im Konfigurationsmenü sichtbar gemacht werden.

Für die Produktion dedizierte Server und in anderen Hochleistungsumgebungen können zusätzliche Optionen die Leistung weiter optimieren:

  • CONFIG_NO_HZ_FULL: Verringert die Anzahl der Scheduling-Takt-Interrupts auf stark ausgelasteten CPUs, was dazu beiträgt, Jitter zu minimieren.
  • CONFIG_RCU_BOOST: Verhindert, dass unterbrochene RCU-Leser die Kulanzfristen verzögern.
  • CONFIG_RCU_NOCB_CPU: Lagert die RCU-Callback-Verarbeitung auf bestimmte CPUs aus, wodurch Interferenzen mit Echtzeitaufgaben reduziert werden.

Es ist außerdem wichtig, Debugging-Optionen zu deaktivieren, die zu hohen Latenzzeiten führen können. Schalten Sie Einstellungen wie beispielsweise ab. CONFIG_DEBUG_LOCKDEP, CONFIG_DEBUG_PREEMPT, CONFIG_DEBUG_OBJECTS, Und CONFIG_SLUB_DEBUG. Diese Tools sind zwar für die Entwicklung nützlich, können aber die Latenzziele erheblich beeinträchtigen. Wie kernelconfig.io erklärt:

"Diese Option wandelt den Kernel in einen Echtzeitkernel um, indem verschiedene Sperrprimitive (Spinlocks, RWLocks usw.) durch präemptive, prioritätsvererbungsfähige Varianten ersetzt werden."

Sobald Ihr Kernel kompiliert und gestartet wurde, überprüfen Sie, ob PREEMPT_RT aktiv ist, indem Sie folgenden Befehl ausführen: cat /sys/kernel/realtime. Ein Rückgabewert von 1 Dies deutet auf Erfolg hin. Sie können dies auch überprüfen, indem Sie in der Ausgabe nach "PREEMPT_RT" suchen. uname -a.

Fehlerbehebung und Leistungsoptimierung

Die Feinabstimmung des Kernels ist unerlässlich, um bei Echtzeit-Workloads optimale Leistung zu erzielen. Ein wichtiger Aspekt, der dabei berücksichtigt werden muss, ist die Echtzeit-Drosselmechanismus, das standardmäßig 50 ms pro Sekunde für Nicht-Echtzeit-Aufgaben reserviert. Wenn Ihre Arbeitslast ausschließlich Echtzeit-Aufgaben umfasst, können Sie diesen Mechanismus deaktivieren, indem Sie Folgendes schreiben: -1 zu /proc/sys/kernel/sched_rt_runtime_us. Wie Jan Altenberg, Senior Open Source Consultant bei OSADL, betont:

"Ein außer Kontrolle geratener Echtzeitprozess kann das System überlasten. Als Schutzmechanismus kann die Laufzeit von Echtzeitprozessen durch Festlegen eines Werts in Mikrosekunden in /proc/sys/kernel/sched_rt_runtime_us begrenzt werden.‘

Für eine verbesserte Deterministik können bestimmte CPU-Kerne mithilfe von Parametern wie beispielsweise isoliert werden. isolcpus=2,3, rcu_nocbs=2,3, nohz_full=2,3, und setzen irqaffinity=0. Dadurch werden diese Kerne ausschließlich für Echtzeitaufgaben reserviert.

Um Interrupt-Threads zu verwalten, verwenden Sie die chrt Tool. Diese Threads werden typischerweise mit einem Standardwert ausgeführt. SCHED_FIFO Die Priorität beträgt standardmäßig 50, kann aber angepasst werden, um Konflikte mit Ihrer Anwendung zu vermeiden. Um beispielsweise den IRQ-Thread einer Netzwerkkarte auf Priorität 98 zu setzen, verwenden Sie folgenden Befehl: chrt -p -f 98.

Nach Abschluss der Konfiguration ist es entscheidend, die Latenzleistung zu testen und zu validieren. Tools wie zyklischer Test kann die Latenz messen (z.B., cyclictest -S -m -p98 -i250), während rtla Die Echtzeit-Linux-Analyse hilft bei der Identifizierung und Analyse von Latenzspitzen. Diese Tools gewährleisten, dass Ihre Konfiguration den Anforderungen von Echtzeitanwendungen gerecht wird.

PREEMPT_RT-Anwendungen und Vorteile

Anwendungsfälle für Echtzeitanwendungen

PREEMPT_RT glänzt in Systemen, in denen die Timinggenauigkeit nicht verhandelbar ist. Luft- und Raumfahrt, Dadurch wird sichergestellt, dass Navigations- und Flugsteuerungen ohne Verzögerungen im Mikrosekundenbereich funktionieren, die andernfalls die Sicherheit gefährden könnten. Telekommunikation Unternehmen verlassen sich darauf, dass es das Datenrouting in Echtzeit steuert und so reibungslose Sprach- und Videoanrufe durch die Beseitigung von Jitter und Latenzspitzen gewährleistet.

Im Automobilindustrie, Es ist ein Eckpfeiler für Fahrzeugsteuerungssysteme, und große Akteure wie Continental Automotive unterstützen seine Einführung. industrielle Automatisierung, PREEMPT_RT treibt speicherprogrammierbare Steuerungen (SPS) und SCADA-Systeme an und arbeitet oft mit Protokollen wie EtherCAT zusammen, um Sicherheit und Effizienz in den Fabrikhallen zu gewährleisten. Robotik Setzt außerdem stark auf diese Technologie für die präzise Aktorsteuerung und das sofortige Sensorfeedback, wodurch Roboter in die Lage versetzt werden, unmittelbar auf Veränderungen in der Umgebung zu reagieren.

Die vielleicht wichtigsten Anwendungsbereiche sind in Medizinprodukte, Dort, wo Präzision von höchster Bedeutung ist. Von Patientenmonitoren bis hin zu Operationsrobotern bietet PREEMPT_RT die deterministische Leistung, die erforderlich ist, um die einwandfreie Funktion lebenskritischer Systeme zu gewährleisten.

Vorteile für Hosting-Umgebungen

Die Vorteile von PREEMPT_RT erstrecken sich auch auf Hosting-Umgebungen, in denen Echtzeit-Reaktionsfähigkeit ebenso entscheidend ist. VPS und dedizierte Server, Dadurch wird die Latenz minimiert, indem der Scheduler Aufgaben mit hoher Priorität gegenüber weniger kritischen Aufgaben priorisieren kann. Dies gewährleistet konsistente Antwortzeiten, was sich direkt auf die Benutzerfreundlichkeit und die Zuverlässigkeit des Dienstes auswirkt.

Das Thread-basierte Interrupt-Modell verhindert, dass sogenannte "Interrupt-Stürme" Systeme bei intensiven E/A-Operationen überlasten. rt_mutex, Die Prioritätsvererbung stellt sicher, dass Hintergrundprozesse mit niedriger Priorität kritische Hosting-Dienste nicht blockieren. Hochauflösende Timer ermöglichen eine Planungsgenauigkeit im Mikrosekundenbereich und reduzieren so Jitter in virtualisierten Umgebungen. Hosting-Anbieter wie Serverion, Wir bieten benutzerdefinierte Kernel-Builds mit PREEMPT_RT an, die Administratoren die Flexibilität geben, Konfigurationen für spezifische Workloads feinabzustimmen. Durch die Verwendung von Parametern wie isolcpus und Irraffinität, Anbieter können CPU-Kerne für leistungskritische Aufgaben reservieren und gleichzeitig den regulären Systembetrieb isolieren.

Abschluss

Dieser Leitfaden hat detailliert beschrieben, wie PREEMPT_RT Durch die nahezu vollständige Kontrolle des Schedulers wird Linux zu einem Echtzeitbetriebssystem. Seit der Integration in die Mainline-Kernel ab Linux 6.12 (September 2024) entfällt die Notwendigkeit externer Patches für Architekturen wie x86, ARM64 und RISC-V.

Das Konzept ist einfach: Nicht unterbrechbarer Code soll so weit wie möglich reduziert werden. Durch die Umwandlung von Spinlocks in schlafende Locks und die Ausführung von Interrupt-Handlern als Threads können Aufgaben mit hoher Priorität nahezu alle Kernel-Aktivitäten unterbrechen. Funktionen wie die Prioritätsvererbung verhindern, dass Aufgaben mit niedriger Priorität kritische Operationen verzögern, während die unterbrechbare RCU sicherstellt, dass selbst kritische Abschnitte auf der Leseseite keine signifikanten Verzögerungen verursachen. Sebastian Siewior, Der Maintainer von PREEMPT_RT stellt treffend fest:

"Volle Kontrolle beim Scheduler."

Dieser technische Fortschritt bietet praktische Vorteile. Zum Beispiel, Serverion nutzt spezielle PREEMPT_RT-Kernel-Builds, um die CPU-Isolation feinabzustimmen und Echtzeit-Workloads zu optimieren, wodurch auch unter starker E/A-Belastung stabile Reaktionszeiten gewährleistet werden.

Echtzeitsysteme zeichnen sich nicht nur durch ihre Geschwindigkeit aus, sondern vor allem durch ihre Vorhersagbarkeit. PREEMPT_RT minimiert Jitter und gewährleistet so die präzise Ausführung von Aufgaben zum richtigen Zeitpunkt. Dies ist entscheidend für Anwendungen wie Industrieautomation, Telekommunikation und leistungskritische Hosting-Dienste. Es ermöglicht ein deterministisches Verhalten, das Standard-Kernel schlichtweg nicht bieten können.

Durch die Integration in den Hauptkernel und die Unterstützung durch Unternehmensdistributionen wie Ubuntu Pro Seit Februar 2023 ist PREEMPT_RT für Hosting-Anbieter und Systemadministratoren leichter zugänglich. Es bietet die zuverlässige Leistung mit geringer Latenz, die für die anspruchsvollsten und zeitkritischsten Umgebungen von heute erforderlich ist.

FAQs

Benötige ich PREEMPT_RT oder reicht Standard-Linux aus?

Der Standard-Linux-Kernel, in Kombination mit dem PREEMPT_RT-Patch, Dadurch erhält es Echtzeitfähigkeiten. Dies macht es zu einer guten Wahl für Anwendungen, bei denen geringe Latenz und konsistente Reaktionszeiten entscheidend sind. Der Linux-Kernel allein kann jedoch die strengen Echtzeitanforderungen möglicherweise nicht erfüllen.

Wird PREEMPT_RT den Gesamtdurchsatz meines Systems verringern?

Um Echtzeitleistung zu erzielen, PREEMPT_RT Der Fokus liegt auf der Reduzierung nicht-präemptiven Kernel-Codes, was die Systemreaktionsfähigkeit verbessert. Dieser Ansatz kann zwar zu einem geringfügigen Rückgang des Gesamtdurchsatzes führen, gewährleistet aber ein konsistentes und vorhersehbares Verhalten – entscheidend für zeitkritische Anwendungen. Dieser Kompromiss ist beabsichtigt und zentral für die Erfüllung der Anforderungen von Echtzeitsystemen.

Welches Latenzziel ist mit PREEMPT_RT realistisch?

Mit PREEMPT_RT, Latenzzeiten im Millisekundenbereich zu erreichen, ist sowohl für Desktop- als auch für Embedded-Systeme ein realistisches Ziel. Die tatsächliche Leistung hängt jedoch stark von der korrekten Konfiguration und Optimierung des Systems ab, um die spezifischen Anforderungen zu erfüllen. Eine optimale Einrichtung ist entscheidend für die gewünschte Reaktionsfähigkeit.

Verwandte Blogbeiträge

de_DE_formal