Перейти к основному содержимому
Настройка Nginx-DPDK

Настройка Nginx-DPDK

к сведению

Наше решение совместимо с картами Intel® и Mellanox из перечня поддерживаемых карт.

Данная инструкция предназначена для карт Intel®. Для карт Mellanox будет разработана отдельная инструкция.

Установка fast-nginx из тестового репозитория

Ускоренная версия Nginx находится в тестовом репозитории в пакете fast-nginx. Для ее установки необходимо подключить публичный тестовый репозиторий в файле /etc/apt/sources.list.d/1.0.list:

  1. Закомментировать имеющийся репозиторий:deb hps://stable.see.selectel.ru selectos main contrib.
  2. Добавить тестовый репозиторий: deb hps://testing.see.selectel.ru selectos main contrib.
  3. Выполнить 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 — останавливает nginx
  • make 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 потребуется полностью пройти процесс запуска: всё остановить и запустить снова.