The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Выпуск библиотеки libuv 1.45.0 с поддержкой подсистемы io_uring

29.05.2023 11:15

Опубликован выпуск библиотеки libuv 1.45.0, применяемой для мультиплексирования соединений и асинхронной обработки ввода/вывода во многих проектах, нацеленных на высокопроизводительную обработку сетевых и файловых запросов, например, в платформе Node.js, DNS-серверах BIND 9 и Knot DNS, HTTP-сервере H2O, Lua-фреймворке Luvit, виртуальной машине MoarVM, языке Julia и Python-фреймворке uvloop. Библиотека позволяет организовать цикл обработки событий в неблокирующем режиме, реализованный на базе таких методов, как epoll в Linux, kqueue в BSD и macOS, IOCP в Windows и event ports в Solaris. Код проекта написан на языке Си и распространяется под лицензией MIT.

Для приложений доступны многоплатформенные функции для работы с сетевыми соединениями TCP и UDP в асинхронном режиме, асинхронного разрешения имён DNS, асинхронной работой с файлами, отслеживании событий в файловой системе, организации IPC для совместного доступа к сокетам, организации пула потоков (Thread pool), обработки сигналов и использования высокоточных таймеров. Также библиотека включает примитивы для организации многопоточного выполнения и синхронизации потоков. В сочетании с циклом обработки событий применяются два базовых абстрактных высокоуровневых примитива: "дескрипторы" (handles) для реализации долгоживущих объектов, выполняющих несколько операций, и "запросы" (requests) для выполнения короткоживущих запросов.

Ключевым улучшением в новом выпуске стала реализация давно ожидаемой поддержки интерфейса асинхронного ввода/вывода io_uring, предоставляемого ядром Linux, начиная с выпуска 5.1, и примечательного поддержкой полинга (polling) ввода/вывода и возможностью работы как с буферизацией, так и без буферизации. В API io_uring разработчики ядра попытались устранить недостатки старого интерфейса aio. По производительности io_uring очень близок к SPDK и существенно опережает libaio при работе с включённым полингом.

В libuv интерфейс io_uring может применяться на платформах Linux с ядром 5.1+ в примитивах для асинхронной работы с файлами, таких как read, write, fsync, fdatasync, stat, fstat и lstat. На других ОС и системах со старым ядром продолжает использоваться пул потоков. Проведённые тесты производительности показали, что применение io_uring в libuv позволяет добиться повышения пропускной способности в 8 раз. Работа по добавлению io_uring в libuv проведена при поддержке организации ISC (Internet Systems Consortium), применяющей рассматриваемую библиотеку в DNS-сервере BIND.

