在Docker中混合cpu-shares和cpuset-cpus
我想运行两个容器与以下资源分配:
- 容器“C1”:保留cpu1,共享cpu2和20个cpu-shares
- 容器“C2”:保留cpu3,共享cpu2,共80个cpu-shares
如果我以这种方式运行这两个容器:
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如预期的那样占用了cpu1的100%,但cpu2占50%(而不是20%),C2占据了cpu3的100%,cpu2占了50%(而不是80%)。
它看起来像–cpu-shares选项被忽略。 有没有办法获得我正在寻找的行为?
docker运行提到该参数为:
--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
20/80与以下Cpuset约束一起工作 :
docker run -ti --cpuset-cpus="0,1" C1 # instead of 1,2 docker run -ti --cpuset-cpus="3,4" C2 # instead of 2,3
(这些值仅在docker 1.9.1和PR 16159之后才被validation/检查 )
注意:也有CPU配额限制 :
--cpu-quota
标志限制了容器的CPU使用率。 默认的0值允许容器占用100%的CPU资源(1个CPU)。