Для быстрой обработки пакетов требуется обнаруживать битовые шаблоны и быстро (со скоростью работы канала) принимать решения о нужных действиях на основе наличных битовых шаблонов. Эти битовые шаблоны могут принадлежать одному из нескольких заголовков, присутствующих в пакете, которые, в свою очередь, могут находиться на одном из нескольких уровней, например Ethernet, VLAN, IP, MPLS или TCP/UDP. Действия, определяемые по битовым шаблонам, могут различаться — от простого перенаправления пакетов в другой порт до сложных операций перезаписи, для которых требуется сопоставление заголовка пакета из одного набора протоколов с другими. К этому следует добавить функции управления трафика и политик трафика, брандмауэры, виртуальные частные сети и т. п., вследствие чего сложность операций, которые необходимо выполнять с каждым пакетом, многократно возрастает.
Чтобы добиться работы на ожидаемом уровне производительности при скорости канала 10 Гбит/с и размере пакета в 84 байта, процессор должен обрабатывать 14,88 миллиона пакетов в секунду. Оборудование общего назначения было недостаточно мощным для обработки пакетов с такой скоростью. Поэтому в большинстве рабочих сетевых систем обработкой пакетов в каналах данных занимаются контроллеры ASIC и сетевые процессоры NPU. К очевидным недостаткам такого подхода относятся: недостаточная гибкость, высокая стоимость, длительные циклы разработки, зависимость от определенного поставщика. Тем не менее, благодаря доступности более быстрых и дешевых ЦП и программных ускорителей, таких как Data Plane Development Kit (DPDK), можно переложить эту нагрузку на оборудование общего назначения.
Что такое Data Plane Development Kit?
DPDK — это набор библиотек и драйверов для быстрой обработки пакетов. Можно превратить процессор общего назначения в собственный сервер пересылки пакетов, не приобретая дорогостоящие коммутаторы и маршрутизаторы.
DPDK обычно работает под управлением Linux*, хотя существует версия некоторых компонентов DPDK для FreeBSD*. DPDK — это проект с открытым исходным кодом, распространяющийся по лицензии BSD. Самые поздние исправления и дополнения, предоставленные сообществом, доступны в основной ветви.
DPDK не является набором сетевых протоколов и не реализует такие функции, как перенаправление уровня 3, IPsec, брандмауэр и т. д. При этом в дереве включены различные примеры приложений для помощи в разработке таких компонентов.
Поддержка и службы предоставляются несколькими компаниями, включая Intel.
DPDK дает возможность:
- принимать и отправлять пакеты с использованием наименьшего количества циклов ЦП (обычно не более 80 циклов);
- разрабатывать алгоритмы быстрой записи пакетов (наподобие tcpdump);
- запускать быстрые стеки сторонних разработчиков.
Производительность некоторых функций обработки пакетов составляет миллионы кадров в секунду при использовании 64-байтовых пакетов с сетевыми платами PCIe*.
Использование Data Plane Development Kit
Чтобы приступить к работе с DPDK, выполните следующие действия:
1. Если у вас нет Linux, загрузите virtual box и установите машину Linux.
2. Загрузите последнюю версию DPDK с помощью одной из команд в зависимости от используемого ядра Linux.
wget www.dpdk.org/browse/dpdk/snapshot/dpdk-2.1.0.tar.gz
или
sudo apt-get www.dpdk.org/browse/dpdk/snapshot/dpdk-2.1.0.tar.gz
или
yum install www.dpdk.org/browse/dpdk/snapshot/dpdk-2.1.0.tar.gz
3. Распакуйте ZIP-файл DPDK.
tar zxvf dpdk-2.1.0.tar.gz
4. Изучите исходный код.
cd dpdk-2.1.0
Чтобы ознакомиться с содержанием каталогов, посмотрите видео Глава 1: структура каталогов DPDK, сценарии и настройка DPDK в курсе Network Builder University Введение в DPDK.
5. Проверьте конфигурацию ЦП.
cd tools
./cpu_layout.py
Образец вывода
6. Проверьте конфигурацию сетевых адаптеров.
stack@nde01 tools]$ ./dpdk_nic_bind.py --status
Network devices using DPDK-compatible driver
============================================
0000:03:00.0 'Ethernet Connection X552/X557-AT 10GBASE-T' drv=igb_uio unused=
0000:03:00.1 'Ethernet Connection X552/X557-AT 10GBASE-T' drv=igb_uio unused=
Network devices using kernel driver
===================================
0000:05:00.0 'Ethernet Controller XL710 for 40GbE QSFP+' if=ens2f0 drv=i40e unused=igb_uio
0000:05:00.1 'Ethernet Controller XL710 for 40GbE QSFP+' if=ens2f1 drv=i40e unused=igb_uio
0000:07:00.0 'I350 Gigabit Network Connection' if=eno1 drv=igb unused=igb_uio *Active*
0000:07:00.1 'I350 Gigabit Network Connection' if=eno2 drv=igb unused=igb_uio
Other network devices
=====================
<none>
7. Настройте DPDK:
setup.sh — полезная программа, помогающая скомпилировать DPDK и настроить систему. Для запуска этой программы нужны права root. В каталоге tools введите:
./setup.sh
В результате вы получите примерно следующее:
[stack@nde01 tools]$ ./setup.sh
------------------------------------------------------------------------------
RTE_SDK exported as /admin/software_installfiles/dpdk-2.1.0
------------------------------------------------------------------------------
----------------------------------------------------------
Step 1: Select the DPDK environment to build
----------------------------------------------------------
[1] i686-native-linuxapp-gcc
[2] i686-native-linuxapp-icc
[3] ppc_64-power8-linuxapp-gcc
[4] tile-tilegx-linuxapp-gcc
[5] x86_64-ivshmem-linuxapp-gcc
[6] x86_64-ivshmem-linuxapp-icc
[7] x86_64-native-bsdapp-clang
[8] x86_64-native-bsdapp-gcc
[9] x86_64-native-linuxapp-clang
[10] x86_64-native-linuxapp-gcc
[11] x86_64-native-linuxapp-icc
[12] x86_x32-native-linuxapp-gcc
----------------------------------------------------------
Step 2: Setup linuxapp environment
----------------------------------------------------------
[13] Insert IGB UIO module
[14] Insert VFIO module
[15] Insert KNI module
[16] Setup hugepage mappings for non-NUMA systems
[17] Setup hugepage mappings for NUMA systems
[18] Display current Ethernet device settings
[19] Bind Ethernet device to IGB UIO module
[20] Bind Ethernet device to VFIO module
[21] Setup VFIO permissions
----------------------------------------------------------
Step 3: Run test application for linuxapp environment
----------------------------------------------------------
[22] Run test application ($RTE_TARGET/app/test)
[23] Run testpmd application in interactive mode ($RTE_TARGET/app/testpmd)
----------------------------------------------------------
Step 4: Other tools
----------------------------------------------------------
[24] List hugepage info from /proc/meminfo
----------------------------------------------------------
Step 5: Uninstall and system cleanup
----------------------------------------------------------
[25] Uninstall all targets
[26] Unbind NICs from IGB UIO or VFIO driver
[27] Remove IGB UIO module
[28] Remove VFIO module
[29] Remove KNI module
[30] Remove hugepage mappings
[31] Exit Script
Option:
Нужно выбрать параметр и настроить.
1. На шаге 1 требуется выбрать сборку среды DPDK. Можно выбрать x86_64-native-linuxapp-gcc; это вариант 10.
2. На шаге 2 нужно настроить среду приложения Linux. Параметр 13 — загрузка последней версии модуля IGB UIO и компиляция последней версии драйвера IGB UIO. IGB UIO — это модуль ядра DPDK, работающий с перечислением PCI и обрабатывающий прерывания состояния ссылок в пользовательском режиме (вместо ядра). Также требуется поддержка выделения сверхкрупных страниц, например страниц 2 МБ для NUMA, параметр 17. Параметр 18 — отображение текущих параметров Ethernet, как на шаге 6 выше. С помощью параметра 19 удалите привязку нужного сетевого адаптера от драйвера ядра Linux и привяжите его к установленному модулю IGB UIO с помощью параметра 13.
Внимание! Не привязывайте к DPDK сетевой адаптер, используемый для внешних подключений, поскольку в этом случае будет утрачено подключение к устройству.
Сведения об установке см. в видеоролике Глава 2: настройка DPDK в составе курса Network Builder University Введение в DPDK.
8. Скомпилируйте образец приложения l2fwd. Это приложение перенаправления уровня 2, оно перенаправляет пакеты на основе MAC-адресов, а не IP-адресов.
cd examples
cd l2fwd
export RTE_SDK=<папка установки dpdk>
make
9. Запустите образец приложения.
Синтаксис: ./build/l2fwd -c COREMASK|-l CORELIST -n CHANNELS [options]
./build/l2fwd –c 0x3 –n 4 -- -p 0x3
-c (шестнадцатеричная битовая маска ядер, нужно запустить одно), например –c Ox3 означает запуск на обоих ядрах, поскольку двоичное 11 = 0x3
-n (количество каналов памяти), например –n 4, означает запуск на всех четырех каналах, доступных на процессоре Intel Xeon
-p (маска порта)
-p 0x3 означает запуск на обоих портах, привязанных к dpdk, поскольку двоичное 11 = 0x3
В нашем тестировании этот образец приложения перенаправляет все пакеты, поступающие на порт 0, в порт 1 и наоборот. После запуска он переключается в цикл опрашивания, где опрашивает оба порта и обновляет статистику, например количество принятых и отправленных пакетов, каждые 10 секунд (см. на последнем снимке экрана ниже). На первом снимке экрана показан уровень EAL (уровень абстракции среды), проходящий через все логические ядра, которые связаны с физическими ядрами. На втором снимке экрана показаны устройства PCI/сетевые карты, привязанные к DPDK (драйвер IGB UIO, см. шаги 7 -> 2 выше) и использующие по этой причине драйвер rte_ixgbe_pmd (это драйвер опрашиваемого режима DPDK), а также сетевые карты, не находящиеся под управлением DPDK. На снимке экрана 3 показано одно логическое ядро, выделенное для каждого физического порта.
Подробные сведения о вариантах выполнения см. в разделе Глава 3: компиляция и запуск образца приложения в курсе Network Builder University Введение в DPDK.
В образце приложения показана базовая функциональность перенаправления уровня 2. Если нужно измерить производительность DPDK, ознакомьтесь с курсом Intel Network Builder University Использование DPPD PROX, в котором Люк Провост, технический руководитель отдела Network Platforms Group корпорации Intel, измеряет производительность виртуальной сети с помощью DPPD (Data Plane Performance Demonstrator) Prox, чтобы помочь разработчикам программного обеспечения понять и использовать эти инструменты.
Заключение
DPDK — программный ускоритель, работающий в пользовательском пространстве в обход ядра Linux и предоставляющий доступ к сетевым адаптерам, ЦП и памяти для приложений, обрабатывающих пакеты. В этой статье приводится пошаговая инструкция по загрузке DPDK 2.1.0 на платформе Linux с компиляцией, настройкой и запуском образца приложения.
Для лучшего понимания терминов, использованных в приведенных выше видеороликах, и для изучения возможностей и программ DPDK ознакомьтесь со следующими ресурсами:
- DPDK 101. В этом курсе Intel Network Builders University Эндрю Дигнан, инженер по приложениям для платформ в корпорации Intel, рассказывает о DPDK (на основе версии 2.1), в том числе о лицензировании, принципах обработки пакетов, библиотеках компонентов DPDK, проблемах с памятью в архитектуре Intel и о настройке DPDK с точки зрения работы с памятью.
- DPDK 201. В этом курсе Intel Network Builders University MJay, ведущий инженер по платформам в корпорации Intel, рассказывает о DPDK и описывает концепцию устройства DPDK (на основе версии 2.1), основные компоненты и причины их создания, а затем рассказывает о том, как разрабатывались образцы приложений.
- Руководство для программистов DPDK на сайте DPDK.org.
Есть вопрос? Задайте его на форуме SDN/NFV.
Автор: Intel