Win10ゲストKVMホストCPU使用率が高い。

Win10ゲストKVMホストCPU使用率が高い。

しばらく前に、Win10 1803 WMは、クライアントCPU使用率が0%であるにもかかわらず、ホストが25%の高いCPU使用率を提供することを示しました。この問題は、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に移行しました。問題は、同じハードウェアでStretchでは使用できますが、Busterでは
使用できなくなるという事実に関連している可能性があります。仮想マシンを起動しようとすると、このエラーが発生します。<synic state='on'/>

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マシンタイプのようです。QEMU 3.1.0>Kernel 4.19PC-i440fx-3.0synICはサポートされていません。 Windows 10ゲストバージョン> = 1803では、高いホストCPU使用率の問題を回避するためにsynICを使用する必要があります。

次のマシンタイプをテストしました。
PC-i440fx-2.8(いいね)
PC-i440fx-3.0(いいね)
PC-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設定に問題があることがわかりました!
以下を使用すると、ホストCPU使用率を向上させることなく、新しいQEMUマシンタイプをシームレスに実行できます。

<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>

非常にありがとうヴィタリ・クズネチョフ忍耐を持って、間違った構成を教えてくれてありがとう。

関連情報