База знаний VMmanager
Режим фокусировки

Как увеличить производительность дисков в ВМ с ОС Windows

Вопрос

Виртуальные машины (ВМ) с ОС Windows работают с низкой производительностью дисков. На ВМ с ОС Linux проблема не воспроизводится.

Как увеличить производительность дисков в ВМ?

Ответ

Вы можете увеличить производительность, настроив потоки обработки ввода-вывода (iothreads). Когда все диски ВМ обслуживаются одним потоком, это создаёт ограничение производительности при высокой нагрузке. Настройка iothreads распределяет дисковую нагрузку между несколькими потоками, что увеличивает производительность.

Подготовка

Перед настройкой iothreads убедитесь, что на ВМ с Windows установлены актуальные драйверы VirtIO (Balloon, NetKVM, Viostor). Отсутствие или устаревшая версия драйверов — наиболее частая причина низкой производительности. В отличие от Linux, в Windows эти драйверы по умолчанию отсутствуют. Настройка iothreads не даст значимого эффекта без корректных драйверов VirtIO.

Настройка iothreads

Чтобы решить проблему, настройте iothreads:

  1. Остановите ВМ. Перейдите в раздел Виртуальные машины → меню Остановить.
  2. Подключитесь к узлу кластера по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
  3. Определите внутреннее имя целевой ВМ:
    virsh list --all | grep <название_ВМ>
    Пример вывода
    virsh list --all | grep testtest
    460   5450_testtest    running

    Пояснения:

    • testtest — название ВМ;
    • 5450_testtest — внутреннее имя ВМ.
  4. Откройте конфигурацию ВМ:
    Внимание!
    Неправильное изменение конфигурации может сделать ВМ неработоспособной. Перед редактированием рекомендуется создать резервную копию конфигурации.
    virsh edit <внутреннее_имя_ВМ>
  5. Выполните следующие изменения в конфигурации:
    1. После блока <vcpu> добавьте строку <iothreads> с количеством потоков. Оно не должно превышать число ядер ВМ.
      Пример добавленных потоков
      <vcpu placement='static'>4</vcpu>
      <iothreads>2</iothreads>
      Пояснения:
      • 4 — число ядер ВМ;
      • 2 — количество потоков. 
    2. Назначьте потоки дискам. В секции каждого диска добавьте iothread='N', где N — количество потоков. Распределите номера потоков в зависимости от нагрузки на диски. 
      Пример назначения потока диску
      <driver name='qemu' type='qcow2' cache='none' io='native' iothread='1'/>

      Пояснения:

      • 1 — номер потока, к которому привязывается диск.
  6. Сохраните конфигурацию. 

Дополнительное увеличение производительности

В версии QEMU ниже 9.0 на один диск можно назначить только один поток. Чтобы дополнительно увеличить производительность (особенно для NVMe-хранилищ), добавьте мультиочерёдность с параметром queues.

  1. Откройте конфигурацию ВМ:
    Внимание!
    Неправильное изменение конфигурации может сделать ВМ неработоспособной. Перед редактированием рекомендуется создать резервную копию конфигурации.
    virsh edit <внутреннее_имя_ВМ>
  2. Добавьте параметр queues='2':
    Пример добавления мультиочерёдности
    <driver name='qemu' type='qcow2' cache='none' io='native' iothread='1' queues='2'/>
    Пояснения:
    • queues='2' — количество очередей обработки. Позволяет гостевой ОС параллельно отправлять запросы ввода-вывода и снижает конкуренцию за блокировки в драйвере.
Может быть полезно