Настройка Nginx-DPDK
Наше решение совместимо с картами Intel® и Mellanox из перечня поддерживаемых карт.
Данная инструкция предназначена для карт Intel®. Для карт Mellanox будет разработана отдельная инструкция.
Установка fast-nginx из тестового репозитория
Ускоренная версия Nginx находится в тестовом репозитории в пакете fast-nginx. Для ее установки необходимо подключить публичный тестовый репозиторий в файле /etc/apt/sources.list.d/1.0.list
:
- Закомментировать имеющийся репозиторий:
deb https://stable.see.selectel.ru selectos main contrib
. - Добавить тестовый репозиторий:
deb https://testing.see.selectel.ru selectos main contrib
. - Выполнить
sudo apt update
для обновления кеша пакетного менеджера.
Установка ускоренной версии Nginx:
apt install fast-nginx
При установке пакета будут установлены все необходимые зависимости.
Конфигурационные файлы
При установке ускоренного Nginx создаётся директория /usr/local/fast-nginx
, в которой располагаются директории с конфигурационными файлами.
В /usr/local/fast-nginx
для настройки используются две директории: conf
и tools
.
- В директории
conf
хранятся главные конфигурационные файлы f-stack.conf и nginx.conf, которые нужно настроить перед запуском - В файле
f-stack.conf
содержится конфигурация DPDK, в которой нужно настроить перечисленные ниже параметры
Настройка f-stack.conf
Hexadecimal bitmask of cores to run on: номера используемых ядер для работы утилиты.
Пример расчета: при наличии в сервере процессора с 8 ядрами использование первого и четвертого ядра будет выглядеть так:
- в двоичном виде 10010000
- в шестнадцатеричном 0x90
В данном моменте количество и номера ядер являются абсолютной величиной и можно указать к использованию одно ядро одного процессора и три ядра второго, но есть вероятность некорректного распределения памяти для процессов, в связи с чем рекомендуем использовать порядковые номера ядер относительно каждого процессора в отдельности.
Все указанные ядра будут полностью использованы для Nginx-DPDK.
Number of memory channels: количество каналов памяти.
Получить информацию об их количестве можно из вывода
dmidecode -t memory | grep Locator
Конфигурация сети IPv4 под заголовком [port0]
Необходимо указать адресацию, которую будете использовать для работы сервиса. Имеющаяся в конфигурационном файле является примером.
Настройка nginx.conf
Это конфигурационный файл Nginx, который расположен в директории /usr/local/fast-nginx/conf
В файле nginx.conf обязательно должна быть строчка worker_processes
.
Это значение должно быть равно количеству ядер, указанное в маске Hexadecimal bitmask of cores to run on, которая указывается в файле f-stack.conf
.
Изменение конфигурационного файла Makefile
Конфигурационный файл Makefile
расположен в директории tools
. Необходимо отредактировать следующие переменные:
Настройки сети обязательно необходимо указать полностью независимо от организации связности между машинами.
- INTERFACE=... — указать имя интерфейса, который будет использоваться для работы с DPDK.
- PCI_PORT=... — номер порта шины PCI. Можно получить из вывода
lspci
или использовать имеющийся в директории скриптdpdk-devbind.py
с флагом-s
- IP=... — IPv4 адрес интерфейса
- NETMASK=... — маска сети
- BROADCAST=... — широковещательный адрес
- ETHER=... — MAC интерфейса. Стоит взять MAC интерфейса, который предполагается использовать
- GATEWAY=... — шлюз
В блоке deinit: п отребуется исправить значение драйвера на актуальное. На данный момент стоит актуальное значение. Оно может меняться в зависимости от используемой карты.
Запуск fast-nginx
Makefile
позволяет быстро запускать, инициализировать и деинициализировать DPDK.make init
— инициализация DPDK.make nginx
— запускается nginx: поднимется виртуальный сетевой интерфейс, к которому нужно привязать IPv4 с помощью следующего скрипта;make inet
— настраивается виртуальный интерфейс для работы с DPDK;make nginx
-stop — останавливает nginxmake deinit
— деинициализирует DPDK (рекомендуется выполнять через nohup)
Совместно с запуском скрипта произойдет удаление интерфейса из доступных для управления. При успешном выполнении скрипта в выводе dpdk-devbind.py -s
указанный в настройках интерфейс перенесётся в раздел Network devices using DPDK-compatible driver
Network devices using DPDK-compatible driver
============================================
0000:02:00.0 'I210 Gigabit Network Connection 1533' drv=vfio-pci unused=igb,igb_uio
Network devices using kernel driver
===================================
0000:01:00.0 'I210 Gigabit Network Connection 1533' if=inet0 drv=igb
unused=igb_uio,vfio-pci *Active*
Возникающие ошибки и примечания
Если не включен VT-d при запуске, произойдет следующая ошибка:
Error: bind failed for 0000:02:00.0 - Cannot bind to driver vfio-pci: [Errno 22]
Invalid argument
Error: unbind failed for 0000:02:00.0 - Cannot open /sys/bus/pci/drivers//unbind:
[Errno 13] Permission denied: '/sys/bus/pci/drivers//unbind'
make: *** [Makefile:25: init] Error 1
Для её решения необходимо обратиться в техническую поддержку с просьбой включить параметр в BIOS. При возникновении каких-либо иных ошибок, необходимо выполнить ряд команд и направить их результаты через тикет-систему для анализа.
lspci -t
ls -l /sys/kernel/iommu_groups/
dmesg | grep -i iommu
Nginx создаёт N+1 процессов в системе (один главный и N рабочих процессов). Если что-то произойдёт с главным процессом, то рабочие процессы потребуется завершать по-отдельности.
Рекомендуем проверять состояние Nginx через htop
, top
или ps
.
При необходимости перезапуска Nginx с новыми параметрами достаточно провести обновление конфигурации командой nginx -s reload
.
При изменении конфигурации f-stack
потребуется полностью пройти процесс запуска: всё остановить и запустить снова.