不久前,人们注意到 Win10 1803 WM 会在主机上提供较高的 CPU 使用率,例如 25%,即使客户端 CPU 使用率为 0%。通过在 virt XML 文件中设置以下设置可以解决这个问题:
<hyperv>
<relaxed state='on'/>
<vapic state='on'/>
<spinlocks state='on' retries='8191'/>
<synic state='on'/>
<stimer state='on'/>
</hyperv>
<clock offset='localtime'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
<timer name='hypervclock' present='yes'/>
</clock>
但问题又回来了。我已从 Debian Stretch ( QEMU 2.8.1
/ Kernel 4.9
) 迁移到 Buster ( QEMU 3.1.0
/ Kernel 4.19
) 和 Windows 10 1809。
问题可能与我无法再<synic state='on'/>
在 Buster 上使用有关,而我可以在同一硬件上的 Stretch 上使用。
当我尝试启动虚拟机时出现此错误
error: internal error: process exited while connecting to monitor: Hyper-V SynIC (requested by 'hv-synic' cpu flag) requires Hyper-V VP_INDEX ('hv-vpindex')
2019-08-06T13:29:14.114943Z qemu-system-x86_64: kvm_init_vcpu failed: Function not implemented
当我跑步时,我根本lscpu
没有任何旗帜。hv*
但同样,它可以在同一 CPU 上的 Stretch 上运行。
答案1
至少在QEMU 3.1.0
/Kernel 4.19
看来是 QEMU 机器类型 >电脑-i440fx-3.0不支持 synIC,Windows 10 来宾版本 >= 1803 需要使用 synIC,以免出现主机 CPU 使用率过高的问题。
我测试过以下机器类型:
电脑-i440fx-2.8(好的)
电脑-i440fx-3.0(好的)
电脑-i440fx-3.1(失败)
PC-Q35-3.1(失败)
Virt XML 文件中的 XML 元素:
</features>
...
<hyperv>
<relaxed state='on'/>
<vapic state='on'/>
<spinlocks state='on' retries='8191'/>
<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>
更新:
原来是我的 XML 设置出了问题!
以下内容还将使您的新 QEMU 机器类型顺利运行,而不会导致主机 CPU 使用率过高:
<hyperv>
<relaxed state='on'/>
<vpindex state='on'/>
<synic state='on'/>
<stimer state='on'/>
</hyperv>
<clock offset='localtime'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
<timer name='hypervclock' present='yes'/>
</clock>
非常感谢维塔利·库兹涅佐夫感谢您对我如此耐心,让我意识到配置错误。