Тестовое задание: реализация DPDK RX/TX Callbacks примера в Docker контейнере с использованием программного PMD.
Проект демонстрирует работу DPDK RX/TX Callbacks Sample Application в изолированной Docker среде. Приложение использует net_pcap PMD для чтения пакетов из PCAP файла и измеряет задержку обработки пакетов между RX и TX callbacks.
- DPDK 25.11 - платформа для высокопроизводительной обработки пакетов
- net_pcap PMD - программный драйвер для работы с PCAP файлами
- Ubuntu 24.04 - базовый образ контейнера
- Modified threshold - порог вывода статистики изменен с 100M на 50 пакетов
- Docker
- Docker Compose
- Linux с поддержкой hugepages
- 4GB+ свободной памяти
- 2+ CPU cores
.
├── Dockerfile # образ контейнера с DPDK
├── docker-compose.yml # конфигурация запуска
├── scripts/
│ ├── setup-dpdk.sh # настройка hugepages внутри контейнера
│ ├── generate-pcap.py # генерация тестового PCAP файла
│ └── run-rxtx-callbacks.sh # компиляция и запуск приложения
└── logs/
└── rxtx_callbacks.log # результат работы программы
docker-compose up -d --build
docker exec yadro-dpdk-app-1 /app/scripts/run-rxtx-callbacks.sh- Настройка hugepages - конфигурация 256 hugepages внутри контейнера
- Генерация PCAP - создание файла с 200 тестовыми Ethernet пакетами
- Компиляция - модификация порога статистики и компиляция приложения
- Запуск - выполнение приложения с двумя net_pcap портами на 10 секунд
- Сохранение логов - запись результатов в
/app/logs/rxtx_callbacks.log
configuring hugepages...
hugepages configured: 256
generating pcap...
Generated 200 packets in /app/data/test_traffic.pcap
compiling...
starting...
EAL: Detected CPU lcores: 8
EAL: Detected NUMA nodes: 1
EAL: Detected static linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'VA'
EAL: VFIO support initialized
EAL: Probe PCI driver: net_pcap (0xffff:0xffff) device: 0000:00:00.0 (socket 0)
EAL: Probe PCI driver: net_pcap (0xffff:0xffff) device: 0000:00:01.0 (socket 0)
Port 0 MAC: 02 70 63 61 70 00
Port 1 MAC: 02 70 63 61 70 01
Core 0 forwarding packets. [Ctrl+C to quit]
Latency = 52 cycles
Latency = 48 cycles
Latency = 43 cycles
...
log: /app/logs/rxtx_callbacks.log
Latency = 52 cycles
Latency = 48 cycles
Latency = 43 cycles
# количество измерений latency
docker exec yadro-dpdk-app-1 grep -c "Latency" /app/logs/rxtx_callbacks.log
# просмотр всего log файла
docker exec yadro-dpdk-app-1 cat /app/logs/rxtx_callbacks.log | lesslibnuma1- для работы с NUMAlibpcap0.8- для net_pcap PMDpython3- для генерации PCAPbuild-essential- компилятор GCC и инструменты сборкиmeson- система сборки DPDKninja-build- backend для mesonpkg-config- для определения флагов компиляцииpython3-pyelftools- для обработки ELF файлов при сборке DPDK
Байдаков Георгий Декабрь 2025