Оптимизация производительности платформы
Скрипт оптимизации сетевой карты
Для улучшения производительности сетевых карт важно настроить их параметры таким образом, чтобы они могли работать с максимальной пропускной способностью и минимальными задержками. Включение агрессивной компрессии (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 в высоконагруженных системах.
- Загрузить архив скриптов оптимизации Mellanox
- Определить номера процессорных ядер для NUMA с помощью команды:
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
для Ubuntu6.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