Кто не видел влюбленной женщины, тот не может сказать, что такое женщина (Т. Готье).

RTIPC обеспечивает межпроцессное взаимодействие в Linux с минимальными накладными расходами


RTIPC обеспечивает межпроцессное взаимодействие в Linux с минимальными накладными расходами

RTIPC — это новая библиотека межпроцессного взаимодействия для Linux, разработанная специально для задач в режиме жесткого реального времени, где предсказуемость выполнения и низкая задержка важнее гибкости, которую обеспечивают механизмы межпроцессного взаимодействия общего назначения.

Проект сочетает в себе разделяемую память и однопроходную очередь без ожидания, что позволяет процессам обмениваться данными без копирования через буферы ядра. После установления канала связи передача данных происходит напрямую через разделяемую память без системных вызовов на пути следования данных.

RTIPC также поддерживает операцию «принудительной отправки». Когда очередь заполнена, производитель может удалить самое старое непрочитанное сообщение и заменить его новыми данными. Это подходит для задач, в которых наличие последней версии данных важнее, чем обработка каждого промежуточного обновления.

Как это работает (процесс использования)

 

Поскольку такое поведение усложняет алгоритм работы с очередью, в проекте заявляют, что формализовали его реализацию с помощью SPIN/Modex.

Сообщения также выравниваются по границе строки кэша, чтобы снизить ненужный трафик, связанный с согласованием кэша в многоядерных системах, а дополнительная поддержка eventfd позволяет каналам RTIPC работать со стандартными механизмами событий Linux, такими как select, poll и epoll.

Есть один важный компромисс. При создании канала необходимо зафиксировать размер сообщения и максимальную длину очереди. Разработчики говорят, что это ограничение введено намеренно, поскольку изменение этих значений динамически может нарушить детерминированное выполнение.

Проект RTIPC занимает промежуточное положение между традиционными механизмами межпроцессного взаимодействия в Linux и реализованной вручную коммуникацией через разделяемую память. Сокеты, каналы и очереди сообщений перемещают данные через буферы, управляемые ядром, в то время как разделяемая память позволяет избежать копирования, но оставляет синхронизацию на усмотрение разработчика приложения.

RTIPC использует разделяемую память для самих данных, а синхронизацию обеспечивает с помощью реализации SPSC без ожидания.

Для создания соединения требуется этап первоначальной настройки. Библиотека выделяет анонимную разделяемую память и дополнительные файловые дескрипторы событий, а затем передает их файловые дескрипторы другому процессу через сокет домена Unix с использованием SCM_RIGHTS. После того как обе стороны сопоставят память, обмен данными будет осуществляться напрямую через разделяемую память.

Интересно, что для первоначального обмена файловыми дескрипторами можно использовать D-Bus. Другими словами, RTIPC — это не универсальная замена D-Bus, а специализированный канал передачи данных для приложений со строгими требованиями к работе в режиме реального времени.

В проекте используется необычный подход к обмену структурированными данными между приложениями, написанными на разных языках. Вместо Protocol Buffers, Cap’n Proto, FlatBuffers или других форматов сериализации RTIPC предлагает использовать стандартные C-совместимые структуры.

Есть одно существенное ограничение: 32-битный и 64-битный процессы не могут безопасно обмениваться этими структурами через RTIPC, поскольку их выравнивание может отличаться.

Наконец, не стоит забывать, что сам RTIPC все еще находится в активной разработке. В настоящее время ведется работа над реализациями на C11, C++, Rust и Python, при этом реализация на C не зависит от других языков, а версия на Rust написана на чистом Rust. Планируется поддержка Java, C# и Go.

Более подробную информацию можно найти на странице проекта на GitHub.

Изображение предоставлено RTIPC

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Редактор: AndreyEx

Если статья понравилась, поделитесь ей в социальных сетях

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала