在Docker中混合cpu-shares和cpuset-cpus

时间:2016-01-08 11:17:37

标签: docker containers resource-management cpu-cores

我想使用以下资源分配运行两个容器:

  • Container“C1”:保留cpu1,共享cpu2,包含20个cpu-shares
  • Container“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取c 100的100%作为预期,但50%的cpu2(而不是20%),C2取c 100预期的100%和cpu2的50%(而不是80%)。

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

1 个答案:

答案 0 :(得分: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)。