Multiqueue (многопотоковая очередь) — это технология многопоточной обработки сетевых пакетов. При использовании multiqueue пакеты, проходящие через сетевой интерфейс, обрабатываются несколькими параллельными очередями. Multiqueue позволяет увеличить пропускную способность сети ВМ за счёт повышенного потребления ресурсов CPU.
Особенности работы функции
В текущей версии платформы работа с multiqueue доступна только через API.
Функция доступна только в кластерах с виртуализацией KVM.
Если настройки multiqueue не заданы, то каждая сетевая карта ВМ использует одну очередь.
Количество очередей на каждом интерфейсе ВМ не может превышать число её vCPU. Если число vCPU станет меньше числа очередей, число очередей будет автоматически сокращено.
Изменение количества очередей поддерживается только для VirtIO-устройств.
Настройка multiqueue
Создание конфигурации ВМ
Чтобы создать конфигурацию ВМ с 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
Связанные статьи: