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>

매우 감사합니다비탈리 쿠즈네초프인내심을 갖고 잘못된 구성을 알려주셔서 감사합니다.

관련 정보