@CPU资源控制
CPU资源的控制也有两种策略,
一种是完全公平调度(CFS:Completely Fair Scheduler)策略,提供了限额和按比例分配两种方式进行资源控制;
另一种是实时调度(Real-Time Scheduler)策略,针对实时进程按周期分配固定的运行时间。配置时间都以微秒(s)为单位,文件名中用us表示。
CFS调度策略下的配置
按权重比例设定CPU的分配
docker提供了–cpu-shares参数,在创建容器时指定容器所使用的CPU份额值。例如:
使用命令docker run -tid –-cpu-shares 100 镜像,创建容器,则最终生成的cgroup的cpu份额配置可以下面的文件中找到:
cat /sys/fs/cgroup/cpu/system.slice/docker-<容器的完整长
ID>/cpu.shares
技术分享
cpu-shares的值不能保证可以获得1个vcpu或者多少GHz的CPU资源,仅仅只是一个加权值。
该加权值是一个整数(必须大于等于2)表示相对权重,最后除以权重总和算出相对比例,按比例分配CPU时间。
默认情况下,每个docker容器的cpu份额都是1024。单独一个容器的份额是没有意义的,只有在同时运行多个容器时,容器的cpu加权的效果才能体现出来。例如,两个容器A、B的cpu份额分别为1000和500,在cpu进行时间片分配的时候,容器A比容器B多一倍的机会获得CPU的时间片。如果容器A的进程一直是空闲的,那么容器B是可以获取比容器A更多的CPU时间片的。极端情况下,比如说主机上只运行了一个容器,即使它的cpu份额只有50,它也可以独占整个主机的cpu资源。
cgroups只在容器分配的资源紧缺时,也就是说在需要对容器使用的资源进行限制时,才会生效。因此,无法单纯根据某个容器的cpu份额来确定有多少cpu资源分配给它,资源分配结果取决于同时运行的其他容器的cpu分配和容器中进程运行情况。
CPU占比为1024/(1024+512)=2/3,container2的CPU占比为512/(1024+512)=1/3