Перейти к основному содержимому

Виртуальные машины

Введение

Данное руководство описывает процесс создания виртуальной машины для использования ПО Пересвет-СТ в среде Proxmox VE 8. Рассматривается один вариант конфигурации:

  • Без PCI Passthrough - с использованием виртуальных интерфейсов VirtIO (для тестирования)

Системные требования

Общие требования

  • Платформа виртуализации Proxmox VE 8;
  • Операционная система Ubuntu Server 24.04 LTS для виртуальной машины;
  • Версия ядра Linux Kernel 5.15
  • Минимум 32 ГБ оперативной памяти для виртуальной машины;
  • Не менее 16 физических ядер CPU Base Clock 2 GHz для виртуальной машины;
  • Не менее 16 RX/TX очередей для сетевой карты;
    • По умолчанию, многие виртуальные кластеры ВМ устанавливают 1 RX/TX очередь, что ограничивает производительность системы и позволяет ПО работать только на 1 ядре. Количество RX/TX очередей должно быть не меньше количества ядер ВМ.
  • Не менее 64 ГБ размер свободного диска.

Ограничения

  • При работе на ВМ ПО Пересвет-СТ имеет ряд ограничений:
    • При генерации stateful-трафика, можно задействовать максимум 1 /24 IPv4-маску. Ограничений для stateless плагинов нет
    • Общая производительность сильно снижена, особенно для stateful-сценариев по сравнению с ПАК Пересвет-СТ
    • Работа на ВМ рекомендуется для проведения функционального тестирования
  • На момент настройки виртуального кластера, создания виртуальной машины и установки ПО Пересвет-СТ требуется доступ в интернет
  • На данный момент поддерживается только режим включения ВМ без PCI Passthrough с использованием драйвера VIRTIO

Вариант без PCI Passthrough (VirtIO)

Производительность: До 5 Гбит/с (stateless UDP 1400 packet size)

Архитектура решения

В данной конфигурации используется следующая схема:

  • eth0 - основной сетевой интерфейс для управления Proxmox
  • eth1 - вторичный сетевой интерфейс
  • vmbr0 - мост для внешней сети (публичный IP)
  • vmbr1 - мост для внутренней сети (10.10.10.0/24)

Конфигурация без PCI Passthrough (VirtIO)

Настройка сетевого моста

Настройка внутренней сети

Отредактируйте файл /etc/network/interfaces:

nano /etc/network/interfaces

Убедитесь, что настроен мост vmbr1:

auto vmbr1
iface vmbr1 inet static
address 10.10.10.1/24
bridge-ports none
bridge-stp off
bridge-fd 0

Применение конфигурации

ifreload -a

Опционально: настройка NAT для внутренней сети

# Включение маршрутизации
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

# Добавление правила NAT
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o vmbr0 -j MASQUERADE

# Сохранение правил
apt install iptables-persistent -y
netfilter-persistent save

Создание виртуальной машины

Параметры ВМ

Создайте ВМ через веб-интерфейс Proxmox со следующими параметрами:

  • General: Задайте имя ВМ
  • OS: Выберите загруженный ISO Ubuntu
  • System: Machine: q35, BIOS: OVMF (UEFI), EFI storage: local, Qemu Agent: поставьте галочку
  • Disks: 64 ГБ или по необходимости
  • CPU: Cores: 16, Type: host
  • Memory: 32768 МБ
  • Network: Bridge: vmbr1, Model: VirtIO (paravirtualized), Advanced: multiqueue равен кол-ву ядер ВМ (16)

Добавление второго сетевого интерфейса

Важно: Добавьте второй интерфейс ДО начала установки Ubuntu!

  • После создания ВМ, но перед её запуском
  • Выберите ВМ → HardwareAddNetwork Device
  • Настройте Advanced: multiqueue равен кол-ву ядер ВМ (16)
  • Настройки: Bridge: vmbr1, Model: VirtIO
  • Нажмите Add

Установка Ubuntu

  • Запустите ВМ и откройте консоль
  • При настройке сети вы увидите два интерфейса: enp6s18 (первый VirtIO) и enp6s19 (второй VirtIO)

Настройка сети во время установки

Первый интерфейс (enp6s18) - управление:

  • Method: Manual
  • Subnet: 10.10.10.0/24
  • Address: 10.10.10.101
  • Gateway: 10.10.10.1
  • Name servers: 8.8.8.8,8.8.4.4

Второй интерфейс (enp6s19) - для DPDK:

  • Можно не настраивать, его впоследствии настроит сам Пересвет-СТ

Проверка после установки

# Проверка интерфейсов
ip a

# Проверка маршрутизации
ip route

После создания ВМ установите ПО Пересвет-СТ с помощью мастера установки.

Активация RSS

RSS (Receive Side Scaling) распределяет входящий трафик по нескольким RX-очередям сетевой карты — по одной на ядро CPU. Пересвет-СТ (через DPDK virtio-PMD) пытается включить RSS при запуске. На виртуальной машине virtio-RSS нужно явно активировать в конфигурации ВМ, иначе в логе агента появляется:

VIRTIO_DRIVER: virtio_dev_configure(): RSS support requested but not supported by the device
ETHDEV: Port0 dev_configure = -95
Важно для stateful-сценариев

