← На главную

Redox Rings ускорил обмен данными между системными сервисами

28.10.2026 14:27 · hackernews

Команда Redox завершила финансируемый NLnet проект кольцевых буферов, задуманный как аналог io_uring для взаимодействия приложений с системными сервисами. Основной этап работ завершился в сентябре 2026 года после внедрения последних компонентов. В отличие от Linux, где запросы передаются ядру, Redox использует микроядерную архитектуру: сервисы и драйверы работают в пользовательском пространстве. Новый Redox Rings позволяет приложению напрямую отправлять асинхронные запросы нужному scheme-процессу, не блокируя выполнение.

Интерфейс использует две разделяемые очереди: SQ для заявок и CQ для результатов. У каждой очереди один производитель и один потребитель, поэтому общий механизм блокировки не требуется. Данные размещаются в общем пуле памяти, что позволяет выполнять I/O без копирования и при необходимости запрашивать память, пригодную для DMA. API в relibc повторяет подход liburing и поддерживает пакетную отправку запросов, ожидание ответов, регистрацию файловых дескрипторов и освобождение буферов. Доступны фиксированное и динамическое распределение памяти.

Поддержка появилась в RamFS и драйвере NVMed. Команда также создала асинхронный исполнитель задач для драйверов: пока используется одно ядро, а многопоточность в расчёте на ядро ещё разрабатывается. В тестах новый интерфейс оказался в 14–15 раз быстрее синхронных системных вызовов redox_syscall.

Параллельно разработчики оптимизировали сам IPC. Прямое переключение контекста позволяет готовому сервису обходить планировщик и снизило задержку на 15–20%. Отказ от сохранения векторных регистров при системных вызовах устранил часть затрат на XSAVE и XRSTOR. Большие страницы по 2 МБ для physmap уменьшили пиковую частоту промахов L1DTLB в тесте heavy_forking на 75%.

Итоговая задержка полного IPC-цикла сократилась примерно с 5800 до 2700 циклов. Команда всё же считает её высокой по сравнению с быстрыми микроядрами вроде seL4. Дальнейшая работа будет направлена на блокировки, вход в системные вызовы и упрощение IPC-примитивов.

Читать оригинал →