Экспресс-путь к данным - Express Data Path - Wikipedia
Оригинальный автор (ы) | Бренден Бланко, Том Герберт |
---|---|
изначальный выпуск | 2016 |
Написано в | C |
Операционная система | Linux |
Тип | Пакетная фильтрация |
Лицензия | GPL |
XDP (путь к данным eXpress) является eBPF на основе высокопроизводительного пути к данным, объединенного в Ядро Linux начиная с версии 4.8.[1]
Идея XDP состоит в том, чтобы добавить ранний перехватчик в путь RX ядра и позволить пользовательской программе eBPF решать судьбу пакета. Крючок помещается в NIC водитель сразу после прерывать обработки и перед выделением памяти, необходимой Сетевой стек сам по себе, потому что выделение памяти может быть дорогостоящей операцией. Благодаря такой конструкции XDP может отбрасывать 26 миллионов пакетов в секунду на каждое ядро с обычным оборудованием.[2]
Программа eBPF должна пройти предварительную проверку.[3] перед загрузкой, чтобы избежать выполнения вредоносного кода в пространстве ядра. Предварительная проверка проверяет, что программа не содержит выходов за границу, циклов или глобальных переменных.
Программе разрешено редактировать данные пакета, и после возврата программы 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]
Рекомендации
- ^ «[GIT] Networking - Дэвид Миллер». lore.kernel.org. Получено 2019-05-14.
- ^ Хойланд-Йоргенсен, Ток (2019-05-03), Исходный текст и экспериментальные данные для нашей статьи, описывающей XDP: tohojo / xdp-paper, получено 2019-05-21
- ^ "Подробное введение в eBPF [LWN.net]". lwn.net. Получено 2019-05-14.
- ^ "net: Generic XDP". www.mail-archive.com. Получено 2019-05-14.
- ^ «BPF, eBPF, XDP и Bpfilter… Что это за вещи и что они значат для предприятия? - Netronome». www.netronome.com. Получено 2019-05-14.
- ^ «Ускорение XDP с использованием метаданных NIC» (PDF).
- ^ "kernel / git / torvalds / linux.git - дерево исходных текстов ядра Linux". git.kernel.org. Получено 2019-05-16.
- ^ "Вопросы о AF_PACKET V4 и AF_XDP". Kernel.org.
- ^ "Ускорение работы в сети с AF_XDP [LWN.net]". lwn.net. Получено 2019-05-16.
внешняя ссылка
- Документация XDP на Прочтите документы
- Документация AF_XDP на kernel.org
- Прохождение XDP в FOSDEM 2017 от Даниэля Боркманна, Cilium
- AF_XDP в FOSDEM 2018 Магнус Карлссон, Intel
- L4Drop: меры по предотвращению DDoS-атак XDP, Cloudflare
- Открытый исходный код Katran, масштабируемый балансировщик сетевой нагрузки, Facebook