Az RTIPC (Real-time Inter-Process Communication) egy új, Linuxra készült folyamatok közötti kommunikációs könyvtár, amelyet kifejezetten kemény valós idejű feladatokra terveztek. Ilyen környezetben a kiszámítható futás és az alacsony késleltetés fontosabb, mint az általános IPC mechanizmusok által kínált rugalmasság.
A projekt megosztott memóriát kombinál egy Single Producer Single Consumer, várakozásmentes sorral. Így a folyamatok úgy tudnak adatot cserélni, hogy nem kell az adatot kernel buffereken keresztül másolni. Ha egyszer létrejön a kommunikációs csatorna, az adatok közvetlenül a megosztott memórián keresztül áramlanak, a data path-ben nincs szükség syscallokra.
Az RTIPC egy „force push” műveletet is kínál. Ha a sor megtelik, az előállító eldobhatja a legrégebbi, még el nem olvasott üzenetet, és lecserélheti egy újabb adatra. Ez olyan feladatokhoz illik, ahol fontosabb, hogy mindig a legfrissebb állapot álljon rendelkezésre, mint az, hogy minden köztes frissítést feldolgozzanak.
Mivel ez a viselkedés bonyolultabbá teszi a sor algoritmusát, a projekt szerint formálisan is ellenőrizték a megvalósítást SPIN/Modex eszközökkel.
Az üzenetek cacheline-hoz igazítva helyezkednek el, hogy többmagos rendszereken csökkentsék a felesleges cache-koherencia forgalmat. Opcionális eventfd támogatás is elérhető, így az RTIPC csatornák együtt tudnak működni a szokásos Linux eseménykezelő mechanizmusokkal, például a select, poll és epoll hívásokkal.
Van egy fontos kompromisszum. Az üzenetméretet és a sor maximális hosszát a csatorna létrehozásakor rögzíteni kell. A fejlesztők szerint ez szándékos korlátozás, mert ha ezeket az értékeket futás közben változtatnák, az veszélyeztetné a determinisztikus működést.
A projekt az RTIPC-t a hagyományos Linux IPC mechanizmusok és a kézzel megvalósított megosztott memória alapú kommunikáció közé pozicionálja. A socketek, pipe-ok és üzenetsorok az adatot kernel által kezelt buffereken keresztül mozgatják, míg a megosztott memória elkerüli a másolást, de a szinkronizációt az alkalmazásfejlesztőre bízza.
Az RTIPC a tényleges adatot megosztott memóriában tárolja, a szinkronizációt pedig a várakozásmentes SPSC megvalósításával oldja meg.
Kapcsolat létrehozásához szükség van egy kezdeti beállítási fázisra. A könyvtár névtelen megosztott memóriát és opcionális eventfd-ket foglal, majd ezek fájlleíróit Unix domain socketen, SCM_RIGHTS használatával adja át a másik folyamatnak. Amint mindkét oldal leképezi a memóriát, a kommunikáció közvetlenül a megosztott memórián keresztül folytatódik.
Érdekesség, hogy a D-Bus is használható erre a kezdeti fájlleíró-cserére. Vagyis az RTIPC-t nem általános D-Bus-helyettesítőként mutatják be, hanem speciális adatútvonalnak, olyan alkalmazásokhoz, amelyek szigorú valós idejű követelményekkel dolgoznak.
A projekt szokatlan megközelítést választott a különböző nyelveken írt alkalmazások közötti strukturált adatcsere megoldására. Ahelyett, hogy Protocol Buffers, Cap’n Proto, FlatBuffers vagy más szerializációs formátum használatát javasolná, az RTIPC a szabványos, C-kompatibilis struktúrák használatát ajánlja.
Van egy fontos korlát: egy 32 bites és egy 64 bites folyamat nem tudja ezeket a struktúrákat biztonságosan megosztani RTIPC-n keresztül, mert a struktúrák igazítása eltérhet.
Végül érdemes észben tartani, hogy az RTIPC fejlesztése továbbra is aktívan zajlik. Jelenleg készülnek a C11-, C++-, Rust- és Python-megvalósítások; a C-verzió továbbra sem igényel függőségeket, a Rust-változat pedig tiszta Rust-ban íródik. Tervezik a Java, a C# és a Go támogatását is.
További részletekért nézd meg a projekt GitHub oldalát.

