Поддерживается работа на платформах AMD и Intel с архитектурой x86-64.
Для оптимальной работы платформ AMD требуется настройка BIOS.
Рекомендуется включить hyper-threading (HT) в BIOS.
При включенном HT следующая команда показывает 2
:
lscpu | grep 'Thread(s) per core:'
Многопроцессорные платформы рекомендуется использовать в NUMA-режиме с одним процессором на NUMA-ноду. Поддерживаются платформы с одной и двумя NUMA-нодами.
Для оптимальной производительности рекомендуется разносить сетевые карты по разным NUMA-нодам, чтобы каждый процессор работал только с портами на своей ноде.
Узнать NUMA-ноду устройства по его PCI-адресу:
cat /sys/bus/pci/devices/0000:04:00.0/numa_node
Для сетевых карт Intel и некоторых других в системе должен быть загружен драйвер (модуль ядра), позволяющий DPDK работать с ними. Для карт Mellanox загрузка модулей ядра не требуется.
Необходимо:
Подобрать драйвер для установленных сетевых устройств (документация DPDK):
vfio-pci
: стандартный, рекомендуется по умолчанию
(см. ниже);uio_pci_generic
: стандартный, используется вместо vfio-pci
,
если он не работает (см. ниже);igb_uio
: нестандартный, нужен только если остальные драйвера
не работают (см. ниже);virtio-pci
: нужен для виртуальных адаптеров QEMU/KVM.Настроить загрузку драйвера при запуске системы.
Привязка устройств к нужному драйверу производится через скрипт dpdk-devbind
(документация DPDK).
Cкачать и установить dpdk-devbind
:
wget https://docs.mitigator.ru/v22.12/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
— устройства со стандартными драйверами ядра.
Текущий драйвер указан в поле drv=
. Доступные драйвера перечислены в поле unused=
.
Отображаются только драйвера, загруженные в системе.
Если нужный драйвер не загружен, загрузить через modprobe
.
Например, для загрузки драйвера vfio-pci
:
modprobe vfio-pci
Сопоставить имя устройства (например, eth0
или enp3s0f0
) и его PCI-адрес
можно через поле if=
в выводе dpdk-devbind
.
Рекомендуется привязывать все устройства одной командной dpdk-devbind
.
Для работы с vfio-pci
все порты одной карты должны быть привязаны к одному драйверу.
Например, для привязки устройств 06:00.0
и 06:00.1
к драйверу vfio-pci
:
dpdk-devbind -b vfio-pci 06:00.0 06:00.1
Если команда привязки выполнилась без ошибкок, драйвер можно использовать.
Устройство, привязанное к специальному драйверу, пропадает из системы
(вывод ip link
и т.п.). Привязка работает до перезагрузки, автоматическую привязку
можно настроить при установке MITIGATOR.
Внимание. Устройства, отмеченные в списке **Active**
, имеют IP-адрес. Обычно
это порт, через которой идет доступ к машине по SSH, поэтому скрипт не позволяет менять
драйвер таким устройствам.
Если нужный модуль ядра не загружается по умолчанию при старте системы, его загрузку
можно включить через /etc/modules-load.d
.
Например, для загрузки vfio-pci
:
echo vfio-pci >> /etc/modules-load.d/mitigator.conf
Модуль vfio-pci
входит в состав ядра Linux. Необходим для работы DPDK с сетевыми
картами. Требует поддержки процессором виртуализации ввода-вывода (Intel VT-d или AMD-V).
Включается в BIOS соответствующими настройками (например, “VT-d”,
“Intel Virtualization Technology”, “SVM”, “AMD-V”, “AMD Virtualization”, “IOMMU”).
В параметрах ядра необходимо добавить опции (например, через GRUB):
intel_iommu=on iommu=pt
,iommu=pt
.Проверить наличие виртуализации:
grep -q 'vmx\|svm' /proc/cpuinfo && echo enabled || echo disabled
Проверить наличие IOMMU:
compgen -G '/sys/kernel/iommu_groups/*/devices/*' > /dev/null && echo enabled || echo disabled
Загрузка модуля:
modprobe vfio-pci
Модуль uio_pci_generic
входит в состав ядра Linux. Используется вместо vfio-pci
,
если тот не поддерживается системой или по какой-то причине не работает.
Загрузка модуля:
modprobe uio_pci_generic
Модуль igb_uio
может быть использован, как альтернатива другим модулям, если они
не работают.
Установка модуля:
apt install -y dpdk-igb-uio-dkms
apt install -y dpdk-kmods-dkms
Загрузка модуля:
modprobe igb_uio
Для работы MITIGATOR необходимы настроенные hugepages (большие страницы памяти). Платформой могут поддерживаться hugepages разных размеров (2 МБ, 1 ГБ), рекомендуется настраивать страницы большего размера.
Необходимое количество hugepages зависит желаемого количества политик защиты. Рекомендуется отводить на hugepages 50-75% от общего объема памяти.
Рекомендуется использовать hugepages размером 1 ГБ, если поддерживаются платформой. Их можно выделить только при загрузке системы.
Проверить поддержку:
grep -m1 pdpe1gb /proc/cpuinfo
Настраивается опциями в параметрах ядра. Пример для выделения 64-х 1 ГБ страниц:
default_hugepagesz=1G hugepagesz=1G hugepages=64
Hugepages размером 2 МБ можно настраивать без перезагрузки системы.
Пример выделения 2048 страниц по 2 МБ:
sysctl -w vm.nr_hugepages=2048
Пример настройки выделения при загрузке системы:
echo 'vm.nr_hugepages = 2048' > /etc/sysctl.d/hugepages.conf
Установить Docker и Docker Compose, следуя официальной документации по установке для вашей ОС:
Следует устанавливать Docker Compose версии v1. Работоспособность MITIGATOR с Docker Compose версии v2 не гарантируется.
Если доступ к https://docker.mitigator.ru ведется через прокси, нужно настроить Docker.