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

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 选择,直至没有任务可选
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值