4. 份额、预留与限制的语义与计算

在 vSphere 的资源管理中,份额(Shares)、预留(Reservation)和限制(Limit)是三个最基础、也最容易被误用的控制参数。它们并非同一维度的“优先级旋钮”,而是分别作用于资源竞争的分配权重、最低保障和最高上限。理解三者在 CPU 与内存上的行为差异,是计算资源池规划与容量治理的核心前提。

三种参数的语义定位

份额只在资源竞争发生时生效。当主机或资源池的可用资源不足以满足所有虚拟机的即时需求时,vSphere 会按照各虚拟机的相对份额比例分配资源。份额本身不保证任何绝对资源量,它只是一个相对权重。份额分为低、中、高三个预设档位,对应 CPU 为 500/1000/2000,内存为 5/10/20,也可以选择“自定义”直接输入数值。

预留是绝对量的最低保障,单位为 MHz(CPU)或 MB(内存)。一旦为虚拟机设置了预留,vSphere 在开机和运行期间都会确保这部分资源可用。CPU 预留影响的是虚拟机的准入控制——如果主机剩余可预留资源不足,虚拟机将无法开机。内存预留则直接决定虚拟机开机时是否消耗主机的物理内存,并影响内存压缩、交换等回收机制的触发时机。

限制是绝对量的最高上限,单位同样为 MHz 或 MB。限制对 CPU 和内存的作用机制有本质区别:CPU 限制通过调度器约束虚拟机的 CPU 时间片分配,超过限制的 CPU 请求会被延迟;内存限制则通过虚拟机监控器限制客户机可用的物理内存上限,超过限制的内存分配请求会触发客户机内部的回收或交换。

份额 / 预留 / 限制 在 CPU 与内存上的行为对比 参数维度 CPU 行为 内存行为 份额 Shares 相对权重 仅竞争时生效 低/中/高 = 500/1000/2000 按份额比例分配 CPU 时间片 不保证绝对 MHz 数 竞争越激烈,权重差异越明显 示例:2:1 份额 → 约 2:1 时间片 按份额比例分配物理内存页 不保证绝对 MB 数 内存超配时决定回收顺序 示例:低/中/高 = 5/10/20 预留 Reservation 绝对最低保障 影响准入控制 单位:MHz / MB 预留不足 → 虚拟机无法开机 预留资源始终可调度 可扩展预留需满足特定条件 示例:预留 2000 MHz 即锁定 2 GHz 预留内存开机即消耗物理内存 预留部分不会被回收/交换 影响主机内存超配比 示例:预留 4096 MB 即锁定 4 GB 限制 Limit 绝对最高上限 硬性封顶 单位:MHz / MB 调度器延迟超限 CPU 请求 限制值过低 → CPU 就绪时间升高 不影响其他虚拟机的可用资源 示例:限制 1000 MHz 即封顶 1 GHz 客户机可用物理内存被限制 超限触发客户机内部回收/交换 限制值过低 → 客户机性能下降 示例:限制 2048 MB 即封顶 2 GB 可扩展预留启用条件:虚拟机快照已删除、未配置内存限制、预留值等于或大于内存大小

CPU 与内存的行为差异

CPU 和内存虽然共用同一套参数名称,但底层机制完全不同。CPU 是时间维度资源,份额决定时间片分配比例,预留保证调度器始终为该虚拟机保留可用的 CPU 周期,限制则约束单位时间内可消耗的 CPU 时间。内存是空间维度资源,份额决定物理页回收的优先级,预留决定开机时锁定的物理内存量,限制则约束客户机可见的物理内存上限。

一个常见的误区是认为“CPU 预留等于性能保障”。实际上,CPU 预留只保证资源可用性,不保证性能。如果虚拟机自身没有足够的 CPU 需求,预留资源会被闲置,无法被其他虚拟机借用。因此,过度预留会导致主机 CPU 利用率下降,降低整合比。内存预留则更为“刚性”——预留的内存从开机起就被锁定,即使客户机空闲也不会释放给其他虚拟机使用。

