当前位置: 首页 > 工具软件 > A-shares > 使用案例 >

cpu.cfs_quote_us 和 cpu.shares 同时使用的效果

壤驷安和
2023-12-01

Ceiling enforcement can be used for cases when a hard limit on the amount of CPU that a cgroup can utilize is required

当一个资源组里,同时设置了 cfs_quote_us 和 shares,会怎样呢?

下面通过场景来回答这个问题。

场景 1

假设系统有3 个 CPU 核,有2个资源组 A、B,配置如下:

A.shares : B.shares = 2:1

A 用 2 个 CPU、B 用 1 个 CPU,把系统压满了。这是,增加如下设置:

A.cfs_quote_us = 100ms
A.cfs_period_us = 100ms

这时,A 只能用 1 个 CPU 了。而 B 呢?因为还有空闲 CPU,B 会用满 2 个 CPU。

场景 2

假设系统有 4 个 CPU 核,有 3 个资源组 A、B、C,配置如下:

A.shares : B.shares : C.shares = 2:1:1

A 用 2 个 CPU、B 用 1 个 CPU、C 用 1 个 CPU,把系统压满了。这是,增加如下设置:

A.cfs_quote_us = 100ms
A.cfs_period_us = 100ms

这时,A 只能用 1 个 CPU 了。而 B、C 呢?B 会用 1.5 个 CPU、C 会用 1.5 个 CPU。

所以说,当资源组的资源被 quota 限制住后,它就不再参与 share 竞争了,剩下的资源由其它 share 之间瓜分。

从 CPU 调度的角度看,这个很好理解。CPU 有一个时间片,它会去决策调度 A、B、C,那么它发现 A 无法被调度,那么它就要从 B、C 里面选,而考虑到 shares 的规范,B 和 C 有相同的概率被选中,于是就相当于 B、C 会平分资源。假设 B 上面已经没有更多任务了,那么就只剩下 C 可以参与调度,那么这时候 C 实际能拿到的 CPU 就比 1.5 还多。

CPU 的原则:

  1. 有一个时间片,就一定要花出去。有任务调度,就去调度任务;没任务调度,就 idle。
  2. 调度任务的原则,先根据 share 选任务,选中的任务超出了 quota,则再剩余任务里按照 share 选择,直至没有任务可选
 类似资料: