ESXi Server具有高级CPU调度程序,旨在为在Intel / AMD x86架构上运行的VM提供高性能,公平性和隔离性。
ESXi CPU调度程序的设计具有以下目标:
- 性能隔离:多VM公平性
- Coscheduling:所有vCPU同时在线的错觉
- 性能:高吞吐量,低延迟,高可扩展性和低开销
- 功效:在不损失性能的情况下节省功率
- 广泛采用:在各种处理器架构上实现所有优化
在任何给定的瞬间,每个CPU只能有一个活动进程; 例如,多个vCPU可以在同一个pCPU上运行,而不是在一个实例中运行,有多个进程而不是CPU。因此,将发生排队,并且调度程序将负责控制队列,处理优先级以及抢占CPU的使用。
CPU调度程序的主要任务是选择将哪个world调度到处理器。为了给每个world提供运行的机会,调度程序专用一个时间片(也称为一个world可以执行的持续时间(通常为10-20毫秒,默认情况下VMkernel为50))到每个进程然后迁移运行,等待,共同停止和准备之间的world状态。
ESXi实现基于比例共享的算法。它将每个world与所有VM中的CPU资源份额相关联。这称为权利,根据用户提供的资源规范(例如共享,预留和限制)计算。
在vSphere中如何实现
1.打开vSphere Web Client。
2.在主屏幕上,导航到“ 主机和群集”。
3.展开左侧导航列表。
4.在VM清单中,右键单击虚拟机,然后单击“ 编辑设置”。将出现“ 虚拟机编辑设置”对话框。
5.单击VM Options选项卡。
6.在“ 高级”部分下,单击“ 编辑配置”。
![378c4c9794152baf3d28d892059bd799.png](https://i-blog.csdnimg.cn/blog_migrate/33fe0fa280c8925120009566fb55bba9.jpeg)
7.在底部,输入sched.cpu.vsmpConsolidate作为名称,True为值,然后单击添加。
8.最终屏幕应该如下截图所示。获得此信息后,单击“ 确定”保存设置:
![f3ea0871c2933e8c6cf068c7191377e3.png](https://i-blog.csdnimg.cn/blog_migrate/525ebe912957621c9cd71d9f47b25990.jpeg)
如何工作的
CPU调度程序使用处理器拓扑信息来优化vCPU在不同套接字上的位置。
单个套接字内的核心通常使用共享的最后一级缓存。如果CPU运行内存密集型工作负载,则使用共享的最后一级缓存可以提高vCPU性能。
默认情况下,CPU调度程序将负载分散到欠承诺系统中的所有套接字。这可以通过最大化正在运行的vCPU可用的缓存总量来提高性能。对于此类工作负载,即使ESXi主机处于提交状态,使用共享的最后一级缓存在同一套接字上安排所有vCPU也是有益的。在这种情况下,您可以通过在VM的VMX配置文件中包含以下配置选项来覆盖跨包传播vCPU的默认行为:sched.cpu.vsmpConsolidate=TRUE。但是,通常最好坚持使用默认行为。