Из других улучшений в новой версии выделяется выставление единого размера стека в 8 МБ для пула потоков на всех архитектурах и платформах. Добавлен новый API uv_metrics_info() для сбора метрик, таких как счётчик итераций в цикле событий, общее число обработанных событий и число событий, ожидающих в очереди во время отправки запроса.

  1. Главная ссылка к новости (https://github.com/libuv/libuv...)
  2. OpenNews: Уязвимости в Netfilter и io_uring, позволяющие повысить свои привилегии в системе
  3. OpenNews: Представлен HTTP-сервер hinsightd, использующий Linux-подсистему io_uring
  4. OpenNews: Уязвимость в подсистеме io_uring, приводящая к повышению привилегий
  5. OpenNews: Уязвимость в подсистеме io_uring ядра Linux, позволяющая повысить привилегии в системе
  6. OpenNews: Применение асинхронной буферизированной записи на базе io_uring до 80 раз снизило задержки в XFS
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/59213-libuv
Ключевые слова: libuv, io_uring
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (54) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 11:53, 29/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • –15 +/
    Т.е. теоритически работа Ноды может зависеть от версии ведра лол?
     
     
  • 2.8, Аноним (8), 13:07, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Нет, практически зависит текстового редактора.
     
  • 2.45, Аноним (-), 03:09, 30/05/2023 Скрыто ботом-модератором     [к модератору]
  • +4 +/
     
  • 2.48, iiiypuk (?), 07:18, 30/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ранее из каждой жели орали "Linux не ниже 2.6"
     

  • 1.2, Аноним (2), 12:03, 29/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • –7 +/
    теперь однопоточная нода будет работать быстрее, чем типичная многопоточная прога на сишке, в которой авторы по религиозным соображениям ограничивает себя posix api (у дидов на юниксе не было io_uring)
     
     
  • 2.3, Annnno (?), 12:21, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Мультимилионы зависимостей с вами не согласятся
     
     
  • 3.4, Аноним (2), 12:38, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    у мультимиллионов зависимостей require('fs') автомагически получит ядерно-поддерживаемую асинхронщину вместо тред-пул-бейзед.
     
  • 2.5, keydon (ok), 12:40, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Внезапно ОС-специфичные штуки нередко оказываются быстрее, но влияют на совместимость.
    Никогда так не было и вот опять.
     
     
  • 3.10, Аноним (10), 13:09, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Софт, не совместимый с AIX — не софт вовсе. Даже если поддержка совместимости вызывает проблемы и заставляет отказываться от новых фич — она обязана быть, ведь это UNIX-way
     
     
  • 4.16, Аноним (16), 13:44, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Да ладно, в продакшоне уж давно Linux way.
     
  • 3.12, Самый Лучший Гусь (?), 13:11, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    А ничего кроме линукса в средне-вминяемом продакшене и не бывает. А там где бывает как правило быстрота не нужна.
     
     
  • 4.20, keydon (ok), 14:09, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • +7 +/
    > А ничего кроме линукса в средне-вминяемом продакшене и не бывает. А там
    > где бывает как правило быстрота не нужна.

    Фряхи еще встречаются в вменяемых продакшенах.

     
     
  • 5.21, Аноним (21), 14:47, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Опять сейчас нетфликс притащат (а больше нечего).
     
     
  • 6.32, КриоМух (?), 19:04, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • +8 +/
    Как это больше ничего? Ещё контора в которой я одминю. У меня тут пожалуйста и бэкапы и почтовик и vpn сервер и nginx и сайтики в клеточках и телефония многоголовая, всё это на милой фряшечке. Работает, не жужжит, пить - есть не просит.
     
     
  • 7.46, mistiq (ok), 04:26, 30/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Нежно люблю фряху (академической любовью) но как конторка с сайтиками, телефонией и прочими впнами на фряхе коррелирует со словом "вменяемая"?
     
     
  • 8.49, Кровосток (ok), 08:19, 30/05/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Многократно извиняюсь, что влезаю в ваш разговор Но человек выше - описал свой ... текст свёрнут, показать
     
     
  • 9.50, mistiq (ok), 08:21, 30/05/2023 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Прочитайте всю ветку, так есть ответ на ваш вопрос, в том числе и в моем ответе ... текст свёрнут, показать
     
  • 5.51, Tron is Whistling (?), 09:40, 30/05/2023 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Фряхи еще встречаются в невменяемых продакшенах.

    Fixed.

     
  • 3.17, Аноним (17), 13:52, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • +7 +/
    так вся эта библиотека и есть обертка для совместимости и единообразности работы с зоопарком - вокруг кучи разных костылей разных систем тебе дают единый костыль со своей единой абстракцией. Т.е., упрощенно, под капотом (под единой универсальной абстракцией) была спрятана поддержка 4-х движков, чтобы ты не мучался с каждой системой по отдельности и сейчас тебе добавили очередной частный 5-й. Да, это повлияло на совместимость - совместимость библиотеки с системами и их механизмами увеличилась. И да, тут получилось удачно, вопреки мему про "14-ть несовместимых + 1 универсальный протокол = 16 несовместимых протоколов" - этот "нулевой универсальный протокол" вышел таки хорошечным.
     
  • 2.23, Аноним (23), 15:55, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Однопоточная нода будет работать быстрее из-за ключевой C-библиотеки - libuv.so
     
     
  • 3.31, Вы забыли заполнить поле Name (?), 18:11, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Она статически линкуется
     
  • 2.47, Аноним (-), 05:34, 30/05/2023 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > теперь однопоточная нода будет работать быстрее, чем типичная многопоточная прога на сишке,
    > в которой авторы по религиозным соображениям ограничивает себя posix api (у дидов на
    > юниксе не было io_uring)

    ...благодаря сишной либе? Легко стоять на плечах гигантов :)

     

  • 1.6, Аноним (6), 12:45, 29/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А для Rust будет?
     
     
  • 2.7, Ananimus (?), 12:46, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Да, уже занесли.
     
  • 2.9, Аноним (16), 13:08, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Из безопастного языка вызывать небезопасную библиотеку? Некошерно же. Перепешите на Rust.
     
     
  • 3.13, Аноним (13), 13:14, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Почему, некошерно? Ведь уже известно, что на расте нельзя ничего написать серьёзного. И такими темпами не скоро ещё можно будет, где асинхронные генераторы? Сколько генераторный голод будет продолжаться? Это всё бюрократы проклятые. А так, любители поиграться со ржавчиной порадуются хоть.
     
     
  • 4.14, Аноним (14), 13:19, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Слишком жирно, попробуй еще раз.
     
     
  • 5.15, Аноним (13), 13:22, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Не, это то, почему лично я отправил раст на помойку до лучших времён, питон куда лучше справляется с асинхронной нагрузкой, и не зависанет рандомно опять же (и никакой возможности определить из-за чего).
     
  • 2.18, Иисус (?), 13:57, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Так давно уже всё написали. Вон в tokio поддержка ещё в далёком 2021 году появилась: https://tokio.rs/blog/2021-07-tokio-uring
     
  • 2.26, Аноним (26), 16:57, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • –1 +/
    https://lib.rs/crates/ringbahn
     
     
  • 3.30, Вы забыли заполнить поле Name (?), 18:08, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > https://lib.rs/crates/ringbahn

    4 releases
    0.0.0-experimental.3 Jun 19, 2020
    0.0.0-experimental.2 Jun 8, 2020
    0.0.0-experimental.1 May 27, 2020
    0.0.0-experimental May 26, 2020

    Узнаю растоманов - люботелей обмазаться (не)свеженьким

     

  • 1.11, Аноним (13), 13:09, 29/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    8 мегабайт стек? Это много или мало? Типичный асинхронный пул в районе сотен тредов.
     
     
  • 2.61, Аноним (61), 17:28, 30/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Но ведь она не выделяется вся сразу, а только необходимый объем?
     

  • 1.22, Аноним (22), 14:54, 29/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    >выставление единого размера стека в 8 МБ для пула потоков на всех архитектурах и платформах

    low-memory системы теперь на свалку?

     
     
  • 2.24, _hide_ (ok), 16:39, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    У разработчиков всё работает :-)
     
  • 2.25, Аноним (25), 16:55, 29/05/2023 Скрыто ботом-модератором     [к модератору]
  • +/
     
     
  • 3.43, Аноним (43), 22:49, 29/05/2023 Скрыто ботом-модератором     [к модератору]
  • +2 +/
     
  • 2.27, YetAnotherOnanym (ok), 17:24, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Там обычно не требуются скорости, для которых придуман сабж.
     
     
  • 3.39, Аноним (39), 20:20, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    1. Зато там требуется энергоэффективность. А снизив оверхед (бесполезную трату времени, а значит - энергии (E = P * T, P = U**2/R * долю "светлого" кремния) можно либо большей энергоэффективности добиться, либо большей производительности.
    2. Разработчики софта тебя спросить забыли. Просто возьмут и притащат либу, потому что им так удобно. И потребуют новую версию, потому что это тоже удобно, и там могут функции и API появится.
     
     
  • 4.40, Аноним (39), 20:23, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Доля "светлого" кремния регулируется аппаратно в зависимости от того, на что чип рассчитан, программист её может только уменьшить, отправив программу спать. А уменьшение оверхеда - это уже работа программера.
     
  • 2.41, Славик (ok), 20:52, 29/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    А зачем сабж для таких систем? Пользуй liburing.
     
  • 2.63, Аноним (-), 19:07, 30/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Во первых, по дефолту линух выделяет память под страницы памяти только когда ее ... большой текст свёрнут, показать
     

  • 1.38, ivan_erohin (?), 20:16, 29/05/2023 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +1 +/
     

  • 1.52, Tron is Whistling (?), 09:43, 30/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    "применение io_uring в libuv позволяет добиться повышения пропускной способности в 8 раз"

    Пропускной способности чего? В случае того же BIND обработка запросов тяжелее их пересылки в разы.
    Или там пропускная способность фекалий в системе отведения измерялась?

     
     
  • 2.53, Tron is Whistling (?), 09:44, 30/05/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А я таки не ошибся :D

    "Did some basic benchmarking, and it's giving me > 8x performance when reading small chunks out of /dev/zero"

     
  • 2.54, Tron is Whistling (?), 09:46, 30/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Ну и дальше, как обычно с иоуриной, началось...

    "You know what's coming now... This change has introduced regressions in some file operations"
    "So an official way to disable io_uring, preferably through the API, would be necessary for us."

    Короче все проблемы с этой хренью у libuv ещё впереди :D Действительно, отключение не помешает.

     
  • 2.55, another_one (ok), 11:05, 30/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Можешь глянуть бенчмарки ноды с обновленным libuv:
    https://ci.nodejs.org/view/Node.js%20benchmark/job/benchmark-node-micro-b
     
     
  • 3.56, Tron is Whistling (?), 12:57, 30/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Зачем мне нода?
     
     
  • 4.57, another_one (ok), 12:58, 30/05/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Ну ты просил реально применение, а не /dev/zero
     
     
  • 5.59, Tron is Whistling (?), 12:59, 30/05/2023 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Это знаешь, как к газели двигатель от спорта приделывать. Смысл тот же.
     
  • 3.58, Tron is Whistling (?), 12:59, 30/05/2023 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Тем более что про неё всё выше правильно отметили

    "Безусловно твоя поделка на ноде тормозит из-за недостаточно модного апи в недостаточно свежей оберточке. А не потому что js с лефтпадами"

     

  • 1.60, Аноним (60), 14:01, 30/05/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я просто оставлю это здесь. https://unixism.net/loti/
     
  • 1.64, Анином (?), 14:25, 05/06/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Было сравнение io_uring и epoll в работе с потоком. Epoll отказался быстрее.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру