Az új RTIPC Linux programkönyvtár közel nullára csökkentené a folyamatok közötti kommunikáció többletterhét

Megjelent az RTIPC, egy új Linux programkönyvtár, amelyet arra terveztek, hogy az ugyanazon a rendszeren futó alkalmazások nagyon alacsony késleltetéssel és kiszámítható módon cserélhessenek adatot egymással. Ehhez megosztott memóriát és várakozásmentes üzenetsort használ, így elsősorban valós idejű rendszerekben lehet hasznos.

Az új RTIPC Linux programkönyvtár közel nullára csökkentené a folyamatok közötti kommunikáció többletterhét

Az RTIPC Single Producer Single Consumer típusú, várakozásmentes sort használ. Ez azt jelenti, hogy egy folyamat írja, egy másik pedig olvassa az adatokat, miközben egyik félnek sem kell zárolásra várnia. A kapcsolat létrehozása után az üzenetek közvetlenül megosztott memórián keresztül haladnak, így az adatútvonalon nincs szükség rendszerhívásokra vagy kernelpuffereken keresztüli másolásra. A könyvtár force push műveletet is kínál. Ha a sor megtelik, a küldő eldobhatja a legrégebbi, még fel nem dolgozott üzenetet, és a helyére frissebb adatot írhat. Ez olyan valós idejű rendszereknél lehet előnyös, ahol az aktuális állapot fontosabb, mint minden köztes frissítés feldolgozása.

A megvalósítást a fejlesztők SPIN/Modex segítségével formálisan is ellenőrizték. Ezek olyan ellenőrzőeszközök, amelyekkel matematikai modell alapján kereshetők versenyhelyzetek és más párhuzamos működésből eredő hibák. Az üzenetek a processzor gyorsítótárának cacheline-határaihoz igazodnak, ami csökkentheti a processzormagok gyorsítótárai közötti felesleges adatforgalmat. Opcionálisan eventfd is használható.

Ez egy Linux-mechanizmus, amellyel egy folyamat eseményt jelezhet egy másiknak egy fájlleírón keresztül. Ennek köszönhetően az RTIPC együttműködhet a select, poll és epoll eseményfigyelő rendszerhívásokkal, amelyek segítségével egy program egyszerre több fájlleíró állapotváltozását követheti. A kiszámítható működésnek ára is van: az üzenetméretet és a sor maximális hosszát már a csatorna létrehozásakor rögzíteni kell. A fejlesztők szerint a dinamikus módosítás veszélyeztetné a determinisztikus végrehajtást, vagyis azt, hogy a rendszer működésének időigénye előre kiszámítható maradjon.

rtipc ábra
Az RTIPC működési ábrája

A kapcsolat kezdeti felépítése Unix domain socketen keresztül történik. Ez egy ugyanazon rendszeren futó folyamatok közötti helyi kommunikációs csatorna. A könyvtár létrehozza a megosztott memóriát és szükség esetén az eventfd-ket, majd azok fájlleíróit az SCM_RIGHTS mechanizmussal továbbítja a másik folyamatnak. Az SCM_RIGHTS lehetővé teszi, hogy egy folyamat már megnyitott erőforrások fájlleíróit átadja egy másik folyamatnak. A kezdeti fájlleíró-csere D-Buson keresztül is megoldható. Az RTIPC jelenleg aktív fejlesztés alatt áll. C11, C++, Rust és Python implementáció készül, Java, C# és Go támogatását pedig későbbre tervezik.

További részletekért tekintsd meg a projekt Github oldalát.