web-dev-qa-db-ja.com

Win10ゲスト高KVMホストCPU使用率

しばらく前に、Win10 1803 WMがホスト上でCPU使用率を高くすることに気づきました。クライアントのCPU使用率が0%であっても、25%。 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ストレッチ(QEMU 2.8.1/Kernel 4.9)からバスター(QEMU 3.1.0/Kernel 4.19)およびWindows 101809に移行しました。
この問題は、同じハードウェアのStretchで使用できたBusterで<synic state='on'/>を使用できなくなったことに関連している可能性があります。
VM)を起動しようとすると、このエラーが発生します

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
MrCalvin

少なくともQEMU 3.1.0/Kernel 4.19 QEMUマシンタイプ>pc-i440fx-3.0はsynICをサポートしていないようです。これはWindows10ゲストビルドで必要です> = 1803ではありませんホストのCPU使用率が高いという問題があります。

次のマシンタイプをテストしました:
pc-i440fx-2.8(OK)
pc-i440fx-3.0(OK)
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>

UPDATE:
問題だったのは私の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>

Vitaly Kuznetsov 非常に辛抱強く、設定の誤りに気づかせてくれてありがとう。

3
MrCalvin