RTIPC: Нова бібліотека для міжпроцесорної комунікації в Linux
RTIPC: Нова бібліотека для міжпроцесорної комунікації в Linux
RTIPC – це нова бібліотека для міжпроцесорної комунікації в Linux, призначена спеціально для жорстких реальних навантажень. У цьому контексті передбачуване виконання та низька затримка мають більше значення, ніж гнучкість, яку пропонують загальнодоступні механізми IPC.
Система обміну даними без копіювання
Проект поєднує спільну пам’ять з безчерговою чергою Single Producer Single Consumer (SPSC), що дозволяє процесам обмінюватися даними без копіювання через кернельні буфери. Коли канал зв’язку установлений, передачі відбуваються безпосередньо через спільну пам’ять без системних викликів у шляху передачі даних.
“Силове виштовхування” для черг
RTIPC також надає операцію “силового виштовхування”. Коли черга заповнена, виробник може відкинути найстаріше непрочитане повідомлення та замінити його новими даними. Це підходить для навантажень, де важливо мати останній стан, а не обробляти всі проміжні оновлення.

Формальна перевірка реалізації
Через те, що така поведінка ускладнює алгоритм черги, проект заявляє, що він формально верифікував реалізацію за допомогою SPIN/Modex.
Оптимізація для багатоядерних систем
Повідомлення також налаштовані на лінії кешу для зменшення непотрібного трафіку узгодження кешу на багатоядерних системах. Додаткова підтримка eventfd дозволяє RTIPC каналам працювати зі звичайними механізмами подій Linux, такими як select, poll та epoll.
Компроміс в розмірах повідомлень
Є важливий компроміс. Розмір повідомлення та максимальна довжина черги повинні бути фіксованими під час створення каналу. Розробники зазначають, що це обмеження є навмисним, оскільки зміна цих значень динамічно може підірвати детерміноване виконання.
Місце RTIPC серед традиційних механізмів IPC
Проект позиціонує RTIPC між традиційними механізмами IPC Linux і вручну реалізованою комунікацією в спільній пам’яті. Сокети, труби та повідомлення переміщають дані через буфери, керовані ядром, тоді як спільна пам’ять ухиляється від копій, але залишає синхронізацію на розробника програми.
Процес створення з’єднання
Для створення з’єднання потрібна початкова фаза налаштування. Бібліотека виділяє анонімну спільну пам’ять і необов’язкові eventfds, а потім передає їх файлові дескриптори іншим процесам через сокет Unix-домену, використовуючи SCM_RIGHTS. Після того, як обидві сторони відобразять пам’ять, комунікація продовжується безпосередньо через спільну пам’ять.
Використання D-Bus для обміну файловими дескрипторами
Цікаво, що D-Bus також може бути використаний для цього початкового обміну файловими дескрипторами. Іншими словами, RTIPC не пропонує загального заміщення D-Bus, а виступає як спеціалізований шлях передачі даних для застосунків із суворими реальними вимогами.
Обмін структурованими даними між різними мовами
Проект бере незвичайний підхід до обміну структурованими даними між застосунками на різних мовах. Замість того, щоб рекомендувати Protocol Buffers, Cap’n Proto або інші формати серіалізації, RTIPC пропонує використовувати стандартні структури, сумісні з C.
Обмеження при обміні даними між процесами
Існує одне відзначене обмеження: 32-бітний процес і 64-бітний процес не можуть безпечно обмінюватися цими структурами через RTIPC, оскільки їхнє вирівнювання структур може відрізнятися.
Активна розробка RTIPC
Наостанок, варто зазначити, що RTIPC також все ще активно розробляється. Наразі ведеться робота над реалізацією на C11, C++, Rust і Python, при цьому реалізація на C залишається без залежностей, а версія на Rust написана в чистому Rust. Підтримка Java, C# і Go запланована.
Для детальнішої інформації відвідайте офіційну сторінку проекту.




