【问题标题】:Mixing cpu-shares and cpuset-cpus in Docker在 Docker 中混合 cpu-shares 和 cpuset-cpus
【发布时间】:2016-04-13 01:29:22
【问题描述】:

我想运行两个具有以下资源分配的容器:

  • 容器“C1”:保留 cpu1,与 20 个 cpu-shares 共享 cpu2
  • 容器“C2”:保留 cpu3,与 80 个 cpu-shares 共享 cpu2

如果我这样运行这两个容器:

docker run -d --name='C1' --cpu-shares=20 --cpuset-cpus="1,2" progrium/stress --cpu 2

docker run -d --name='C2' --cpu-shares=80 --cpuset-cpus="2,3" progrium/stress --cpu 2

我知道 C1 像预期的那样占用了 100% 的 cpu1,但占用了 cpu2 的 50%(而不是 20%),C2 像预期的那样占用了 100% 的 cpu3 和 50% 的 cpu2(而不是 80%)。

看起来 --cpu-shares 选项被忽略了。 有没有办法获得我正在寻找的行为?

【问题讨论】:

    标签: docker containers resource-management cpu-cores


    【解决方案1】:

    docker run 提到该参数为:

    --cpu-shares=0                CPU shares (relative weight)
    

    而contrib/completion/zsh/_docker#L452 包括:

    "($help)--cpu-shares=[CPU shares (relative weight)]:CPU shares:(0 10 100 200 500 800 1000)"
    

    所以这些值不是基于 % 的。

    OP 提到 --cpu-shares=20/80 与以下 Cpuset constraints 一起使用:

     docker run -ti --cpuset-cpus="0,1" C1 # instead of 1,2
     docker run -ti --cpuset-cpus="3,4" C2 # instead of 2,3
    

    (这些值为validated/checked only since docker 1.9.1 with PR 16159)

    注意:还有CPU quota constraint:

    --cpu-quota 标志限制容器的 CPU 使用率。默认值 0 允许容器占用 100% 的 CPU 资源(1 个 CPU)。

    【讨论】:

    • 我知道,我使用 20 和 80 来简化场景。因为我只有两个容器同时需要 100% 的 cpu(压力),并且份额设置为 20 和 80,所以它们应该在共享 cpu(cpu2)上分别以 20% 和 80% 运行。当然,我可以使用 4 和 16 或 80 和 320 之类的东西。
    • 不,我的意思是这些值可能无法被识别。试试 200 和 800 看看是否效果更好。
    • @GiovanniQuattrocchi 如果你颠倒这些值? (800 和 200 而不是 200 和 800)
    • 我不知道为什么,但是如果对 C1 使用 cpuset-cpus=0,1 对 C2 使用 cpuset-cpus=1,2 我得到了预期的行为......
    • @GiovanniQuattrocchi 你用的是什么版本的 docker?
    猜你喜欢
    • 2021-01-31
    • 2022-01-16
    • 2017-03-22
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    相关资源
    最近更新 更多