
RTIPC ermöglicht eine prozessübergreifende Kommunikation mit nahezu null Overhead unter Linux
RTIPC ist eine neue Linux-IPC-Bibliothek, die Shared Memory mit wartezeitfreien Warteschlangen kombiniert, um eine deterministische Kommunikation mit nahezu null Overhead bei Hard-Echtzeit-Anwendungen zu ermöglichen.
Eine Übersetzung von 🇬🇧 Linuxiac.com
RTIPC ist eine neue Bibliothek für die Interprozesskommunikation unter Linux, die speziell für harte Echtzeit-Workloads entwickelt wurde, bei denen vorhersehbare Ausführung und geringe Latenz wichtiger sind als die Flexibilität, die allgemeine IPC-Mechanismen bieten.
Das Projekt kombiniert Shared Memory mit einer wartezeitfreien Single Producer Single Consumer Warteschlange, wodurch Prozesse Daten austauschen können, ohne diese über Kernel-Puffer kopieren zu müssen. Sobald ein Kommunikationskanal eingerichtet ist, erfolgen die Übertragungen direkt über Shared Memory, ohne dass Systemaufrufe im Datenpfad erforderlich sind.RTIPC bietet außerdem eine Force-Push Operation. Ist eine Warteschlange voll, kann der Produzent die älteste ungelesene Nachricht verwerfen und durch neuere Daten ersetzen. Dies eignet sich für Anwendungsfälle, bei denen der aktuelle Status wichtiger ist als die Verarbeitung jeder einzelnen Zwischenaktualisierung.
Da dieses Verhalten den Warteschlangenalgorithmus komplexer macht, hat das Projekt die Implementierung laut eigenen Angaben mithilfe von SPIN/Modex formal verifiziert.
Die Nachrichten werden zudem cacheline ausgerichtet, um unnötigen Cache-Kohärenz-Verkehr auf Multi-Core-Systemen zu reduzieren, während die optionale eventfd Unterstützung es RTIPC-Kanälen ermöglicht, mit Standard-Linux-Ereignismechanismen wie select, poll und epoll zu arbeiten.
🎓 Dabei gibt es einen wichtigen Kompromiss: Sowohl die Nachrichtengröße als auch die maximale Warteschlangenlänge müssen bei der Erstellung eines Kanals festgelegt werden. Die Entwickler betonen, dass diese Einschränkung beabsichtigt ist, da eine dynamische Änderung dieser Werte die deterministische Ausführung beeinträchtigen könnte.
Das Projekt positioniert RTIPC zwischen traditionellen Linux-IPC-Mechanismen und manuell implementierter Shared-Memory-Kommunikation. Sockets, Pipes und Nachrichtenwarteschlangen übertragen Daten über vom Kernel verwaltete Puffer, während Shared Memory Kopiervorgänge vermeidet, die Synchronisation jedoch dem Anwendungsentwickler überlässt.RTIPC nutzt Shared Memory für die Daten selbst und übernimmt die Synchronisation über seine wartungsfreie SPSC-Implementierung.
Das Herstellen einer Verbindung erfordert eine anfängliche Einrichtungsphase. Die Bibliothek reserviert anonymes Shared Memory und optionale Event-FDs und überträgt deren Dateideskriptoren anschließend über einen Unix-Domain-Socket unter Verwendung von SCM_RIGHTS an den anderen Prozess. Sobald beide Seiten den Speicher zugeordnet haben, erfolgt die Kommunikation direkt über Shared Memory.
Interessanterweise kann auch D-Bus für diesen anfänglichen Austausch von Dateideskriptoren verwendet werden. Mit anderen Worten: RTIPC wird nicht als allgemeiner Ersatz für D-Bus präsentiert, sondern als spezialisierter Datenpfad für Anwendungen mit strengen Echtzeitanforderungen.
Das Projekt verfolgt einen ungewöhnlichen Ansatz beim Austausch strukturierter Daten zwischen Anwendungen in verschiedenen Sprachen. Anstatt Protocol Buffers, Cap’n Proto, FlatBuffers oder andere Serialisierungsformate zu empfehlen, schlägt RTIPC die Verwendung von standardmäßigen C-kompatiblen Strukturen vor.
Es gibt eine wesentliche Einschränkung: Ein 32-Bit-Prozess und ein 64-Bit-Prozess können diese Strukturen nicht sicher über RTIPC austauschen, da sich ihre Strukturausrichtung unterscheiden kann.
Beachten Sie schließlich, dass sich RTIPC selbst ebenfalls noch in aktiver Entwicklung befindet. Derzeit wird an Implementierungen für C11, C++, Rust und Python gearbeitet, wobei die C-Implementierung weiterhin abhängigkeitsfrei bleibt und die Rust-Version in reinem Rust geschrieben ist. Eine Unterstützung für Java, C# und Go ist geplant.
Weitere Details finden Sie auf der GitHub-Seite des Projekts.
Bildnachweis: RTIPC
Spendieren Sie Bobby einen ☕ Ko-fi
Ein Service von s3n🧩net


















Comments