Описание
Один виртуальный процессор не в состоянии удовлетворить требованиям по обработке прерываний сетевого адаптера с увеличением пропускной способности сетевого ввода-вывода. С помощью множественной очереди (multiqueue) сетевого адаптера возможно обрабатывать прерывания сетевого адаптера нескольким виртуальным процессорам .
Включение multiqueue устанавливает количество очередей равных количеству гостевых виртуальных процессоров, благодаря чему можно масштабировать производительность сети для нескольких виртуальных процессоров.
Условия для включения multiqueue
- образ ВМ должен быть установлен пользователем самостоятельно
- образ ВМ обязан отличаться от образов по умолчанию (предустановленных в LinxCloud)
С этой инструкцией возможно только добавить опцию multiqueue к образу. А вот все виртуальные машины, созданные из этого образа, уже смогут воспользоваться его преимуществами.
Сценарии использования
Наибольший выигрыш в производительности с Multiqueue достигается при условиях:
- Относительно большие пакеты трафика.
- Виртуальная машина активна во многих сетевых подключениях одновременно, при этом трафик проходит между ВМ, ВМ с хостом или ВМ с внешней системой.
- Количество очередей равно количеству виртуальных CPU (поддержка нескольких очередей оптимизирует сходство прерываний RX и выбор очереди TX, чтобы сделать конкретную очередь частной для определенного vCPU).
Хотя функция virtio-net multiqueue обеспечивает повышение производительности, она имеет некоторые ограничения и поэтому не должна включаться безоговорочно:
- ОС ВМ ограничена ~ 200 векторами MSI. Для каждой очереди сетевого адаптера требуется вектор MSI, а также любое устройство virtio или назначенное устройство PCI. Определение экземпляра с несколькими сетевыми адаптерами virtio и виртуальными ЦП может привести к превышению лимита гостевого MSI.
- Multiqueue хорошо работает для входящего трафика, но иногда может вызвать снижение производительности для исходящего трафика.
- Включение multiqueue увеличивает общую пропускную способность сети, но одновременно увеличивает потребление ресурсов CPU.
- Включение множественной очереди virtio-net в конфигурации хоста QEMU не включает функциональность в ОС ВМ. Администратору ОС ВМ необходимо вручную включить его для каждой сетевой карты, для которой требуется эта функция, с помощью ethtool.
- Векторы MSI все равно будут использоваться (тратиться впустую), если на хосте была включена функция множественной очереди, но не была включена администратором в ОС ВМ.
- В случае, если количество виртуальных сетевых адаптеров в экземпляре ВМ пропорционально количеству виртуальных ЦП, включение функции множественной очереди менее важно.
Включение multiqueue через CLI
Нужно выполнить команду над ранее загруженным образом:
openstack image set IMG-UUID --property hw_vif_multiqueue_enabled=true
Проверка
Внутри виртуальной машины, созданной из образа со включенным multiqueue, настройку канала сетевой карты можно проверить и при необходимости изменить с помощью следующих команд:
ethtool -l eth0 # чтобы увидеть текущее количество очередей
ethtool -L eth0 включая <nr-of-queues> #, чтобы установить количество очередей. Должно соответствовать количеству виртуальных ЦП