Таймауты poll и epoll в Redox переработаны: точность сильно выросла

30.05.2026

В ядре Redox переработан механизм таймаутов событий ввода-вывода, а в relibc добавлена его поддержка. Точность poll и epoll при ограничении по времени выросла заметно; автор сводки заявляет также четырёхкратное ускорение самих вызовов.

Зачем таймаут в poll

poll и epoll ждут, пока хоть один дескриптор не станет готов. Чтобы ожидание не длилось вечно, передаётся предельное время: если за него ничего не произошло, вызов возвращается с нулевым результатом.

На этот параметр опирается огромное количество кода: сетевые клиенты с таймаутом соединения, циклы событий с периодическим просыпанием, таймеры в тестах.

Что было плохо

Точность таймаутов, по формулировке сводки, была плохой — и это опаснее, чем медленно: программа, которая рассчитывает подождать 50 миллисекунд и затем повторить попытку, могла ждать заметно дольше или заметно меньше. И то и другое ломает логику: таймауты сетевых операций, повторные попытки, расчёт интервалов.

Как сделано

Событию ввода-вывода присвоен идентификатор EVENT_TIMEOUT_ID, а обработка таймаута вынесена в отдельный механизм ядра. В relibc появилась соответствующая поддержка — иначе новый путь просто не использовался бы из пользовательского пространства. Работы растянулись на две недели: идентификатор добавлен 23 мая, поддержка в libc — 30 мая.

О числах

Сводка заявляет ускорение poll и epoll примерно в четыре раза, причём «на QEMU с KVM и на настоящем железе улучшение может быть значительно больше». Отдельно отмечено, что это замер без KVM.

Четырёхкратное ускорение отдельным коммитом не подтверждается: компилятор и ядро и ядро меняли подход к обработке событий в том же месяце, и выделить вклад конкретного изменения без повторного замера нельзя. Поэтому как проверенный факт здесь только переработка таймаутов.

Оригинал

Коммиты Add EVENT_TIMEOUT_ID от 23 мая и Add timeout for events от 30 мая 2026 года в redox-os/kernel, а также Implement event timeout with EVENT_TIMEOUT_ID от 30 мая в redox-os/relibc; сводка «This Month in Redox — May 2026», раздел «Massive Performance Improvement On I/O Event Wait»

Упоминаний: 1 · Просмотров: 2