Вопрос
Виртуальные машины (ВМ) с ОС Windows работают с низкой производительностью дисков. На ВМ с ОС Linux проблема не воспроизводится.
Как увеличить производительность дисков в ВМ?
Ответ
Вы можете увеличить производительность, настроив потоки обработки ввода-вывода (iothreads). Когда все диски ВМ обслуживаются одним потоком, это создаёт ограничение производительности при высокой нагрузке. Настройка iothreads распределяет дисковую нагрузку между несколькими потоками, что увеличивает производительность.
Подготовка
Перед настройкой iothreads убедитесь, что на ВМ с Windows установлены актуальные драйверы VirtIO (Balloon, NetKVM, Viostor). Отсутствие или устаревшая версия драйверов — наиболее частая причина низкой производительности. В отличие от Linux, в Windows эти драйверы по умолчанию отсутствуют. Настройка iothreads не даст значимого эффекта без корректных драйверов VirtIO.
Настройка iothreads
Чтобы решить проблему, настройте iothreads:
- Остановите ВМ. Перейдите в раздел Виртуальные машины → меню
→ Остановить. - Подключитесь к узлу кластера по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
- Определите внутреннее имя целевой ВМ:
virsh list --all | grep <название_ВМ>Пример выводаvirsh list --all | grep testtest 460 5450_testtest runningПояснения:
testtest— название ВМ;5450_testtest— внутреннее имя ВМ.
- Откройте конфигурацию ВМ:
Внимание!Неправильное изменение конфигурации может сделать ВМ неработоспособной. Перед редактированием рекомендуется создать резервную копию конфигурации.virsh edit <внутреннее_имя_ВМ> - Выполните следующие изменения в конфигурации:
- После блока
<vcpu>добавьте строку<iothreads>с количеством потоков. Оно не должно превышать число ядер ВМ.
Пояснения:Пример добавленных потоков<vcpu placement='static'>4</vcpu> <iothreads>2</iothreads>4— число ядер ВМ;2— количество потоков.
- Назначьте потоки дискам. В секции каждого диска добавьте
iothread='N', гдеN— количество потоков. Распределите номера потоков в зависимости от нагрузки на диски.
Пример назначения потока диску<driver name='qemu' type='qcow2' cache='none' io='native' iothread='1'/>Пояснения:
1— номер потока, к которому привязывается диск.
- После блока
- Сохраните конфигурацию.
Дополнительное увеличение производительности
В версии QEMU ниже 9.0 на один диск можно назначить только один поток. Чтобы дополнительно увеличить производительность (особенно для NVMe-хранилищ), добавьте мультиочерёдность с параметром queues.
- Откройте конфигурацию ВМ:
Внимание!Неправильное изменение конфигурации может сделать ВМ неработоспособной. Перед редактированием рекомендуется создать резервную копию конфигурации.virsh edit <внутреннее_имя_ВМ> - Добавьте параметр
queues='2':
Пояснения:Пример добавления мультиочерёдности<driver name='qemu' type='qcow2' cache='none' io='native' iothread='1' queues='2'/>queues='2'— количество очередей обработки. Позволяет гостевой ОС параллельно отправлять запросы ввода-вывода и снижает конкуренцию за блокировки в драйвере.
Связанные статьи: