Поддерживается работа на платформах 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 для платформ
без VMX/SVM (см. ниже);virtio-pci: нужен для виртуальных адаптеров QEMU/KVM;igb_uio: нестандартный, нужен только если остальные драйвера
не работают (см. ниже).Настроить загрузку драйвера при запуске системы.
Привязка устройств к нужному драйверу производится через скрипт dpdk-devbind
(документация 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-адрес
можно через поле 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, поэтому скрипт не позволяет менять
драйвер таким устройствам.
Если нужный модуль ядра не загружается по умолчанию при старте системы, его загрузку можно включить так:
echo vfio-pci >> /etc/modules
Модуль vfio-pci входит в состав ядра Linux. Необходим для работы DPDK с сетевыми
картами Intel и другими. Требует поддержки процессором виртуализации ввода-вывода
(например, Intel VT-d). Включается в BIOS и в параметрах ядра через опции:
intel_iommu=on iommu=pt,amd_iommu=on iommu=pt.Проверить поддержку:
grep 'vmx\|svm' /proc/cpuinfo >/dev/null && echo supported || echo not supported
Модуль igb_uio устанавливается отдельно:
apt-get install linux-headers-amd64 dpdk-igb-uio-dkms
Для работы 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, следуя официальной документации по установке для вашей ОС:
Если доступ к https://docker.mitigator.ru ведется через прокси, нужно настроить Docker.