@rav_pr

За счет чего происходит ускорение программ при наличии модуля ядра linux?

Задался таким вопросом, после появления у openvpn тоже модуля ядра DCO как и у wireguard

Так почему это ускоряет работу? Модуль ядра имеет больший приоритет в очереди на процессорное время? Или архитектурная особенность Linux, которая производит некоторые операции только через API а модуль ядра позволяет это обойти и общаться напрямую, выполнять код без лишних вызовов в одном пространстве?
  • Вопрос задан
  • 298 просмотров
Решения вопроса 1
ValdikSS
@ValdikSS
Модуль TUN/TAP, через которые работают все не-ядерные VPN, очень медленный из-за того, что у него есть только интерфейс получения и отправки пакетов по одному пакету за вызов. Большое количество переключений контекста между ядром и пользовательским уровнем очень затратны, что влечёт за собой неэффективное использование процессорного времени.

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

Оценить ускорение от уменьшения переключений контекста довольно просто, достаточно провести тестирование со значительно увеличенным MTU пакета. Вот какие цифры приводит проект slirp4netns.

Implementation |  MTU=1500  |  MTU=4000  |  MTU=16384  |  MTU=65520
---------------|------------|------------|-------------|------------
slirp4netns    | 1.07 Gbps  | 2.78 Gbps  |  4.55 Gbps  |  9.21 Gbps
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы