2. vSphere计算资源模型
要谈容量治理,先得把“资源”这件事看清楚。vSphere 并不是把物理服务器的 CPU 和内存简单地“切块”分给虚拟机,而是通过一层抽象,把物理资源转换成可被调度、可被限制、可被共享的逻辑资源。理解这层抽象,是后续所有容量计算、资源池划分和争用排查的基础。
一、CPU 的资源抽象:从物理核心到 vCPU 与 MHz
物理层面,一台 ESXi 主机提供的是若干物理 CPU 插槽(Socket),每个插槽内有多个物理核心(Core),开启超线程后每个核心呈现为两个逻辑处理器(Logical Processor)。例如一台双路 16 核、开启超线程的主机,逻辑处理器数量为 2×16×2=64。这是主机对虚拟机暴露的“可调度执行单元”总量。
虚拟层面,虚拟机看到的是 vCPU。vCPU 不是物理核心的独占映射,而是一个由 VMkernel 调度的执行上下文。当虚拟机需要执行指令时,VMkernel 的 CPU 调度器把它的 vCPU 放到某个物理逻辑处理器上运行。因此 vCPU 与物理核心之间是“多对多、按时间片共享”的关系,而不是一一绑定。
容量规划中更常用的抽象单位是 MHz。每台主机的物理 CPU 有一个基准频率,例如 2.4 GHz,则单逻辑处理器约 2400 MHz,64 个逻辑处理器合计约 153600 MHz 的“理论算力”。虚拟机的 vCPU 也有一个可配置的“预留/限制”值,单位同样是 MHz。这样物理算力和虚拟需求就统一到了同一量纲上,便于做超配比计算。
二、内存的资源抽象:从物理 DIMM 到虚拟机内存
内存的抽象比 CPU 更“实”一些。物理内存由主板上的 DIMM 提供,例如 12×32 GB=384 GB。ESXi 启动后自身占用一部分(通常几 GB),剩余部分构成 VMkernel 可分配的内存池。
虚拟机配置的内存(Configured Memory)是它“认为自己拥有的内存”,但 VMkernel 并不一定为它保留等量的物理页。这里涉及几个关键机制:
- 预留(Reservation):为虚拟机锁定一部分物理内存,保证任何时候都能拿到,代价是这部分内存不能被其他虚拟机复用。
- 限制(Limit):限制虚拟机最多能使用的物理内存,超过部分即使主机有空闲也不给。
- 份额(Shares):在内存紧张时决定分配优先级的相对权重,分为高/中/低三档,也可自定义数值。
- 透明页共享(TPS):把多个虚拟机中内容相同的内存页合并为一份,减少物理占用。
- 内存气球(Ballooning):主机内存紧张时,通过气球驱动“回收”虚拟机内部不常用的页,让客户机自己换出到自己的交换空间。
- 交换(Swap):当气球回收不足时,VMkernel 把虚拟机的内存页写到主机上的交换文件,代价最高。
因此,内存的“物理—虚拟”关系不是简单的除法,而是“配置量、预留、实际工作集、共享、回收”共同作用的结果。规划时更应关注活跃内存(Active Memory)和内存压缩/交换速率,而不是只看配置总量。
三、资源争用与调度机制
争用发生在“需求超过供给”的时刻。CPU 侧的典型信号是就绪时间升高:vCPU 想运行却排不到物理处理器,虚拟机内部表现为应用变慢,但 CPU 使用率看起来并不高。内存侧的典型信号是气球回收和交换活动增加,主机内存使用率长期高于 90%,虚拟机内部出现换页抖动。
VMkernel 的调度遵循“按份额分配、按预留保障、按限制封顶”的原则。当资源充足时,所有虚拟机都能拿到所需资源,份额不起作用;当资源紧张时,份额决定谁优先获得,预留保证关键虚拟机不被饿死,限制则防止个别虚拟机过度占用。这就是为什么“给关键业务设预留、给非关键业务设限制”是常见的治理手段。
四、资源池在 DRS 集群中的层级位置
在 vSphere 中,资源池不是孤立存在的,它嵌在一条清晰的层级链上:数据中心 → 集群 → 主机 → 资源池 → 虚拟机。DRS 集群本身就是一个根资源池,集群内所有主机提供的 CPU 和内存汇总为集群级资源池。管理员可以在根资源池下创建子资源池,例如“生产池”“测试池”,再在子池下继续细分。
这个层级决定了资源的继承规则:子资源池的份额、预留和限制是相对于父资源池而言的。父池的容量上限会约束子池能拿到的资源总量。因此,资源池划分本质上是在做“资源隔离与优先级声明”,而不是简单地给虚拟机分组。
DRS 在这个层级中扮演两个角色:一是初始放置,虚拟机开机时选择负载合适的主机;二是动态平衡,当某台主机资源紧张时,通过 vMotion 把虚拟机迁到较空闲的主机。资源池的配置会影响 DRS 的决策——例如设置了高预留的资源池,DRS 会优先保证其资源可用性。
五、一个可参考的容量判断示例
假设一个 DRS 集群有 4 台主机,每台 2×16 核开启超线程、384 GB 内存。集群总逻辑处理器为 4×64=256,总内存为 4×384=1536 GB,扣除每台约 6 GB 的 VMkernel 开销后,可用内存约 1512 GB。
若当前运行 60 台虚拟机,平均每台 4 vCPU、16 GB 内存,则 vCPU 总需求为 240,CPU 超配比约 240÷256≈0.94;内存总配置为 960 GB,内存超配比约 960÷1512≈0.63。从配置看并不紧张。但如果监控显示主机 CPU 就绪时间持续高于 5%、内存气球回收量持续增长,说明实际工作集已经接近物理上限,此时应优先考虑增加主机或调整资源池份额,而不是继续提高超配比。
把 CPU 和内存的抽象关系、争用信号和资源池层级放在一起看,就能理解 vSphere 容量治理的核心逻辑:物理资源是有限的,虚拟资源是可编排的,而调度机制决定了在有限供给下如何公平且可控地分配。后续的资源池规划、份额设计和 DRS 规则配置,都建立在这一模型之上。