Skip to content

baydakov-georgiy/yadro

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DPDK RX/TX Callbacks Sample Application

Тестовое задание: реализация 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

Что происходит при выполнении

  1. Настройка hugepages - конфигурация 256 hugepages внутри контейнера
  2. Генерация PCAP - создание файла с 200 тестовыми Ethernet пакетами
  3. Компиляция - модификация порога статистики и компиляция приложения
  4. Запуск - выполнение приложения с двумя net_pcap портами на 10 секунд
  5. Сохранение логов - запись результатов в /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 | less

Зависимости

  • libnuma1 - для работы с NUMA
  • libpcap0.8 - для net_pcap PMD
  • python3 - для генерации PCAP
  • build-essential - компилятор GCC и инструменты сборки
  • meson - система сборки DPDK
  • ninja-build - backend для meson
  • pkg-config - для определения флагов компиляции
  • python3-pyelftools - для обработки ELF файлов при сборке DPDK

Автор

Байдаков Георгий Декабрь 2025

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published