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
}'Изменение конфигурации ВМ
Чтобы изменить конфигурацию ВМ с 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
}'Создание ВМ
Чтобы создать ВМ с 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
}
]
}'Создание сетевого интерфейса ВМ
Чтобы создать сетевой интерфейс с 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
}'Изменение сетевого интерфейса ВМ
Чтобы изменить настройки сетевого интерфейса с 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
}'Возможные ошибки
При работе с multiqueue возможны следующие ошибки:
Диагностика
Чтобы посмотреть количество очередей на сетевых интерфейсах:
- Подключитесь к ВМ по SSH.
- Выполните команду: Изучите вывод команды. Количество очередей отображается для каждого интерфейса в параметрах numtxqueues и numrxqueues.
ip -d a show
Связанные статьи: