Экспресс-путь к данным
Оригинальный автор(ы) | Бренден Бланко, Том Герберт |
---|---|
Разработчик(и) | Сообщество открытого исходного кода, Google , Amazon , Intel , Microsoft [1] |
Первоначальный выпуск | 2016 |
Написано в | С |
Операционная система | Линукс , Винда |
Тип | Фильтрация пакетов |
Лицензия | Линукс: Лицензия GPL Windows: лицензия MIT |
XDP ( eXpress Data Path ) — это на основе eBPF, высокопроизводительный путь передачи данных используемый для отправки и получения сетевых пакетов с высокой скоростью в обход большей части операционной системы сетевого стека . Он встроен в ядро Linux начиная с версии 4.8. [2] Эта реализация распространяется под лицензией GPL . Крупные технологические компании, включая Amazon, Google и Intel, поддерживают его развитие. Microsoft выпустила бесплатную реализацию XDP с открытым исходным кодом для Windows в мае 2022 года. [1] Он распространяется под лицензией MIT License . [3]
Путь к данным
[ редактировать ]
Идея XDP заключается в том, чтобы добавить ранний перехватчик в путь RX ядра и позволить предоставленной пользователем программе eBPF решить судьбу пакета. Перехватчик помещается в драйвер контроллера сетевого интерфейса (NIC) сразу после обработки прерывания и до выделения памяти, необходимого самому сетевому стеку , поскольку выделение памяти может быть дорогостоящей операцией. Благодаря такой конструкции XDP может отбрасывать 26 миллионов пакетов в секунду на одно ядро при использовании стандартного оборудования. [4]
Программа eBPF должна пройти предварительную проверку. [5] перед загрузкой, чтобы избежать выполнения вредоносного кода в пространстве ядра. Средство предварительной проверки проверяет, что программа не содержит выходов за пределы доступа, циклов или глобальных переменных.
Программе разрешено редактировать данные пакета, и после возврата программы eBPF код действия определяет, что делать с пакетом:
XDP_PASS
: позволить пакету пройти через сетевой стекXDP_DROP
: молча отбросить пакетXDP_ABORTED
: удалить пакет с исключением точки трассировкиXDP_TX
: вернуть пакет обратно на тот же сетевой адаптер, на который он прибыл.XDP_REDIRECT
: перенаправить пакет на другой сетевой адаптер или сокет пользовательского пространства через AF_XDP. семейство адресов
XDP требует поддержки в драйвере сетевого адаптера, но, поскольку не все драйверы поддерживают ее, он может вернуться к общей реализации, которая выполняет обработку eBPF в сетевом стеке, хотя и с более низкой производительностью. [6]
XDP имеет инфраструктуру для разгрузки программы eBPF на контроллер сетевого интерфейса, который ее поддерживает, что снижает нагрузку на процессор. В 2023 году только Нетроном [7] карты это поддерживают.
Microsoft сотрудничает с другими компаниями и добавляет поддержку XDP в свою MsQuic реализацию протокола QUIC . [1]
AF_XDP
[ редактировать ]новое семейство адресов . Наряду с XDP, начиная с версии 4.18, в ядро Linux вошло [8] AF_XDP, ранее известный как AF_PACKETv4 (который никогда не был включен в основное ядро), [9] представляет собой необработанный сокет , оптимизированный для высокопроизводительной обработки пакетов и обеспечивающий нулевое копирование между ядром и приложениями. Поскольку сокет можно использовать как для приема, так и для передачи, он поддерживает высокопроизводительные сетевые приложения исключительно в пользовательском пространстве. [10]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Перейти обратно: а б с Джавад, Усама (25 мая 2022 г.). «Microsoft переносит проект Linux XDP в Windows» . Неовин . Проверено 26 мая 2022 г.
- ^ «[GIT] Сеть — Дэвид Миллер» . lore.kernel.org . Проверено 14 мая 2019 г.
- ^ Ясар, Эрдем (25 мая 2022 г.). «Microsoft представила XDP с открытым исходным кодом для Windows» . облако7 . Проверено 26 мая 2022 г.
- ^ Хойланд-Йоргенсен, Токе (03 мая 2019 г.), Исходный текст и экспериментальные данные для нашей статьи, описывающей XDP: tohojo/xdp-paper , получено 21 мая 2019 г.
- ^ «Подробное введение в eBPF [LWN.net]» . lwn.net . Проверено 14 мая 2019 г.
- ^ "net: Общий XDP" . www.mail-archive.com . Проверено 14 мая 2019 г.
- ^ «BPF, eBPF, XDP и Bpfilter… Что это за вещи и что они значат для предприятия? — Netronome» . www.netronome.com . Проверено 14 мая 2019 г.
- ^ «kernel/git/torvalds/linux.git — дерево исходного кода ядра Linux» . git.kernel.org . Проверено 16 мая 2019 г.
- ^ «Вопросы по AF_PACKET V4 и AF_XDP» . Кернел.орг .
- ^ «Ускорение работы в сети с помощью AF_XDP [LWN.net]» . lwn.net . Проверено 16 мая 2019 г.
Внешние ссылки
[ редактировать ]- Документация XDP по прочтению документации
- Документация AF_XDP на kernel.org.
- xdp-for-windows на GitHub
- Прохождение XDP на FOSDEM 2017, автор Даниэль Боркманн, Cilium
- AF_XDP на FOSDEM 2018, автор Магнус Карлссон, Intel
- eBPF.io — Введение, руководства и ресурсы сообщества
- L4Drop: устранение XDP-DDoS-атак , Cloudflare
- Unimog: периферийный балансировщик нагрузки Cloudflare , Cloudflare
- Katran с открытым исходным кодом, масштабируемый балансировщик сетевой нагрузки , Facebook
- Cilium L4LB: автономный балансировщик нагрузки XDP , Cilium
- Замена Kube-прокси на уровне XDP , Cilium
- Подкаст eCHO о XDP и балансировке нагрузки
- Программное обеспечение командной строки
- Программное обеспечение брандмауэра
- Программное обеспечение безопасности Linux
- Возможности ядра Linux
- Бесплатное программное обеспечение с открытым исходным кодом
- бесплатное программное обеспечение Майкрософт
- Программное обеспечение, использующее лицензию GPL
- Программное обеспечение, использующее лицензию MIT
- программное обеспечение 2016 года
- Бесплатное программное обеспечение, написанное на C.