• CPU资源设置

    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个进程,内存分配将会如下配置:

    1. PID container CPU CPU share
    2. 100 {C0} 0 100% of CPU0
    3. 101 {C1} 1 100% of CPU1
    4. 102 {C1} 2 100% of CPU2

    —cpu-period参数

    默认设置为100ms,当然我们也可以自己设置cpu周期,限制容器CPU用量。通常该参数伴随—cpu-quota参数使用。

    —cpu-quota参数

    限制CPU用量。默认值0,意味着允许容器获得1个CPU的100%的资源量。设置50000限制CPU资源的50%。

    1. $ sudo docker run -ti --cpu-period=50000 --cpu-quota=25000 centos /bin/bash

    如果是单核心系统,将意味着容器将每50ms获得50%运行周期。

    —cpuset参数

    设置容器允许运行的cpu号(在多核心系统中):

    设置容器在CPU1和CPU3上运行

    1. $ sudo docker run -ti --cpuset-cpus="1,3" centos /bin/bash

    设置容器在CPU0、CPU1、CPU2上运行

    1. $ sudo docker run -ti --cpuset-cpus="0-2" centos /bin/bash

    设置容器在指定mems上执行(只在NUMA系统中有效):

    容器只能在memory nodes 1和2上运行

    1. $ sudo docker run -ti --cpuset-mems="1,3" centos /bin/bash

    —bkio-weight参数

    默认情况下,所有容器获得相同比例的blokIO带宽,这个比例值是500。要修改此比例,使用—blkio-weight设置容器的blkio相对于其他运行容器权重。它的取值范围是10~1000。
    下面的例子中,设置了两个不同blkio:

    1. $ sudo docker run -ti --name c1 --blkio-weight 300 centos /bin/bash
    2. $ sudo docker run -ti --name c2 --blkio-weight 600 centos /bin/bash

    如果同时设置两个容器blockIO,利用如下指令:

    1. $ 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.

    1. Note: The blkio weight setting is only available for direct IO. Buffered IO is not currently supported.