4.3.2 CPU资源(-c)
CPU资源设置
默认情况下,所有容器获得CPU周期的比例相同。可以通过改变容器的CPU加权占有率相对于其他正在运行容器的加权占有率的比例来调整。
修改1024的比例,使用-c或--cpu-sharesflag的权重设置为2或更高。 该比例只适用在CPU密集型进程运行时。当在一个容器中的任务处于空闲状态,其他容器可以使用剩余空闲CPU时间。实际CPU时间将根据在系统上运行的容器的数目而变化。
例如,考虑三个容器的情况,一个拥有cpu的1024和另外两个有512 CPU共享时间,三个容器进程都尝试使用100%的CPU,第一个容器将获得的50%总的CPU时间。如果您添加CPU值为1024的第四个容器中,第一个容器只得到了CPU的33%。剩余的容器将分别占用CPU的16.5%,16.5%和33%。
在多核心系统中,CPU时间的份额分布在所有CPU核心。即使容器被限制为CPU时间小于100%时,它可以使用每个单独的CPU核心的100%。例如,在一个拥有超过三个核心的系统中,
如果启动一个容器设置-c=512跑一个进程,另外一个设置-c=1024,跑2个进程,内存分配将会如下配置:
PID container CPU CPU share
100 {C0} 0 100% of CPU0
101 {C1} 1 100% of CPU1
102 {C1} 2 100% of CPU2
--cpu-period参数
默认设置为100ms,当然我们也可以自己设置cpu周期,限制容器CPU用量。通常该参数伴随--cpu-quota参数使用。
--cpu-quota参数
限制CPU用量。默认值0,意味着允许容器获得1个CPU的100%的资源量。设置50000限制CPU资源的50%。
$ sudo docker run -ti --cpu-period=50000 --cpu-quota=25000 centos /bin/bash
如果是单核心系统,将意味着容器将每50ms获得50%运行周期。
--cpuset参数
设置容器允许运行的cpu号(在多核心系统中):
设置容器在CPU1和CPU3上运行
$ sudo docker run -ti --cpuset-cpus="1,3" centos /bin/bash
设置容器在CPU0、CPU1、CPU2上运行
$ sudo docker run -ti --cpuset-cpus="0-2" centos /bin/bash
设置容器在指定mems上执行(只在NUMA系统中有效):
容器只能在memory nodes 1和2上运行
$ sudo docker run -ti --cpuset-mems="1,3" centos /bin/bash
--bkio-weight参数
默认情况下,所有容器获得相同比例的blokIO带宽,这个比例值是500。要修改此比例,使用--blkio-weight设置容器的blkio相对于其他运行容器权重。它的取值范围是10~1000。 下面的例子中,设置了两个不同blkio:
$ sudo docker run -ti --name c1 --blkio-weight 300 centos /bin/bash
$ sudo docker run -ti --name c2 --blkio-weight 600 centos /bin/bash
如果同时设置两个容器blockIO,利用如下指令:
$ time dd if=/mnt/zerofile of=test.out bs=1M count=1024 oflag=direct
You’ll find that the proportion of time is the same as the proportion of blkio weights of the two containers.
Note: The blkio weight setting is only available for direct IO. Buffered IO is not currently supported.