Начиная с релиза Windows 1803 замечено высокое потребление процессора при простое виртуальной машины под управлением данной ОС, а именно 20-30%. В то время как прошлые релизы и, например, Windows 7 потребляют 0-5%. Тоже самое относится к Windows Server 2019.
Поиск в интернете привёл к багтреккеру: https://bugzilla.redhat.com/show_bug.cgi?id=1610461
Итого, необходимо в секции hyperv конфигурационного файла VM добавить следующие параметры (я оставил только их):
<hyperv>
<synic state='on'/>
<stimer state='on'/>
</hyperv>
Данный рецепт подходит для версий ниже чем QEMU 3.1.0
/ Kernel 4.19
, для версий выше необходимо также включать <vpindex state=’on’/>, подробнее написано дальше в статье.
После чего виртуальная машина стала более отзывчивой, и потребление процессора в хост системе понизилось до нормальных значений.
Важно, что данные параметры поддерживают не все ядра. Я использую Centos 7 и долгое время оставался на ядре 3.10.0-693.11.1.el7.x86_64 из-за особенностей работы dlm и поддержки corosync отказоустойчивых колец. С данным ядром и указанными параметрами стартовать виртуальную машину не удалось. Обновился до текущего ядра 3.10.0-1160.49.1.el7.x86_64 где всё заработало.
Моя версия ПО: QEMU emulator version 2.12.0 (qemu-kvm-ev-2.12.0-44.1.el7_8.1)
Сама проблема кроется в следующем: Another sad thing is that MS doesn't provide dynamic frequency divider reprogramming for RTC periodic interrupt anymore (at least on 1803 and RS5), which makes RTC a kind of useless for Windows VMs due to very high default (hardcoded) RTC periodic timer interrupts rate.
UPD 2023/01/19
Для версий выше QEMU 3.1.0
/ Kernel 4.19
, которые поддерживают synIC только при включённом hv-vpindex, необходимо определить следующие параметры в секциях:
<features>
...
<hyperv>
<relaxed state='on'/>
<vpindex state='on'/>
<synic state='on'/>
<stimer state='on'/>
</hyperv>
...
</features>
<clock offset='localtime'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
<timer name='hypervclock' present='yes'/>
</clock>
Ссылки: