我正在尝试寻找一些关于为每个物理核心(CPU 的)配置 vCPU 的虚拟化文档或最佳实践指南。如果有必要,我正在研究 vmWare 的虚拟化实现。例如,Intel Xeon CPU 可能有 4 个、8 个等核心。我有兴趣了解更多有关为每个物理核心配置一个 vCPU 以外的配置的信息。与我交谈的供应商肯定认为可以将单个核心配置为多个 vCPU。
到目前为止,我在研究中经常看到的说法是:“嗯,这取决于你的应用程序。”在这种情况下,我的应用程序正在编辑代码、编译/链接、测试和配置管理。当然,并非所有虚拟机都需要为每个核心配置多个 vCPU,但一般情况下都是如此。
答案1
单个物理 CPU 可用作多个 vCPU。在虚拟化解决方案中,您很少会耗尽 CPU 资源。RAM 和存储始终是限制因素...
请记住,在 VMware 中,CPU 利用率以使用的 MHz 表示,而不是核心数...除非您将所有虚拟 CPU 都设置为 100%一直如此,我认为你的供应商不正确。
让我们看看以下系统集群...
- 9 个 ESXi 主机。
- 160 台虚拟机
- 整个集群有 104 个物理 CPU 核心。
- 平均虚拟机配置为:4 vCPU 和 4GB 到 18GB RAM。
- CPU 可以安全地超额认购……但请记住,它也可能有限、保留、优先在虚拟机级别。
来自另一个活动集群 - 3 个主机 42 个虚拟机
答案2
扩展一下 ewwhite 的文章,除非您的应用程序可以明确利用多个 vCPU 或每个 vCPU 有多个核心,否则为虚拟机分配多个 vCPU/核心绝对没有任何好处。事实上,与在分配了一个核心的单个 vCPU 上运行相比,您最终的性能往往更低,部分原因是运行多个 vCPU 需要调度开销。
值得一提的是,在 VDI 设置中,经常引用的数字是每个物理核心 5 个 vCPU。当然,这是考虑到办公室桌面的。如果您的虚拟机一直忙于编译代码,您可能无法在每个物理核心上安装 5 个 vCPU。
之所以有这么多人说“视情况而定”,是因为情况确实如此。查看您的 CPU Ready 值,然后决定是否可以在特定系统上增加 CPU 负载。CPU Ready 是衡量 vCPU 是否准备好执行命令但必须等待物理 CPU 时间可用。
就你的情况而言,如果你正在编译大型程序,你的虚拟机很可能需要大量的 CPU 时间。正如 ewwhite 所指出的,虚拟化通常受磁盘 I/O 和 RAM 限制,而不是受 CPU 限制。
答案3
底层问题与物理系统上的进程调度基本相同。只要系统负载低于内核数量(或者在超线程的情况下甚至低于逻辑处理器数量),一切就都很好,处理器可以处理负载。
因此,只要所有使用的 vCPU 上的并发负载不超过物理核心可以处理的负载,一切就都好。
对于您的需求,只有编译是一项 CPU 密集型工作,只是偶尔需要。对于编译器虚拟机,我们分配尽可能多的 CPU。因此,如果需要编译,它将尽快完成(如果您的编译器支持并行编译)。
对于处于恒定负载下的编译器虚拟机来说,这可能并非如此(例如,如果您提供互联网服务来进行编译并且该服务正在不断使用)。
答案4
我见过的一条经验法则(可能是在 VMware 的文档中)是不要为虚拟机分配比主机上物理存在的核心更多的核心,因为这会导致在单个核心上模拟多个 vCore,从而增加不必要的开销。