我配置了一个 32 核(双 Intel Xeon 处理器 E5-2698 v3)和 128GB RAM,运行 CentOS 7 作为主机操作系统。
在使用 Windows 7 Professional 客户端运行 VM VirtualBox 时,指定超过 16 个核心会导致启动非常慢(20 个核心)、启动失败(超过 24 个)或系统在启动后锁定(20 个)。
然而客户端在 16 核上相对稳定。
此限制的根源是什么?请注意,系统正在使用超线程运行,向主机操作系统公开 64 个内核。
答案1
Windows 7 家庭版还是专业版?
家庭版仅支持 1 个 CPU 插槽,专业版则支持 2 个。32
位版本的 Win7 可以使用 32 个(真正的,而非超线程核心),64 位可以使用 256 个。
所以我猜你使用的是 Home,但高于 16 的它们来自两个 CPU,这会导致不稳定。
答案2
首先说明一下:你没有 32 核的计算机,而是 16 核的计算机, 超线程。这些线程是轻量级半核,不具备与真实核心相同的功能。在英特尔文档中,超线程据说最多可将性能提高 30%,因为某些 CPU 部件是其两个超线程所独有且通用的,因此需要等待。
其次,关于 VirtualBox 的虚拟 vCPU 有一点需要说明:它们不是真正的核心,也不使用真正的核心。它们只是由主机模拟器启动的线程,每个线程的行为都有点像 VM 的核心。
因此,对于 20 核 VM,您实际上拥有的是一个主机进程 VirtualBox,具有 20 个线程。VM 本身是一个操作系统,可能有数百个活动进程运行操作系统及其模拟硬件,所有进程都使用它认为是真实核心的 vCPU。
由于有如此多的活动线程,线程切换开始成为一个重要因素,从而减慢了主机操作系统的速度。性能则取决于主机调度算法的效率以及它们处理活动线程数的能力。
为了性能,我能给出的最好建议可能有点严厉:
在 BIOS 中关闭超线程(如果可能),这样核心就是真实的物理核心,而不是虚拟的半虚构核心
不要为虚拟机分配超过该数量的核心。超过该数量只意味着某些 vCPU 将在任何给定时刻处于空闲状态,并且上下文切换将成为更重要的因素。
更新到 Windows 10,它具有更好的调度算法。