Рекомендуется включить hyper-threading в 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
0
Для сетевых карт 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
все порты одной карты должны быть привязаны к одному драйверу.
Для привязки устройств 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. Необходим для работы DPDK с сетевыми
картами Intel. Требует поддержки процессором виртуализации ввода-вывода (например,
Intel VT-d). Настраивается в BIOS и в параметрах ядра через опцию iommu=on
.
Проверить поддержку:
grep 'vmx\|svm' /proc/cpuinfo >/dev/null && echo supported || echo not supported
Модуль igb_uio
устанавливается отдельно:
apt-get -y 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 Compose (подробная инструкция по установке)
`apt install docker-compose` — Debian, Ubuntu \
`yum install docker-compose` — CentOS
Если доступ к https://docker.mitigator.ru ведется через прокси, нужно настроить Docker.