Использование Pktgen-DPDK
Сервер Сеть
Lastmod: 2024-06-17
Published: 2024-06-13

Обзор

Я хотел провести небольшое нагрузочное тестирование с короткими пакетами и решил попробовать Pktgen-DPDK.

Перед этим необходимо включить IOMMU. Запись о включении IOMMU

Окружение

Целевая средаВерсия
Ubuntu22.04
DPDK23.11.1
Pktgen-DPDKветка main
NICIntel X520 DA2

Установка необходимых пакетов

  • Установка зависимостей

    sudo apt-get update
    sudo apt-get install -y git build-essential libnuma-dev python3-pyelftools linux-headers-$(uname -r) meson ninja-build
    

Сборка и установка DPDK

  • Скачивание библиотеки DPDK

    • Скачать DPDK В данный момент мы используем последнюю LTS версию, 23.11.1
    wget https://fast.dpdk.org/rel/dpdk-23.11.1.tar.xz
    tar xf dpdk-23.11.1.tar.xz
    cd dpdk-stable-23.11.1
    
  • Сборка DPDK

    meson setup build
    ninja -C build
    
  • Установка

    ninja -C build install
    ldconfig
    

Настройка Hugepages

  • Настройка Hugepages DPDK использует большие страницы памяти (Hugepages) для достижения высокой производительности.

    echo "vm.nr_hugepages=1024" > /etc/sysctl.d/90-hugapage.conf
    sysctl --system
    

Сборка и установка Pktgen-DPDK

  • Pktgen-DPDK

    git clone https://github.com/pktgen/Pktgen-DPDK.git
    cd Pktgen-DPDK
    
  • Сборка

    meson setup build
    ninja -C build
    
  • Установка

    ninja -C build install
    

Привязка сетевого интерфейса

  • Проверка сетевых интерфейсов

    dpdk-devbind.py --status
    
    Устройства сети, использующие драйвер ядра
    ===================================
    0000:07:00.0 'RTL8111/8168/8211/8411 PCI Express Gigabit Ethernet Controller 8168' if=enp7s0 drv=r8169 unused=
    0000:09:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' if=enp9s0f0 drv=ixgbe unused=
    0000:09:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' if=enp9s0f1 drv=ixgbe unused=
    
  • Привязка vfio-pci

    dpdk-devbind.py --bind=vfio-pci 0000:09:00.1
    
  • Если возникает ошибка Error: Driver 'vfio-pci' is not loaded. Загрузите драйвер vfio-pci

    modprobe vfio-pci
    
  • Проверьте, удалось ли выполнить привязку

    dpdk-devbind.py --status
    Устройства сети, использующие совместимый с DPDK драйвер
    ============================================
    0000:09:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' drv=vfio-pci unused=ixgbe
    

    Драйвер установлен vifo-pci, что хорошо

Использование Pktgen-DPDK

  • Запуск Pktgen-DPDK

    pktgen -l 0-1 -n 2 --proc-type auto --socket-mem 512 -- -P -m "[1-2].0"
    
  • Опции DPDK

    • -l 0-1
      • Использует логические ядра 0–1 с DPDK
    • -n 2
      • Использует два канала памяти
    • –proc-type auto
      • Автоматически определяет тип процесса
    • –socket-mem 512
      • Выделяет 512 МБ для сокета 0
  • Опции pktgen

    • -P
      • Включает режим промискуитета
    • -m “[1-2].0”
      • Указывает привязку ядер для каждого порта. В данном случае порты 1 и 2 привязываются к ядру 0.

Фактическая отправка пакетов

reset 0
set 0 dst mac XX:XX:XX:XX:XX:XX // MAC-адрес назначения
set 0 dst ip 192.168.3.2        // IP-адрес назначения
set 0 src ip 192.168.3.1/24     // IP-адрес отправителя
set 0 size 64                   // Размер полезной нагрузки
start 0

В конце

Теперь, вероятно, можно отправить около 10Mpps коротких пакетов с NIC?
Мы смогли воссоздать ситуацию, похожую на DDoS! Вот почему я решил попробовать Pktgen-DPDK.