Оптимизация производительности платформы

Скрипт оптимизации сетевой карты

Для улучшения производительности сетевых карт важно настроить их параметры таким образом, чтобы они могли работать с максимальной пропускной способностью и минимальными задержками. Включение агрессивной компрессии (CQE) и отключение расслабленного порядка PCI-операций помогает ускорить передачу данных и оптимизировать взаимодействие с памятью. Включение DevX увеличивает пропускную способность и снижает задержки.

Для оптимизации работы сетевой карты запустить следующий скрипт:

#!/bin/sh

# Enable aggressive CQE Zipping.
cqe_compression=1

# Disable relaxed ordering for PCI operations.
pci_wr_ordering=0

# Enable DevX.
uctx_en=1


devs=$(ls -d /sys/class/net/*/device/infiniband_verbs/uverbs* | cut -d / -f 5)

for dev in $devs; do
    pci_addr=$(grep PCI_SLOT_NAME /sys/class/net/$dev/device/uevent | tail -c +15)

    echo Device: $dev $pci_addr

    mstconfig -y -d $pci_addr s \
        CQE_COMPRESSION=$cqe_compression \
        PCI_WR_ORDERING=$pci_wr_ordering \
        UCTX_EN=$uctx_en

    # Switch link type to Ethernet if supported
    mstconfig -y -d $pci_addr s LINK_TYPE_P1=2
    mstconfig -y -d $pci_addr s LINK_TYPE_P2=2
done

Режим pass-through для IOMMU

Для оптимальной работы виртуализированных систем важно обеспечить прямой доступ к аппаратным ресурсам для виртуальных машин. Это возможно при включении режима pass-through для IOMMU. Такой подход значительно повышает производительность, поскольку исключает вмешательство гипервизора, что позволяет виртуальным машинам работать с максимально возможной пропускной способностью и низкими задержками.

  • Открыть файл /etc/default/grub
  • Найти строку
GRUB_CMDLINE_LINUX=""

и заменить на:

GRUB_CMDLINE_LINUX="iommu=pt"
  • Обновить параметры загрузчика с помощью команды:
update-grub

Скрипты оптимизации для сетевых карт Mellanox

Для повышения производительности сетевых карт Mellanox важно оптимизировать распределение прерываний и настроить привязку их к процессорным ядрам NUMA. Это помогает улучшить балансировку нагрузки, снизить задержки и обеспечить правильную работу системы при высокой нагрузке. Отключение службы irqbalance важно, чтобы избежать возможных конфликтов в распределении прерываний. Этот процесс помогает обеспечить стабильную работу и высокую производительность при использовании сетевых карт Mellanox в высоконагруженных системах.

lscpu | grep "NUMA node"
  • Остановить и отключить автозапуск сервиса irqbalance:
systemctl stop irqbalance.service && systemctl disable irqbalance.service
  • Запустить загруженный скрипт set_irq_affinity_cpulist.sh с указанием нужных номеров ядер NUMA и названия интерфейса. В качестве параметров указать номера ядер нужной NUMA, а так же название интерфейса. Пример команды: /set_irq_affinity_cpulist.sh 0-19,40-59 enp216s0f0np0

Режим максимальной производительности для CPU

Применение режима performance позволяет процессорам работать на максимальной тактовой частоте, что особенно важно при выполнении ресурсоемких операций. Установка этого режима помогает избежать потери производительности из-за энергосберегающих функций процессора, гарантируя, что система будет работать на максимуме своих вычислительных возможностей.

  • Проверить текущий режим работы процессора командой:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
  • Проверить доступные режимы работы процессора:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
  • Если среди доступных режимов есть performance, применить его командой:
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

Установка и настройка драйверов для сетевых карт Silicom Bypass

1. Сборка драйвера ixgbe (версия 5.19.6)

Рекомендованное ядро:

  • 6.5 для Ubuntu
  • 6.1.67-un-def для Альт СП

Необходимые пакеты:
- image и kernel-headers-modules соответствующей версии.
- Компилятор gcc.

Установка компилятора:

apt-get install gcc

Загрузка исходных файлов:

wget --http-user=[ваш логин] --http-password=[ваш пароль] https://public-repo.svcp.io/PxGxBP_VSD40f.zip

Сборка и установка драйвера для Ubuntu:

unzip PxGxBP_VSD40f.zip
cd PxGxBP_VSD40f/Linux/Network_Drivers/PE210GxBPi9/ixgbe-5.19.6/
tar -xzvf ixgbe-5.19.6ms7.2.tar.gz
cd ixgbe-5.19.6ms7.2/src/
uname -r 
sudo make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
sudo make install
modprobe ixgbe

Сборка и установка драйвера для Альт СП:

unzip PxGxBP_VSD40f.zip
cd PxGxBP_VSD40f/Linux/Network_Drivers/PE210GxBPi9/ixgbe-5.19.6/
tar -xzvf ixgbe-5.19.6ms7.2.tar.gz
cd ixgbe-5.19.6ms7.2/src/
make KSRC=/usr/src/linux-6.1.67-un-def-alt0.c10f.1
make KSRC=/usr/src/linux-6.1.67-un-def-alt0.c10f.1 install
modprobe ixgbe

Проверка загрузки драйвера и версии:

lsmod | grep ixgbe 
modinfo ixgbe

2. Сборка bypass-драйвера

Сборка и установка для Ubuntu:

cd ~/PxGxBP_VSD40f/Linux/Bypass/Libs/Kernel/
tar -xzvf bypass-9.0.8.tar.gz
cd bypass-9.0.8/lib
uname -r
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
sudo make -C /lib/modules/$(uname -r)/build M=$(pwd) modules_install
sudo depmod -a
sudo modprobe bypass

Сборка и установка для Альт СП:

cd ~/PxGxBP_VSD40f/Linux/Bypass/Libs/Kernel/
tar -xzvf bypass-9.0.8.tar.gz
cd bypass-9.0.8/lib
make KSRC=/usr/src/linux-6.1.67-un-def-alt0.c10f.1
make KSRC=/usr/src/linux-6.1.67-un-def-alt0.c10f.1 install
modprobe bypass

Проверка загрузки драйвера и версии:

lsmod | grep bypass
modinfo bypass

3. Сборка и проверка утилиты bp_ctl

Сборка утилиты Ubuntu:

cd ~/PxGxBP_VSD40f/Linux/Bypass/BP_Control/
tar -xzvf bp_ctl-5.2.0.49.tar.gz
cd bp_ctl-5.2.0.49/
uname -r
make -C /lib/modules/$(uname -r)/build M=$(pwd) install
bpctl_start

Сборка утилиты для Альт СП:

cd ~/PxGxBP_VSD40f/Linux/Bypass/BP_Control/
tar -xzvf bp_ctl-5.2.0.49.tar.gz
cd bp_ctl-5.2.0.49/
make KSRC=/usr/src/linux-6.1.67-un-def-alt0.c10f.1 install
bpctl_start

Проверка работы на интерфейсе:

bpctl_util enp94s0f0 get_bypass_pwoff

При выключенном bypass ожидается следующий вывод:

The interface is in the Bypass mode at power off state.

4. Настройка автоматического запуска bpctl

Если в системе уже установлен DosGate, важно, чтобы XDP от DosGate применялся после инициализации bypass-драйвера и запуска утилиты bpctl.

Для этого создаем systemd-сервис:

nano /etc/systemd/system/bpctl_autostart.service

Добавляем содержимое:

[Unit]
Description=Bypass Service
After=network.target

[Service]
Type=oneshot
ExecStartPre=/bin/bash -c 'CHECK_BPCTL=$(bpctl_util info); if echo $CHECK_BPCTL | grep -q "Bypass-SD"; then echo "bpctl is already running"; exit 1; fi'
ExecStart=/bin/bpctl_start
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Активируем сервис:

sudo systemctl daemon-reload
systemctl enable --now bpctl_autostart
systemctl status bpctl_autostart

Перезагрузить сервер и убедиться, что интерфейсы не отключаются при совместной работе DosGate и bpctl.

Проверка успешного запуска bpctl:

bpctl_util

Если утилита запустилась корректно, она выведет список доступных команд.

Проверка работы XDP на интерфейсах:

ip link | grep xdp

Если xdp присутствует на интерфейсах — DosGate запущен и работает корректно.

Изменение максимального размера таблиц данных (XDP map tuning)

1. Остановка сервиса DosGate и его компонентов

Перед изменением конфигурации необходимо остановить работу сервиса:

sudo service dosgate stop

2. Очистка XDP-мап

Очиститm данные во всех XDP-мапах командой:

dgadm --clear=sa -y

3. Внесение изменений в конфигурационный файл

Для изменения размера конкретной XDP-мапы выполнить следующие шаги:

Определите размер ключа (Key size) и значение (Value size) в байтах для требуемой XDP-мапы.

Установите новый максимальный размер XDP-мапы (например: 2 000 000 записей для TCP-авторизации).

Рассчитайте требуемый объем оперативной памяти по формуле:

Объем памяти = Key size * Новый размер XDP-мапы

Примечание: Если у XDP-мапы Key size и Value size равны 0b, используйте обозначения K (килобайты), M (мегабайты), G (гигабайты).

3.1. Изменение размера локальной XDP-мапы (привязанной к арене)

Откройте файл /etc/dosgate.conf и добавьте параметр maps с новым значением:

arenas:
  - name: first
    id: 1
    maps:
      hmark_inet_map: 50000000

3.2. Изменение размера глобальной XDP-мапы (привязанной к демону)

daemon:
  maps:
    daemon_log_entry_map: 1M

arenas:
  - name: first
    id: 1

4. Запуск сервиса DosGate

После внесения изменений в конфигурацию запустить сервис:

service dosgate start

5. Проверка состояния сервиса

Убедитесь, что сервис работает корректно и ошибки отсутствуют:

service dosgate status