После ошибки RSS configuration failed, trying without RSS агент запускается без RSS. Такой режим подходит для stateless-трафика и для stateful-сценариев на одном ядре. Для multi-core stateful TCP/HTTP результаты могут быть некорректными: обратный трафик может приходить на очередь и ядро, где нет состояния нужной сессии. Это приводит к TCP drops, расхождению клиентских и серверных HTTP-счётчиков и непредсказуемым результатам теста.

Для multi-core stateful-сценариев включите virtio RSS, используйте SR-IOV / PCI Passthrough либо ограничьте задачу одним ядром.

Предусловие: на сетевом интерфейсе ВМ должно быть выставлено число очередей (multiqueue) не меньше числа ядер — см. Создание виртуальной машины. RSS без многоочередности смысла не имеет.

Активация выполняется слоями — переходите к следующему шагу только если предыдущий не убрал ошибку dev_configure = -95.

Шаг 1. Включить RSS на virtio-устройстве

На хосте Proxmox добавьте RSS/hash в QEMU-аргументы ВМ (замените <VMID> на ID вашей ВМ):

qm set <VMID> --args "-global virtio-net-pci.rss=on -global virtio-net-pci.hash=on"
  • -global применяет настройку ко всем virtio-net-pci устройствам ВМ.
  • Требуется QEMU с поддержкой eBPF-RSS (в Proxmox VE 8 присутствует).
  • Важно: qm set --args заменяет всю строку args. Если в ней уже есть аргументы — посмотрите qm config <VMID> | grep args и объедините всё в одну строку.

Аргументы читаются только при старте процесса QEMU, поэтому нужен полный stop/start (перезагрузка изнутри гостя не подходит):

qm stop <VMID> && qm start <VMID>

Шаг 2. Если RSS всё ещё не активируется — отключить vhost (software RSS)

Причина: при vhost=on (значение по умолчанию) QEMU делегирует RSS-хэширование модулю vhost-net через eBPF-программу. Если ядро хоста или vhost-net не поддерживают eBPF-RSS, фича молча не отдаётся гостю — rss=on не срабатывает.

Решение: отключить vhost для нужного netdev — тогда RSS считает сам QEMU (software RSS). Сначала узнайте id интерфейса:

qm showcmd <VMID> --pretty | grep -- -netdev
# -netdev type=tap,id=net0,... ← интерфейс управления
# -netdev type=tap,id=net1,... ← интерфейс для DPDK

Добавьте -set netdev.<id>.vhost=off для DPDK-интерфейса (обычно net1):

qm set <VMID> --args "-global virtio-net-pci.rss=on -global virtio-net-pci.hash=on -set netdev.net1.vhost=off"
qm stop <VMID> && qm start <VMID>

Важно — vhost это свойство netdev (backend), а не устройства: используйте именно -set netdev.<id>.vhost=off. Вариант -global virtio-net-pci.vhost=off не сработает — такого свойства у устройства нет, и ВМ не запустится с ошибкой Property 'virtio-net-pci.vhost' not found.

Цена software RSS — датапас без аппаратного vhost-ускорения, то есть ниже пропускная способность. Для ВМ-режима (функциональное тестирование) это приемлемо.

Шаг 3. Аппаратный RSS — через SR-IOV / PCI Passthrough

Если нужен полноценный RSS на скорости железа, пробросьте в ВМ виртуальную функцию (VF) реальной сетевой карты через SR-IOV либо весь физический порт через PCI Passthrough. В этом случае RSS обеспечивает сама карта, без ограничений QEMU/vhost. Это отдельная конфигурация — текущее руководство описывает только вариант с VirtIO.

Проверка RSS

После запуска ВМ и старта Пересвет-СТ главный критерий — в логе агента больше нет строк dev_configure = -95 и RSS support requested but not supported.

До привязки интерфейса к DPDK можно проверить таблицу RSS в гостевой ВМ:

ethtool -x <iface>

После того как Пересвет-СТ привязал интерфейс к DPDK (драйвер vfio-pci), интерфейс исчезает из /sys/class/net и ethtool его не покажет — это нормально.

Устранение неполадок

Общие проблемы

Проблема: ВМ не получает IP по DHCP

Причина: На мосту vmbr1 нет DHCP-сервера.

Решение: Используйте статическую настройку IP (например, как описано в руководстве).

Проблема: Установка Ubuntu зависает на "curtin command in-target"

Причина: Медленное зеркало обновлений или проблемы с сетью.

Решение: Подождите 15-20 минут. Если процесс не продвигается, перезагрузите ВМ - система обычно загружается корректно.

Проблема: в логе агента dev_configure = -95 / «RSS support requested but not supported»

Причина: на ВМ не активирован virtio RSS — гостевое устройство не отдаёт фичу VIRTIO_NET_F_RSS. Агент при этом не падает: переключается в режим без RSS и продолжает работу, но входящий трафик не распределяется по нескольким очередям и ядрам. Для multi-core stateful TCP/HTTP такой режим не подходит: результаты теста могут быть некорректными.

Решение: активируйте RSS в конфигурации ВМ — см. раздел Активация RSS.

Рекомендации по производительности

Для конфигурации с VirtIO

Оптимизация буферов: Увеличьте размеры буферов:

echo 'net.core.rmem_max=134217728' >> /etc/sysctl.conf
echo 'net.core.wmem_max=134217728' >> /etc/sysctl.conf
sysctl -p