Multiqueue (многопотоковая очередь) — это технология многопоточной обработки сетевых пакетов. При использовании multiqueue пакеты, проходящие через сетевой интерфейс, обрабатываются несколькими параллельными очередями. Multiqueue позволяет увеличить пропускную способность сети ВМ за счёт повышенного потребления ресурсов CPU. 

Особенности работы функции


Функция доступна только в кластерах с виртуализацией KVM.

Если настройки multiqueue не заданы, то каждая сетевая карта ВМ использует одну очередь.

Количество очередей на каждом интерфейсе ВМ не может превышать число её vCPU. Если число vCPU станет меньше числа очередей, число очередей будет автоматически сокращено.

Изменение количества очередей поддерживается только для VirtIO-устройств.

Настройка через интерфейс


Чтобы создавать ВМ с multiqueue, добавьте конфигурацию с несколькими vCPU и параметром Очереди сетевой карты в блоке Ресурсы. Подробнее см. Конфигурации виртуальных машин. Вы можете изменить количество очередей у ВМ в настройках виртуального интерфейса. Подробнее см. Настройки сети на ВМ.

Настройка через API


Создание конфигурации ВМ

Чтобы создать конфигурацию ВМ с multiqueue, выполните POST-запрос /vm/v3/preset. Укажите количество очередей в параметре iface_queues.

Пример запроса

curl -X 'POST' \
  'localhost:1500/vm/v3/preset' \
  -H 'accept: */*' \
  -H 'Content-Type: application/json' \
  -H 'internal-auth:on' \
  -d '{
  "name": “test_preset",
  "cpu_number": 4,
  "ram_mib": 2048,
  "virtualization_type": "kvm",
  "hdd_mib": 1024,
  "iface_queues": 2
}'
CODE

Изменение конфигурации ВМ

Чтобы изменить конфигурацию ВМ с multiqueue, выполните POST-запрос /vm/v3/preset/{preset_id}. Укажите количество очередей в параметре iface_queues.

Пример запроса

curl -X 'POST' \
  'localhost:1500/vm/v3/preset/1' \
  -H 'accept: */*' \
  -H 'Content-Type: application/json' \
  -H 'internal-auth:on' \
  -d '{
  "name": “test_preset",
  "cpu_number": 4,
  "ram_mib": 2048,
  "virtualization_type": "kvm",
  "iface_queues": 2
}'
CODE

Создание ВМ

Чтобы создать ВМ с multiqueue, выполните POST-запрос /vm/v3/host. Укажите количество очередей в параметре queues для каждого интерфейса.

Пример запроса

curl -X 'POST' \
  'localhost:1500/vm/v3/host' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'x-xsrf-token: some_token' \
  -d '{
  "cpu_number": 4,
  "custom_interfaces": [
    {
      "bridge_id": 1,
      "is_main_network": true,
      "model": "virtio",
      "queues": 4
    }
  ],
   "vxlan": [
    {
      "id": 5,
      "ipnet": 12,
      "ipv4_number": 1,
      "model": "virtio",
      "queues": 3
    }
  ]
}'
CODE

Создание сетевого интерфейса ВМ

Чтобы создать сетевой интерфейс с multiqueue, выполните POST-запрос /vm/v3/host/{host_id}/iface. Укажите количество очередей в параметре queues.

Пример запроса

curl -X 'POST' \
  'localhost:1500/vm/v3/host/1/iface' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'internal-auth:on' \
  -d '{
  "bridge_id": 124,
  "ip_count": 1,
  "ippool": 1,
  "is_main_network": true,
  "mac": "AA:BB:CC:DD:EE:FF",
  "model": "virtio",
  "no_ip": false,
  …
  "queues": 2
}'
CODE

Изменение сетевого интерфейса ВМ

Чтобы изменить настройки сетевого интерфейса с multiqueue, выполните POST-запрос /vm/v3/host/{host_id}/iface/{iface_id}. Укажите количество очередей в параметре queues.

Пример запроса

curl -X 'POST' \
  'localhost:1500/vm/v3/host/1/iface/1' \
  -H 'accept: */*' \
  -H 'Content-Type: application/json' \
  -H 'internal-auth:on' \
  -d '{
  "model": "virtio",
  "queues": 3
}'
CODE

Возможные ошибки


При работе с multiqueue возможны следующие ошибки:

КодСообщениеПричина
5389

Invalid resource value

iface_queues(X) > cpu_number(Y)

Число очередей превышает число vCPU
5136

Bad query

The number of network interface queues cannot be greater than the number of vCPUs

Число очередей превышает число vCPU
5136

Bad query

Non-default queues value can be set only for VirtIO (KVM) devices, default: 1

Изменение количества очередей поддерживается только для VirtIO-устройств

Диагностика


Чтобы посмотреть количество очередей на сетевых интерфейсах:

  1. Подключитесь к ВМ по SSH.
  2. Выполните команду:
    ip -d a show
    CODE
    Изучите вывод команды. Количество очередей отображается для каждого интерфейса в параметрах numtxqueues и numrxqueues