Поддерживается работа на платформах 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.04/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 --bind 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 соответствующими настройками.
В параметрах ядра необходимо добавить опции:
intel_iommu=on iommu=pt,iommu=pt.Проверить поддержку:
grep 'vmx\|svm' /proc/cpuinfo >/dev/null && echo supported || echo not supported
Загрузка модуля:
modprobe vfio-pci
Модуль uio_pci_generic входит в состав ядра Linux. Используется вместо vfio-pci,
если тот не поддерживается системой или по какой-то причине не работает.
Загрузка модуля:
modprobe uio_pci_generic
Модуль igb_uio может быть использован, как альтернатива другим модулям, если они
не работают.
Установка модуля:
apt install -y dpdk-igb-uio-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.