Экспресс-путь передачи данных

Высокопроизводительный путь пакетных данных в ядре ОС
XDP
Оригинальный автор(ы)Бренден Бланко,
Том Герберт
Разработчик(и)Сообщество разработчиков ПО с открытым исходным кодом, Google , Amazon , Intel , Microsoft [1]
Первоначальный выпуск2016 ; 8 лет назад ( 2016 )
Написано вС
Операционная системаLinux , Windows
ТипФильтрация пакетов
ЛицензияLinux: GPL
Windows: Лицензия MIT

XDP ( eXpress Data Path ) — это высокопроизводительный путь передачи данных на основе eBPF, используемый для отправки и получения сетевых пакетов на высоких скоростях в обход большей части сетевого стека операционной системы . Он включен в ядро ​​Linux с версии 4.8. [2] Эта реализация лицензирована по GPL . Крупные технологические компании, включая Amazon, Google и Intel, поддерживают ее разработку. Microsoft выпустила свою бесплатную и открытую реализацию XDP для Windows в мае 2022 года. [1] Он лицензирован по лицензии MIT . [3]

Путь данных

Пути потока пакетов в ядре Linux . XDP обходит сетевой стек и выделение памяти для метаданных пакетов .

Идея XDP заключается в том, чтобы добавить ранний хук в путь RX ядра и позволить программе eBPF, предоставленной пользователем, решить судьбу пакета. Хук помещается в драйвер сетевого контроллера (NIC) сразу после обработки прерывания и до любого выделения памяти, необходимого самому сетевому стеку , поскольку выделение памяти может быть дорогостоящей операцией. Благодаря такой конструкции XDP может отбрасывать 26 миллионов пакетов в секунду на ядро ​​с помощью стандартного оборудования. [4]

Программа eBPF должна пройти тест preverifier [5] перед загрузкой, чтобы избежать выполнения вредоносного кода в пространстве ядра. Preverifier проверяет, что программа не содержит доступов за пределами диапазона, циклов или глобальных переменных.

Программе разрешено редактировать данные пакета, и после возврата программы eBPF код действия определяет, что делать с пакетом:

  • XDP_PASS: позволить пакету продолжить прохождение через сетевой стек
  • XDP_DROP: молча отбросить пакет
  • XDP_ABORTED: отбросить пакет с исключением точки трассировки
  • XDP_TX: возвращает пакет обратно на тот же сетевой адаптер, на который он прибыл
  • XDP_REDIRECT: перенаправить пакет на другой сетевой адаптер или сокет пользовательского пространства через семейство адресов AF_XDP

XDP требует поддержки в драйвере сетевой карты, но поскольку не все драйверы поддерживают ее, можно использовать универсальную реализацию, которая выполняет обработку eBPF в сетевом стеке, хотя и с более низкой производительностью. [6]

XDP имеет инфраструктуру для выгрузки программы eBPF на сетевой контроллер интерфейса, который ее поддерживает, снижая нагрузку на ЦП. В 2023 году ее будут поддерживать только карты Netronome [7] .

Microsoft сотрудничает с другими компаниями и добавляет поддержку XDP в свою реализацию MsQuic протокола QUIC . [1]

АФ_XDP

Наряду с XDP, новое семейство адресов вошло в ядро ​​Linux, начиная с версии 4.18. [8] AF_XDP, ранее известный как AF_PACKETv4 (который никогда не был включен в основное ядро), [9] представляет собой сырой сокет, оптимизированный для высокопроизводительной обработки пакетов и допускающий нулевое копирование между ядром и приложениями. Поскольку сокет может использоваться как для приема, так и для передачи, он поддерживает высокопроизводительные сетевые приложения исключительно в пользовательском пространстве. [10]

Смотрите также

Ссылки

  1. ^ abc Джавад, Усама (25 мая 2022 г.). «Microsoft приносит проект Linux XDP в Windows». Neowin . Получено 26 мая 2022 г. .
  2. ^ "[GIT] Сетевые технологии - Дэвид Миллер". lore.kernel.org . Получено 14.05.2019 .
  3. ^ Ясар, Эрдем (25 мая 2022 г.). «Microsoft представила XDP с открытым исходным кодом для Windows». cloud7 . Получено 26 мая 2022 г. .
  4. ^ Хойланд-Йоргенсен, Токе (03.05.2019), Исходный текст и экспериментальные данные для нашей статьи, описывающей XDP: tohojo/xdp-paper , получено 21 мая 2019 г.
  5. ^ "Подробное введение в eBPF [LWN.net]". lwn.net . Получено 2019-05-14 .
  6. ^ "net: Generic XDP". www.mail-archive.com . Получено 2019-05-14 .
  7. ^ «BPF, eBPF, XDP и Bpfilter… Что это за вещи и что они означают для предприятия? - Netronome». www.netronome.com . Получено 14.05.2019 .
  8. ^ "kernel/git/torvalds/linux.git - Исходное дерево ядра Linux". git.kernel.org . Получено 2019-05-16 .
  9. ^ «Вопросы о AF_PACKET V4 и AF_XDP» . Кернел.орг .
  10. ^ "Ускорение работы сети с помощью AF_XDP [LWN.net]". lwn.net . Получено 2019-05-16 .
  • Документация XDP на Read the Docs
  • Документация AF_XDP на kernel.org.
  • xdp-for-windows на GitHub
  • Обзор XDP на FOSDEM 2017 от Дэниела Боркманна, Cilium
  • AF_XDP на FOSDEM 2018, автор Магнус Карлссон, Intel
  • eBPF.io — Введение, обучающие материалы и ресурсы сообщества
  • L4Drop: смягчение последствий DDoS-атак XDP, Cloudflare
  • Unimog: балансировщик нагрузки на периферии Cloudflare, Cloudflare
  • Открытый исходный код Katran, масштабируемого балансировщика сетевой нагрузки, Facebook
  • Cilium L4LB: автономный балансировщик нагрузки XDP, Cilium
  • Замена Kube-proxy на уровне XDP, Cilium
  • Подкаст eCHO о XDP и балансировке нагрузки
Получено с "https://en.wikipedia.org/w/index.php?title=Express_Data_Path&oldid=1216444984"