Transcript Intel DPDK

Разработка приложений
обработки сетевого трафика
с помощью Intel DPDK
Лаборатория исследований средств
информационной безопасности
РГП ГТС
Задачи, актуальность,
пути решения, проблематика
Задачи по обработке пакетов
Трафик IN
Packet
Processing
Application
Трафик OUT
 Intrusion Detection System (IDS/IPS)
 Выявление аномалий в трафике
 Поиск вредоносных сигнатур
 Firewall
 Ограничение доступа по определяемым
пользователем критериям
 Deep Packet Inspection (DPI)
 Классификация потоков
 QoS на уровне application
 Обработка данных (Data Processing)
 Криптография (encryption/decryption)
 Кодирование/Декодирование (codec)
Deep Packet Inspection
SIP соединения
Layer-2
Ethernet
frame
Layer-3
IP
datagram
Layer-4
TCP
segment
L5- L7
App
Layer
DNS запросы
Email SMTP ответы
Другие
Инженерия траффика
Quality of Service
Классификация
трафика
Фильтрация
содержания
Актуальность создания средств
обработки трафика
• Мы их все покупаем за рубежом
• Исходный код недоступен, НДВ
• Стоят дорого (~ 1 млн. долларов за ATCAшасси)
• Кастомизация, подстройка под клиента,
приоритеты
• Компетенция (люди, железо, софт)
• Это интересно!
К чему сложности?
• Масштабы – для 10 Gbps или порядка 10-15
миллионов пакетов в секунду
– У нас около десятимиллионной доли секунды
на раздумье
– Обычная латентность ядра ОС Linux – в 10-1000
раз больше
• Вывод: необходимы специальные
программно-аппаратные решения для
ускорения работы (помните GPU?)
Специализированные процессоры
• Процессоры, специально разработанные для обработки
пакетов или Сетевые процессоры (Network Processing Unit,
NPU)
– Broadcom, XLR/XLP
– Cavium Networks, OCTEON I/II
• Подключение сетевых контроллеров к сетевым
процессорам по отдельным шинам
• Разделение нагрузки:
– Система: обычный CPU
– Обработка пакетов: NPU
XLR/XLP
OCTEON
NPU: плюсы/минусы
+
• Непревзойденная производительность
–
• Дороговизна лицензии на разработку: доступ к SDK
и обучение программистов
• Сложность разработки
• Необходимость изменения исходного кода в случае
смены процессора (т.е. отсутствие обратной
совместимости)
Intel DPDK как альтернатива
• Intel считает, что на её современных CPU
скорость обработки сравнима с NPU.
– Sandy Bridge/Ivy Bridge/Haswell имеют
интегрированные контроллеры PCI-e, RAM
– Большой кэш L3
– Большие страницы памяти
• Чтобы достичь производительности –
используйте специальный набор библиотек
Intel Data Plane Development Kit (DPDK).
– Но об этом чуть позже…
Что выбрать?
• Встречи с вендорами
– Radisys
– Emerson Network Power
– Advantech
• Вывод: CPU vs NPU
– CPU – проще разработка, ниже стоимость, ниже
производительность
– NPU – сложнее разработка, выше стоимость,
выше производительность
«Железо»
или домик для софта
Решение в коробке Radisys R220
• 2U 20” соответствующий NEBS
• Два 8-ядерных процессора Intel
Xeon E5-2600
• 16xDDR3 256GB RAM
• 4, 6, 8 1GbE or 10GbE
• 6 PCIe cлоты
• Wind River Linux 4.3 with integrated
DPDK
WINDRIVER LINUX
Management
Plane
Data
Plane
*
Intel
DPDK
Data
Plane
***
Intel
DPDK
INTEL MULTICORE PROCESSOR
Недостатки решения в коробке
• Ограниченная масштабируемость
• Ограниченное модернизация плат ввод/вывода
• Совместное вычисление management и data потоков
может приводить к временной задержке
• Крупные провайдеры нуждаются в более скоростных и
масштабируемых решениях
ATCA
Appliance сервер
Серверы
Сервер-блейд
Серверы
Свитчи
Switch-блейд
ATCA chassis
ATCA
•
Новое поколение стандартизованных
телекоммуникационных
вычислительных платформ
•
320 мм высоту на 280 мм ширину
•
Стандарты позволяют использовать
платы и блэйды различных вендоров
ATCA Form factors
12 payload slots
2 hub switch slots
13U for 19”
4 payload slots
2 hub switch slots
7U for 19”
2 payload slots
3U for 19”
ATCA Topologies
•
•
•
Data узлы поддерживают P2P соединение с Swtich хабом
Центральные узел отвечает за все SWITCH соединения
Кол-во маршрутов остается минимальным и
соответственно дешевым в исполнении
•
•
•
Узлы поддерживают P2P соединение с каждым слотом
Все соединения независимы
Кол-во маршрутов остается максимальным и
соответственно дорогим в исполнении
Dual-star
• Отказоустойчивая среда благодаря 2ому хабу
• Все соединения независимы
Blades
Switch and control blade
• Centralized common equipment functions: switching, shelf management,
network timing and system management functionalities
• 40GbE hub-to-node connectivity
• Support for priority queues, packet classification and flow control
• Increase in front and rear I/O
Packet processing
• Onboard Ethernet switch provides “Smart Front-End” to enable flexible data flow for the I/O
• Dual 40Gb/10Gb/1Gb Ethernet Fabric Interface
• Support for Multiple storage options
Data Blades
Switch Blades
Intel Data Plane Development Kit
Intel DPDK
Термины: Control Plane, Data Plane
Management Plane
Интерфейс
оператора (UI)
Конфигурация
(CLI, GUI)
Control Plane
Состояние
каналов
Мониторинг
Таблица
маршрутов
Forwarding
Коммутация
Data Plane
Политики
фильтрации
Преимущество Intel DPDK
• Прямой доступ к NIC, доступный API заменяет
стандартные системные вызовы
• Не использует Scheduler или прерывания – все
компоненты запрашиваются опросами (polling)
• Обратная совместимость со всеми процессорами Intel
• Неограниченная масштабируемость по кол-ву ядер
– ~15 Mpps на 1 ядро
• Оптимизированная работа с RAM (Huge Pages, Mempool)
• Может быть установлено на любой ОС Linux (при доп.
Настройках
• BSD-лицензия и открытый исходный код
• Активная разработка
Архитектура Intel DPDK
• Environment Abstraction Layer (EAL)
• Poll-mode драйверы
– rte_eth_rx_burst, rte_eth_tx_burst
• Пакеты хранятся в структурах rte_mbuf
• Zero-copy
• Собственный аллокатор памяти из Huge Pages
– rte_malloc (init, config)
– rte_mempool (dataplane)
• Инструменты для синхронизации, pipeline-обработки
– rte_ring (кольцевой буфер, queue)
• Bulk-операции
• Грамотный prefetch
Intel DPDK против Linux network stack
Библиотеки Intel DPDK
Приложение Linux
Управление памятью
Стек сетевых протоколов
Управление очередями
Сокеты
Драйверы Poll-Mode
Environment Abstraction Layer
Системные вызовы
Poll
UIO
Ядро Linux
Драйвер
IRQ
NIC
Отступление: Huge Pages, ч.1
• Page Table
– хранит таблицу преобразований адресов
физической памяти (frames) в адреса виртуальной
памяти (pages)
– медленно работает!
• TLB, Translation Lookaside Buffer
– кэширует Page Table
– быстро работает, поскольку реализован аппаратно
в Intel Xeon
– при промахе кэша (cache TLB miss) делает поиск в
Page Table, из-за чего проседает
производительность
Отступление: Huge Pages, ч.2
• Huge Pages, т.е. «Большие» страницы
– большой размер, поэтому их мало
– меньше страниц, меньше промахов TLB
• Обычный размер страницы – 4Kb
• Большие страницы: 2Mb (флаг pse), до 1Gb (флаг
pdpe1gb)
• Выигрыш по производительности:
– СУБД, HPC, и, конечно же, Packet Processing
Флаг
Серия
Кодовое имя
Год внедрения
pse (2Mb)
Pentium Pro
N/A
1995
pdpe1gb (1Gb)
Xeon E5600
Westmere
2010
Нет поддержки в VM guest
Intel DPDK: rte_ring (кольца)
• Очередь FIFO
• Неблокируемая очередь
– безопасный одновременный доступ из-за атомарных
операций «сравнений с обменом» (Compare and Set,
CAS)
• Один или несколько потребителей
• Один или несколько поставщиков
• Преимущества: скорость (одна операция CAS),
возможность bulk-операций
• Недостатки: потребление памяти больше, т.к. всегда
необходимо место под указатели на объекты
Intel DPDK: rte_mempool
• объекты фиксированного размера
• выделение из Huge Pages
• использует rte_ring для хранения
свободных объектов
• используется функциями DPDK например
rte_eth_rx_burst(), для хранения
входящих пакетов
Intel DPDK: rte_mbuf
rte_pktmbuf_mtod(m)
или m->pkt.data
mbuf
структура
данные пакета
headroom
tailroom
m->pkt.next = NULL
m->buf_addr
m->buf_physaddr – физический
адрес буфера
Структура
Размер в байтах
Mbuf
64 (128)
Headroom
128
Данные пакета + tailroom
app specific, обычно 2048
Intel DPDK: rte_mbuf, ч.2
m0
m0->pkt.next = m1
mbuf
структура
данные пакета
headroom
m1
m1->pkt.next = m2
mbuf
структура
данные пакета
m2
m2->pkt.next = NULL
mbuf
структура
данные пакета
tailroom
Data Plane Core Affinity
Ядро
0
1
2
3
4
5
6
7
QPI
8
9
10
11
12
13
14
15
Xeon E5-2600
Xeon E5-2600
Ядра 12 и 13 привязаны
к очередям RX и TX
linux isolcpus = cpu_number,…
RX
RX
TX
RX
RX
TX
Network Interface Card
Очень простая схема работы приложения Intel DPDK
rte_eal_remote_launch()
rte_eal_init()
rte_pmd_init_all()
rte_eal_pci_probe()
main_loop()
Структуры данных
для Core Affinity
Huge
Pages
rte_eth_rx_burst()
rte_mempool_create()
rte_eth_dev_configure()
Полезная работа
библиотека
rte_mbuf
rte_ethdev
MEMPOOL
rte_eth_rx_queue_setup()
rte_eth_tx_queue_setup()
rte_eth_dev_start()
rte_eth_tx_burst()
ring
Конец
Назначенное логическое ядро
Ограничения: явные и не очень
• Отсутствует функционал ядра
– Системные вызовы? Забудьте!
• Протоколы TCP/IP
– Доступ только к L2
– IP, TCP, ARP, UDP и т.д. – отсутствуют
• Есть сторонние реализации, но платные (Wind River,
6Wind и т.д.)
• Есть бесплатные реализации «на коленке»
Load balancer
main_loop_rx()
ring
process()
RX
ring
lcore 3
Lcore 1
main_loop_tx()
ring
process()
TX
ring
Lcore 4
lcore 2
Pipeline
main_loop_rx()
process1()
RX
ring
lcore 3
Lcore 1
ring
main_loop_tx()
process2()
ring
TX
Lcore 4
lcore 2