Экспресс-путь к данным - Express Data Path

XDP
Оригинальный автор (ы)Бренден Бланко, Том Герберт
изначальный выпуск2016
Написано вC
Операционная системаLinux
ТипПакетная фильтрация
ЛицензияGPL

XDP (путь к данным eXpress) является eBPF на основе высокопроизводительного пути к данным, объединенного в Ядро Linux начиная с версии 4.8.[1]

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

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

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

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

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

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

XDP имеет инфраструктуру для разгрузки программы eBPF на карту NIC, которая ее поддерживает, что снижает нагрузку на ЦП. Только в то время Нетроном карты это поддерживает,[5] с Intel и Mellanox работаю над этим.[6]

AF_XDP

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

Рекомендации

  1. ^ «[GIT] Networking - Дэвид Миллер». lore.kernel.org. Получено 2019-05-14.
  2. ^ Хойланд-Йоргенсен, Ток (2019-05-03), Исходный текст и экспериментальные данные для нашей статьи, описывающей XDP: tohojo / xdp-paper, получено 2019-05-21
  3. ^ "Подробное введение в eBPF [LWN.net]". lwn.net. Получено 2019-05-14.
  4. ^ "net: Generic XDP". www.mail-archive.com. Получено 2019-05-14.
  5. ^ «BPF, eBPF, XDP и Bpfilter… Что это за вещи и что они значат для предприятия? - Netronome». www.netronome.com. Получено 2019-05-14.
  6. ^ «Ускорение XDP с использованием метаданных NIC» (PDF).
  7. ^ "kernel / git / torvalds / linux.git - дерево исходных текстов ядра Linux". git.kernel.org. Получено 2019-05-16.
  8. ^ "Вопросы о AF_PACKET V4 и AF_XDP". Kernel.org.
  9. ^ "Ускорение работы в сети с AF_XDP [LWN.net]". lwn.net. Получено 2019-05-16.

внешняя ссылка