Рекомендуется включить hyper-threading в BIOS.
При включенном HT следующая команда показывает 2:
lscpu | grep 'Thread(s) per core:'
Если на двухсокетной системе установлены две сетевых карты, они должны быть на разных NUMA-узлах, иначе производительность будет низкой. Узнать NUMA-узел карты по PCI-адресу любого её порта можно так:
$ cat /sys/bus/pci/devices/0000:04:00.0/numa_node
0
Если карты оказались на одном узле, их нужно физически переставить.
В системе должен быть загружен модуль ядра, позволяющий DPDK работать с сетевым портом. Работоспособность драйверов, то есть возможность их привязки, зависит от сетевого адаптера, версии ядра Linux и платформы (чипсета или гипервизора).
Остальные разделы на этой странице («Hugepages» и «Docker») актуальны для любого выбранного драйвера.
Необходимо:
Подобрать драйвер, который будет работать с нужными сетевыми портами (документация DPDK):
vfio-pci
: стандартный, рекомендуется;uio_pci_generic
: стандартный, актуален для чипсетов без VMX/SVM
(см. ниже);igb_uio
: нестандартный, актуален только для некоторых старых чипсетов
(см. ниже);virtio-pci
: только для виртуальных адаптеров QEMU/KVM.Настроить загрузку драйвера при запуске системы.
Для привязки драйверов и управления устройствами можно загрузить скрипт DPDK (оригинальная документация):
wget https://docs.mitigator.ru/dist/dpdk-devbind \
-O /usr/local/bin/dpdk-devbind
chmod +x /usr/local/bin/dpdk-devbind
Для просмотра состояния сетевых устройств и доступных драйверов:
dpdk-devbind --status-dev=net
В списке Network devices using DPDK-compatible driver
перечислены устройства
с драйвером, нужным DPDK, в списке Network devices using kernel driver
—
устройства со стандартными драйверами. Доступные драйвера указываются
для каждого устройства списком unused=
, например unused=i40e
. В списке
отображаются только загруженные драйвера. Для загрузки драйвера vfio-pci
:
modprobe vfio-pci
Сопоставить имя устройства (например, eth0
или enp3s0f0
) и PCI-адрес
можно через sysfs:
ls -l /sys/class/net | grep pci
Например, ссылка
на ../../devices/pci0000:00/0000:00:1d.1/
0000:04:00.0
/net/eth0
означает, что eth0
связан с устройством 0000:04:00.0
.
Таким образом нужно выяснить адреса всех интересующих устройств.
Рекомендуется привязывать все устройства одной командной.
Особенно это важно для vfio-pci
.
Для привязки устройств 0000:06:00.0
и 000:06:00.1
к драйверу vfio-pci
:
dpdk-devbind --bind vfio-pci 0000:06:00.0 0000:06:00.1
Если команда привязки выполнилась без сообщений об ошибках, драйвер можно
использовать. Устройство, привязанное к специальному драйверу, пропадает
из системы (вывод ip link
и т. п.). Привязка работает до перезагрузки,
автоматическую привязку можно будет настроить
при установке Mitigator´а.
Внимание. Устройства, отмеченные в списке **Active**
, имеют IP-адрес.
Обычно это порт, через которой идет доступ к машине по SSH, поэтому скрипт
не позволяет менять таким устройствам драйвер.
Универсальный способ для большинства дистрибутивов:
echo vfio-pci >> /etc/modules
Модуль vfio-pci входит в ядро Linux, но требует поддержки процессором
виртуализации ввода-вывода (например, технологии Intel(r) VT-d).
Проверить поддержку (должно напечатать supported
):
grep 'vmx\|svm' /proc/cpuinfo >/dev/null && echo supported || echo not supported
В Debian модуль igb_uio
устанавливается отдельно:
apt-get -y install linux-headers-amd64 dpdk-igb-uio-dkms
Если при этом обновилось ядро, необходимо перезагрузить систему.
Для CentOS модуля igb_uio
в популярных репозитариях нет, при необходимости
можно его собрать.
Большие страницы (hugepages) необходимы для работы Mitigator´а. В зависимости от процессора могут поддерживаться hugepages разных размеров, чаще всего 2 МБ или 1 ГБ. При большем размере страницы выше производительность, но не все процессоры поддерживают размер 1 ГБ.
Необходимое количество hupepages зависит желаемого количества политик защиты, отслеживаемых адресов и соединений. Рекомендуется отводить на hugepages от 75 % до 50 % от полного объема памяти.
Проверить поддержку:
grep -m1 ' pdpe1gb ' /proc/cpuinfo
Hugepages размером 1 ГБ выделяются только при загрузке. В параметрах ядра необходимо указать опции (например, для 64 страниц по 1 ГБ, итого 64 ГБ):
default_hugepagesz=1G hugepagesz=1G hugepages=64
Например, при использовании GRUB это указывается в
/etc/default/grub
, после чего нужно вызвать update-grub
и
перезагрузить систему.
Проверить поддержку:
grep -m1 ' pse ' /proc/cpuinfo
Hugepages размером 2 МБ управляются через sysctl. Например, для выделения 2048 страниц по 2 МБ (итого 4 ГБ) при загрузке системы:
echo 'vm.nr_hugepages = 2048' > /etc/sysctl.d/hugepages.conf
Можно выделить двухмегабайтные hugepages без перезагрузки.
sysctl -w vm.nr_hugepages=2048
Однако из-за фрагментации памяти Mitigator может не запуститься, тогда перезагрузка необходима.
Docker >= 18.03 (подробная инструкция по установке)
apt install docker-ce
— Debian, Ubuntu
yum install docker-ce
— CentOS
Docker Compose >= 1.18
apt install docker-compose
— Debian, Ubuntu
yum install docker-compose
— CentOS
Если доступ к https://docker.mitigator.ru ведется через прокси, нужно настроить Docker.