可扩展预留的启用条件

可扩展预留(Expandable Reservation)是资源池层面的一个选项,允许子资源池在自身预留不足时,向父资源池借用预留资源。它的启用需要满足三个条件:第一,虚拟机快照必须已删除或合并,因为快照会引入额外的内存开销,干扰预留计算;第二,虚拟机不能配置内存限制,因为限制会与可扩展预留的借用逻辑冲突;第三,虚拟机的内存预留值必须等于或大于其配置内存大小,否则可扩展预留无法正确计算可借用空间。

在资源池层级中,如果父资源池勾选了“可扩展预留”,子资源池的预留可以超过父资源池的固定预留,但总预留量不能超过父资源池的可用资源上限。这一机制在多层资源池嵌套时尤为重要,规划不当会导致上层资源池预留被过度占用,影响其他业务单元的准入。

参数组合对资源分配的影响

三种参数的组合会产生截然不同的资源分配效果。以下是一组教学示例参数,用于说明组合逻辑(非实测数据):

虚拟机 CPU 份额 CPU 预留 CPU 限制 内存份额 内存预留 内存限制
VM-A(数据库) 高(2000) 4000 MHz 无 高(20) 8192 MB 无
VM-B(应用服务器) 中(1000) 2000 MHz 4000 MHz 中(10) 4096 MB 8192 MB
VM-C(测试机) 低(500) 0 MHz 2000 MHz 低(5) 0 MB 2048 MB

在这组示例中,VM-A 拥有高份额和高预留,在资源竞争时优先获得 CPU 时间片,且预留资源始终可用;无限制意味着它可以突发占用更多资源。VM-B 设置了 CPU 限制 4000 MHz,即使主机有空闲资源,它也无法超过这个上限,适合需要控制资源消耗但又要保证基本性能的场景。VM-C 没有预留,份额最低,限制也最低,在资源紧张时会被优先压缩,适合非关键测试负载。

规划建议:预留用于保障关键业务的最低资源底线,限制用于防止非关键业务过度消耗资源,份额用于在竞争时区分优先级。三者应配合使用,而不是单独依赖某一个参数。对于数据库等延迟敏感型负载,建议设置较高的 CPU 和内存预留,并谨慎设置限制;对于测试或开发负载,建议设置较低份额和明确限制,避免影响生产业务。
注意:内存限制设置过低会导致客户机操作系统频繁触发内存回收,表现为客户机内部交换增加、应用响应变慢。CPU 限制设置过低则会导致 CPU 就绪时间(Ready Time)升高,虚拟机虽然“在运行”,但实际获得的 CPU 时间远低于需求。在调整限制前,应通过 vSphere 性能图表观察 CPU 就绪时间和内存交换率,确认限制值是否合理。

实际配置中的判断依据

在 vSphere Client 中配置这些参数时,可以通过以下路径观察效果:选中虚拟机 → 监控 → 性能 → 高级,查看 CPU 就绪时间、内存交换率、内存压缩率等指标。如果 CPU 就绪时间持续高于 5%,说明 CPU 资源竞争激烈,可能需要调整份额或增加预留;如果内存交换率持续高于 0,说明主机内存超配过度,需要降低内存预留或增加物理内存。

对于资源池的容量治理,建议定期检查各资源池的预留总量与主机可用资源的关系。如果所有子资源池的预留之和接近主机总资源,说明预留配置过于激进,可能导致新虚拟机无法开机。此时应重新评估哪些虚拟机真正需要预留,哪些可以通过份额来区分优先级。

份额、预留与限制不是孤立的配置项,它们共同构成 vSphere 资源分配的语义体系。理解三者在 CPU 和内存上的不同行为,掌握可扩展预留的启用条件,才能在实际规划中做出合理的参数组合决策,既保障关键业务的资源底线,又避免资源浪费和性能瓶颈。