Предоставление ранних исправлений for IO_uring поддержка отправки с нулевым копированием для сетевой подсистемы ядра Linux выглядит чрезвычайно многообещающей для большей пропускной способности.
Разработчик Павел Бегунков опубликовал сегодня набор из двенадцати патчей, работающих над поддержкой отправки с нулевым копированием для IO_uring с сетевой подсистемой. Эти начальные исправления помечены как «запрос комментариев», так как некоторые элементы все еще сортируются с помощью кода.
Эта поддержка отправки с нулевым копированием в режиме ввода-вывода в настоящее время предназначена для обработки IPv4/UDP, но в разработке также есть исправления TCP. Несмотря на то, что работа все еще находится на ранней стадии и постоянно меняется, результаты производительности очень воодушевляют нас по поводу перспектив:
Бенчмаркинг udp (65435 байт) с фиктивным сетевым устройством (mtu=0xffff): лучший case io_uring=116079 МБ/с против msg_zerocopy=47421 МБ/с, или в 2,44 раза быстрее.
….
В худшем случае io_uring все еще в 1,88 раза быстрее, чем msg_zerocopy, и есть пара”простых”оптимизаций, не включенных в набор исправлений. Для полезной нагрузки 4096 байт zc лишь немного превосходит не-zc версию, чем больше полезная нагрузка, тем шире разрыв.
Замечательно видеть, как вся работа ядра происходит вокруг IO_uring для хранения и сети. См. эту серию исправлений , если вас интересуют все подробности.