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