Probando Pktgen-DPDK
Servidor Red
Lastmod: 2024-06-17
Published: 2024-06-13

Resumen

Quería realizar una prueba de carga con un poco de tráfico de paquetes cortos, así que probé Pktgen-DPDK.

Es necesario habilitar IOMMU de antemano. Notas sobre la habilitación de IOMMU

Entorno

Entorno objetivoVersión
Ubuntu22.04
DPDK23.11.1
Pktgen-DPDKrama principal
NICIntel X520 DA2

Instalación de paquetes necesarios

  • Instalación de dependencias

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

Construcción e instalación de DPDK

  • Descarga de la biblioteca DPDK

    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
    
  • Construcción de DPDK

    meson setup build
    ninja -C build
    
  • Instalación

    ninja -C build install
    ldconfig
    

Configuración de Hugepages

  • Configuración de Hugepages DPDK utiliza páginas de memoria grandes (Hugepages) para lograr un alto rendimiento.

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

Construcción e instalación de Pktgen-DPDK

  • Pktgen-DPDK

    git clone https://github.com/pktgen/Pktgen-DPDK.git
    cd Pktgen-DPDK
    
  • Construcción

    meson setup build
    ninja -C build
    
  • Instalación

    ninja -C build install
    

Vínculo de la interfaz de red

  • Verificación de la interfaz de red

    dpdk-devbind.py --status
    
    Dispositivos de red utilizando el controlador del kernel
    ===================================
    0000:07:00.0 'RTL8111/8168/8211/8411 Controlador Ethernet Gigabit PCI Express 8168' if=enp7s0 drv=r8169 unused=
    0000:09:00.0 '82599ES Conexión de Red SFI/SFP+ de 10 Gigabits 10fb' if=enp9s0f0 drv=ixgbe unused=
    0000:09:00.1 '82599ES Conexión de Red SFI/SFP+ de 10 Gigabits 10fb' if=enp9s0f1 drv=ixgbe unused=
    
  • Vínculo de vfio-pci

    dpdk-devbind.py --bind=vfio-pci 0000:09:00.1
    
  • En caso de Error: Driver 'vfio-pci' is not loaded. Cargar el controlador vfio-pci

    modprobe vfio-pci
    
  • Verificar si se pudo vincular

    dpdk-devbind.py --status
    Dispositivos de red utilizando el controlador compatible con DPDK
    ============================================
    0000:09:00.1 '82599ES Conexión de Red SFI/SFP+ de 10 Gigabits 10fb' drv=vfio-pci unused=ixgbe
    

    El controlador debe estar como drv=vfio-pci, así que está bien.

Uso de Pktgen-DPDK

  • Iniciando Pktgen-DPDK

    pktgen -l 0-1 -n 2 --proc-type auto --socket-mem 512 -- -P -m "[1-2].0"
    
  • Opciones de DPDK

    • -l 0-1
      • Utiliza los núcleos lógicos 0-1 en DPDK.
    • -n 2
      • Utiliza 2 canales de memoria.
    • –proc-type auto
      • Determina automáticamente el tipo de proceso.
    • –socket-mem 512
      • Asigna 512 MB al socket 0.
  • Opciones de pktgen

    • -P
      • Habilita el modo promiscuo.
    • -m “[1-2].0”
      • Especifica la asignación de núcleos para cada puerto. En este caso, asigna los puertos 1 y 2 al núcleo 0.

Enviando paquetes en la práctica

reset 0
set 0 dst mac XX:XX:XX:XX:XX:XX // Dirección MAC de destino
set 0 dst ip 192.168.3.2        // Dirección IP de destino
set 0 src ip 192.168.3.1/24     // Dirección IP de origen
set 0 size 64                   // Tamaño de carga útil
start 0

Por último

Con esto, deberíamos ser capaces de enviar paquetes cortos a alrededor de 10Mpps desde el NIC.
¡Con esto podemos recrear una situación similar a un DDoS! Así que probé Pktgen-DPDK.