当 docker 容器在 v1 中运行时,我们只需在运行命令中传递
--cpu-shares
值,众所周知,在 cgroup v2 中,我们没有 cpu.shares
旋钮可用,它被替换为 cpu.weight
。
在 cgroup v1 中,
cpu.shares
的默认值为 1024,对于 docker 交换机 --cpu-shares
来说也是如此,到目前为止,我认为它们都是相等的。
现在,在 cgroup v2 中,
cpu.shares
已替换为 cpu.weight
,cpu.weight
的默认值为 100000。
我的问题:运行 docker 容器时如何通过
cpu.weight
?甚至支持吗?如果是这样,我们如何有效地将 cpu.weight
等同于 --cpu-shares
?
附注我是 Docker 和容器化技术的新手,所以请原谅我在描述中犯的任何基本错误。
TL;DR:将
--cpu-shares
与 [2, 262144]
范围内的值一起使用,就像使用 cgroup v1 一样。任何理智的 OCI 运行时实现都会为您进行从 v1 cpu.shares
到 v2 cpu.weight
的正确值转换。
OCI 运行时规范是根据 cgroups v1 编写的,因此没有明确定义在这种情况下 cgroups v2 应该发生什么。然而,正常的 OCI 运行时实现应该能够轻松地从范围为
cpu.shares
的 v1 [2, 262144]
转换为范围为 cpu.weight
的 v2 [1, 10000]
。转换很简单:
cpu.weight = (1 + ((cpu.shares - 2) * 9999) / 262142)
据我所知,此处列出的大多数容器 OCI 运行时实现都是这样做的。只需在源代码中查找神奇值262142
即可轻松检查。如果您使用的是 Linux 并按照 Docker 文档中的
安装说明安装了 Docker,那么您正在使用 opencontainers/runc
。这是一个快速参考列表: