[Бумага] [Видео]
UDPDK — это минимальный стек UDP , основанный на DPDK, для быстрой двухточечной связи между серверами.
Он полностью работает в пользовательском пространстве, поэтому вы можете быстро перемещать пакеты, не проходя через громоздкий стек ядра.
Более того, благодаря POSIX-подобному API портировать существующие приложения на UDPDK очень просто! 1
Что такое УДПДК:
Чем НЕ является UDPDK:
1 Некоторые функции могут еще не поддерживаться.
Чтобы использовать UDPDK, ваши машины должны быть оснащены сетевыми адаптерами с поддержкой DPDK; они обычно встречаются в серверах, а не в ноутбуках и настольных компьютерах. Список оборудования, официально поддерживаемого DPDK, доступен здесь. В частности, UDPDK был разработан и протестирован на Intel X710-DA2 с драйверами igb_uio и vfio ; другие устройства должны работать, пока их поддерживает DPDK.
УДПДК требует:
Они уже включены в этот репозиторий как подмодули, поэтому извлеките их:
git submodule init
git submodule update
ДПДК
DPDK является ключевым элементом UDPDK. Он управляет сетевым адаптером и реализует Ethernet.
cd dpdk/usertools
./dpdk-setup.sh
В меню выполните следующие действия:
x86_64-native-linuxapp-gcc
vfio
️ Если вы используете драйвер VFIO , вам необходимо включить IOMMU в вашей системе.
Чтобы включить его, откройте/etc/default/grub
, добавьте флагintel_iommu=on
вGRUB_CMDLINE_LINUX_DEFAULT
, затемsudo update-grub
и, наконец, перезагрузитесь.
иних
inih используется для удобства анализа файлов конфигурации .ini
.
cd inih
meson build
cd build
ninja
UDPDK встраивается в статическую библиотеку, которую в конечном итоге необходимо связать с конечным приложением.
cd udpdk
make
sudo make install
API UDPDK очень похож на API старых добрых сокетов BSD:
int udpdk_socket(int domain, int type, int protocol);
int udpdk_bind(int s, const struct sockaddr *addr, socklen_t addrlen);
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t *optlen);
ssize_t udpdk_sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
ssize_t udpdk_recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);
int udpdk_close(int s);
Кроме того, для правильной настройки и демонтажа внутренних компонентов DPDK (структур и процессов) необходимы следующие методы:
int udpdk_init(int argc, char *argv[]);
void udpdk_interrupt(int signum);
void udpdk_cleanup(void);
Примечание: select() еще не реализован.
Папка apps/
содержит два простых примера: приложение для пинг-понга и приложение pkt-gen.
UDPDK выполняется в двух отдельных процессах: первичный — это тот, который содержит логику приложения (т. е. вызывает системные вызовы), а вторичный ( poller ) постоянно опрашивает сетевой адаптер для отправки и получения данных. Обмен пакетами между приложением и опросчиком осуществляется через общую память с использованием кольцевых очередей без блокировки.
Мы сравниваем UDPDK со стандартными сокетами UDP с точки зрения пропускной способности и задержки.
Среда
Два идентичных сервера соединены «точка-точка» по интерфейсу 10G. Их характеристики:
Процессор: Intel Xeon E5-2640 @ 2,4 ГГц
ОЗУ: 64 ГБ
ОС: Убунту 18.04.
Ядро: 4.15.0
Сетевая карта: Intel X710 DA2 10GbE
Драйвер сетевой карты: VFIO (DPDK) или i40e (обычные разъемы)
Пропускная способность
Мы измеряем максимальную пропускную способность, достигаемую при изменении размера пакета.
Последний включает заголовки UDP, IP и MAC.
Как показано на рисунке, UDPDK в 18 раз лучше традиционных сокетов.
Следует отметить, что UDPDK насыщает соединение 10G, а это, к сожалению, все, что у нас было: интерфейс 40G определенно сделал бы его блестящим!
Задержка
Измеряем задержку и ее джиттер.
Опять же, UDPDK оказывается на порядок лучше стандартных сокетов.
УДПДК | Стандартный | |
---|---|---|
Среднее (мкс) | 13.92 | 116,57 |
Стандарт (мкс) | 0,74 | 18.49 |
Код UDPDK распространяется под лицензией BSD 3-Clause.
Эта работа была представлена на IEEE NFV-SDN 2021, 7-й конференции IEEE по виртуализации сетевых функций и программно-определяемым сетям. Авторы: Л. Лай, Г. Ара, Т. Кучинотта, К. Кондепу, Л. Валкаренги.
Лай, Леонардо и др. «Службы NFV со сверхмалой задержкой с использованием DPDK» Конференция IEEE 2021 г. по виртуализации сетевых функций и программно-конфигурируемым сетям (NFV-SDN). ИИЭР, 2021.
Каждый может внести свой вклад в UDPDK, внедряя новые функции, расширяя существующие или просто сообщая об ошибках/проблемах.