Answers:
根据克里斯蒂安·韦德伯格(Kristian Wedberg)所做的基准测试,我想您应该使用所有拥有的逻辑核心。
另外,我使用相同的CPU(i7,带HT的4 CPU)进行了自己的基准测试,确认了多线程应用程序的性能提高。如果来宾PC(Win。8.1 x64)使用了全部8个核心,则主机PC(Ubuntu x64)也使用了全部8个核心。
我还比较了单线程应用程序中的性能。在这两种情况下,我都测量了相同的值,因此使用物理(而不是逻辑)数量的CPU不会造成任何损失。
在这里您可以看到,来宾PC中的1 CPU满负载将导致主机PC中的1 CPU负载。
我发现,即使在VirtualBox(我的经验是在5.1.0版中)中有可能(并且可以说是更快)将vCPU分配给基于逻辑处理器的VM,但在高负载下运行时,来宾OS内可能会遇到问题。在我的情况下,如果Windows 2012 R2 VM在8核Ubuntu 16.04主机(报告16个逻辑处理器)上具有12个vCPU,则会在CPU负载过高时出现BSOD,并显示DPC_WATCHDOG_VIOLATION错误消息。使用osronline.com进行的小型转储分析表明,e1g6032e.sys(Windows固有的Intel 100/1000网络驱动程序)是造成此问题的原因。
这使我相信,在基于逻辑处理器容量分配vCPU并长时间长时间高负载运行VM时,来宾OS内的时序会受到负面影响。就我而言,Windows VM内部100%CPU负载持续几分钟会导致BSOD。将vCPU数量减少到8(对应于主机的物理核心数量)后,Windows VM在类似的高负载情况下不再进行BSOD。VirtualBox 的在线文档说应该这样做,但没有提供任何原因。
在我的环境中,还运行着另外两个Ubuntu VM,每个VM都有自己的8个vCPU。但是,在Windows VM出现BSOD问题时,它们的负载很小。
我得到的警告是否考虑到我的计算机具有超线程?
是。如果将VM中的核心数设置为大于物理上的核心数,则Virtual Box中的任务调度过程会过度分配CPU资源,从而导致严重的性能问题。
至于跨内核分配负载,这是主机OS的工作,并且应该在正确的庄园中运行。