Обзор
Я хотел провести небольшое нагрузочное тестирование с короткими пакетами и решил попробовать Pktgen-DPDK.
Перед этим необходимо включить IOMMU. Запись о включении IOMMU
Окружение
Целевая среда | Версия |
---|---|
Ubuntu | 22.04 |
DPDK | 23.11.1 |
Pktgen-DPDK | ветка main |
NIC | Intel 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
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-pcimodprobe 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
- -l 0-1
Опции pktgen
- -P
- Включает режим промискуитета
- -m “[1-2].0”
- Указывает привязку ядер для каждого порта. В данном случае порты 1 и 2 привязываются к ядру 0.
- -P
Фактическая отправка пакетов
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.