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

Linux .Net Io_uring производительность сокеты Api neowin.net

Скоро Linux получит значительный прирост производительности за счет встроенной функции, которая у него уже есть. Интересно, что Microsoft ранее заимствовала ее для Windows 11. Читайте подробнее… — neowin.net

Если вы являетесь поклонником работы под управлением Linux, у нас для вас хорошие новости: эта операционная система скоро может получить значительный прирост производительности. Это связано с тем, что разработчик, вносящий вклад в .NET, подтвердил крупное обновление производительности для сокетов .NET в Linux в среде выполнения, поскольку они перерабатываются для использования собственного API ядра io_uring. Изменение было раскрыто в недавнем запросе на слияние (pull request) на GitHub, что знаменует собой значительный шаг вперед для пользователей и разработчиков, работающих с подобными нагрузками.

Для тех, кто интересуется, io_uring был представлен в ядре Linux 5.1 еще в 2019 году как современный фреймворк для асинхронного ввода-вывода (aio). Его конструкция призвана минимизировать системные вызовы и переключения контекста, что должно привести к существенному улучшению производительности как файлового, так и сетевого ввода-вывода.

Пол Мур из Microsoft, ведущий инженер-программист компании, ранее подчеркивал некоторые из этих преимуществ:

Linux получит мощный прирост производительности благодаря встроенной функции, которую уже позаимствовала Windows 11
Изображение предоставлено The Linux Foundation (YouTube)

Интересно, что Microsoft заимствовала эту функцию для Windows 11, поскольку текущая реализация Windows I/O Ring API, по-видимому, в значительной степени основана на Linux io_uring, с некоторыми изменениями, внесенными, среди прочего, для обеспечения совместимости.

Запрос на слияние был выдвинут Беном Адамсом, техническим директором и соучредителем Illyriad Games, а также MVP Microsoft. Вот некоторые из «ожидаемых улучшений», которые обещает этот апгрейд в различных рабочих нагрузках и сценариях:

  • Kestrel HTTP/1.1 Keep-Alive (TechEmpower Plaintext)
    • Снижение затрат ЦП на один запрос на 15–40%. TechEmpower plaintext исторически ограничен системными вызовами; пакетирование io_uring напрямую решает эту проблему.

  • Kestrel HTTP/2 Multiplexed Streams (gRPC, Modern Web)
    • Увеличение пропускной способности на соединение на 5–15%. HTTP/2 в меньшей степени зависит от ввода-вывода, чем HTTP/1.1 на уровне TCP.
  • Серверы с большим количеством простаивающих соединений (WebSocket/SignalR Hubs, 10K+)
    • Снижение накладных расходов на память для простаивающих соединений на 30–50%. Улучшение задержки пробуждения на 10–30%.
  • Сверхнизкая задержка с SQPOLL (Игровые серверы, HFT, Real-Time)
    • Снижение задержки отправки в среднем в 20 раз / P99 в 100 раз при постоянной нагрузке
  • Исходящие запросы HttpClient (от микросервиса к микросервису)
    • Снижение задержки на запрос на 10–20% для краткосрочных соединений.
  • Драйверы баз данных (Npgsql, MySQL Connector, Redis)
    • Ожидаемое улучшение: снижение задержки на запрос на 5–15%.
  • UDP-нагрузки (DNS, игровые серверы, сборщики телеметрии)
    • Увеличение количества пакетов в секунду для высокоскоростного UDP на 20–40%.
  • Нагрузки с большим количеством подключений (балансировщики нагрузки, прокси, всплески соединений)
    • Ожидаемое улучшение: увеличение количества соединений в секунду при пиковой нагрузке на 20–50%.

Интересно, что запрос на слияние с заголовком «Use io_uring for sockets on Linux» был значительно отредактирован, чтобы удалить все вышеуказанные заявления о производительности после его первоначальной публикации 17-го числа прошлого месяца. Тем не менее, он все еще доступен через архив.

Источник: Wayback Machine

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

Похожие новости: