一些libvirt配置备忘,针对Windows guest,虚拟机游戏场景
虚拟化功能选项
取自cockpit-machine生成的Windows 10 guest配置
<features>
<acpi/>
<apic/>
<hyperv mode='custom'>
<relaxed state='on'/>
<vapic state='on'/>
<spinlocks state='on' retries='8191'/>
<vpindex state='on'/>
<runtime state='on'/>
<synic state='on'/>
<stimer state='on'/>
<frequencies state='on'/>
<tlbflush state='on'/>
<ipi state='on'/>
<evmcs state='on'/>
<avic state='on'/>
</hyperv>
<vmport state='off'/>
</features>
CPU feature设置
在CPU节加入一些神奇的选项可以提高CPU-Z跑分,在我的E-2378的单核从450提升到500,物理机为540左右
<cpu mode='host-passthrough' check='none' migratable='on'>
<topology sockets='1' dies='1' clusters='1' cores='8' threads='2'/> <!--以实际情况为准-->
<feature policy='require' name='topoext'/>
<feature policy='disable' name='vmx'/>
<feature policy='disable' name='svm'/>
<feature policy='require' name='apic'/>
<feature policy='require' name='hypervisor'/>
<feature policy='require' name='invtsc'/>
</cpu>
超线程和 CPU Pinning
首先使用lscpu -e查看宿主机超线程CPU序号拓扑,一般是前半都是t0(每个物理核的0号线程),后半都是t1,然后将同一物理核心的宿主机CPU序号分配到相邻的vcpu上,似乎这样在Windows虚拟机中顺序才是正确的(有待进一步验证):
<vcpu placement='static'>16</vcpu>
<cputune>
<vcpupin vcpu='0' cpuset='0'/>
<vcpupin vcpu='1' cpuset='8'/>
<vcpupin vcpu='2' cpuset='1'/>
<vcpupin vcpu='3' cpuset='9'/>
<vcpupin vcpu='4' cpuset='2'/>
<vcpupin vcpu='5' cpuset='10'/>
<vcpupin vcpu='6' cpuset='3'/>
<vcpupin vcpu='7' cpuset='11'/>
<vcpupin vcpu='8' cpuset='4'/>
<vcpupin vcpu='9' cpuset='12'/>
<vcpupin vcpu='10' cpuset='5'/>
<vcpupin vcpu='11' cpuset='13'/>
<vcpupin vcpu='12' cpuset='6'/>
<vcpupin vcpu='13' cpuset='14'/>
<vcpupin vcpu='14' cpuset='7'/>
<vcpupin vcpu='15' cpuset='15'/>
</cputune>
宿主机优化(可选)
tuned profile选择virtual-host
qemu自动用透明内存大页,也可以显示用手动内存大页,但不足时虚拟机无法启动