目录

指定docker容器可以使用的cpu份额

#查看配置份额的帮助命令

[root@xianchaomaster1~]#dockerrun--help|grepcpu-shares

cpu配额参数:-c,--cpu-sharesint

CPUshares(relativeweight)在创建容器时指定容器所使用的CPU份额值。cpu-shares的值不能保证可以获得1个vcpu或则多少GHz的CPU资源linux系统安装,仅仅只是一个弹性的加残差。

默认每位docker容器的cpu份额值都是1024。在同一个CPU核心上,同时运行多个容器时,容器的cpu加权的疗效能够彰显下来。

例:两个容器A、B的cpu份额分别为1000和500,结果会如何样?

情况1:A和B正常运行,占用同一个CPU,在cpu进行时间片分配的时侯,容器A比容器B多一倍的机会获得CPU的时间片。

情况2:分配的结果取决于当时其他容器的运行状态。例如容器A的进程仍然是空闲的,这么容器B是可以获取比容器A更多的CPU时间片的;例如主机上只运行了一个容器,虽然它的cpu份额只有50,它也可以独占整个主机的cpu资源。

cgroups只在多个容器同时争抢同一个cpu资源时,cpu配额才能生效。为此,难以单纯依据某个容器的cpu份额来确定有多少cpu资源分配给它,资源分配结果取决于同时运行的其他容器的cpu分配和容器中进程运行情况。

例1:给容器实例分配512权重的cpu使用份额

docker 配置_配置docker加速器_配置docker国内镜像源

参数:--cpu-shares512

[root@xianchaomaster1~]#dockerrun-it--cpu-shares512centos/bin/bash

[root@df176dd75bd4/]#cat/sys/fs/cgroup/cpu/cpu.shares#查看结果:

512

注:稍后,我们启动多个容器,测试一下是不是只能使用512份额的cpu资源。单独一个容器,看不下来使用的cpu的比列。因没有docker实例同此docker实例竞争。

总结:

通过-c设置的cpushare并不是CPU资源的绝对数目docker 配置linux命令tar,而是一个相对的权重值。某个容器最终能分配到的CPU资源取决于它的cpushare占所有容器cpushare总和的比列。通过cpushare可以设置容器使用CPU的优先级。

例如在host中启动了两个容器:

dockerrun--name”container_A”-c1024ubuntu

dockerrun--name”container_B”-c512ubuntu

container_A的cpushare1024,是container_B的两倍。当两个容器都须要CPU资源时,container_A可以得到的CPU是container_B的两倍。

配置docker国内镜像源_docker 配置_配置docker加速器

须要注意的是,这些按权重分配CPU只会发生在CPU资源紧张的情况下。假如container_A处于空闲状态,为了充分借助CPU资源,container_B也可以分配到全部可用的CPU。

CPUcore核心控制

参数:--cpuset可以绑定CPU

对多核CPU的服务器,docker还可以控制容器运行限定使用什么cpu内核和显存节点,即使用--cpuset-cpus和--cpuset-mems参数。对具有NUMA拓扑(具有多CPU、多显存节点)的服务器尤其有用,可以对须要高性能估算的容器进行性能最优的配置。假如服务器只有一个显存节点,则--cpuset-mems的配置基本上不会有显著疗效。

例:

linux可通过lscpu查看存在的CPU

dockerrun-itd--cpuset-cpus0,1,2,3centos:stress/bin/bash

或则

dockerrun-itd--cpuset-cpus0-3centos:stress/bin/bash

该容器内的进程只会在0,1,2,3,的CPU上运行

扩充:

配置docker加速器_配置docker国内镜像源_docker 配置

服务器构架通常分:SMP、NUMA、MPP体系结构介绍

从系统构架来看,目前的商用服务器大体可以分为三类:

1.即对称多处理器结构(SMP:SymmetricMulti-Processor)例:x86服务器,双路服务器。显卡上有两个数学cpu

2.非一致储存访问结构(NUMA:Non-UniformMemoryAccess)例:IBM大型机pSeries690

3.海量并行处理结构(MPP:MassiveParallelProcessing)。例:小型机Z14

CPU配额控制参数的混和使用

在里面那些参数中,cpu-shares控制只发生在容器竞争同一个cpu的时间片时有效。

假如通过cpuset-cpus指定容器A使用cpu0,容器B只是用cpu1,在主机上只有这两个容器使用对应内核的情况,它们各自占用全部的内核资源,cpu-shares没有显著疗效。

怎么能够有疗效?

容器A和容器B配置上cpuset-cpus值并都绑定到同一个cpu上,之后同时占据cpu资源,就可以看出疗效了。

例1:测试cpu-shares和cpuset-cpus混和使用运行疗效,就须要一个压缩力测试工具stress来让容器实例把cpu跑满。

docker 配置_配置docker国内镜像源_配置docker加速器

怎样把cpu跑满?

怎样把4核心的cpu中第一和第三核心跑满?可以运行stress,之后使用taskset绑定一下cpu。

先扩充:stress命令

概述:linux系统压力测试软件Stress。

[root@xianchaomaster1~]#yuminstall-yepel-release

[root@xianchaomaster1~]#yuminstallstress-y

stress参数解释

-?显示帮助信息

-v显示版本号

-q不显示运行信息

-n显示已完成的指令情况

配置docker国内镜像源_docker 配置_配置docker加速器

-t--timeoutN指定运行N秒后停止

--backoffN等待N微妙后开始运行

-c形成n个进程:每位进程都反复不停的估算随机数的平方根,测试cpu

-i形成n个进程:每位进程反复调用sync(),sync()用于将显存上的内容讲到硬碟上,测试c盘io

-m--vmn形成n个进程,每位进程不断调用显存分配malloc()和显存释放free()函数docker 配置,测试显存

--vm-bytesB指定malloc时显存的字节数(默认256MB)

--vm-hangN指定在free栈的秒数

-d--haddn形成n个执行write和unlink函数的进程

-hadd-bytesB指定写的字节数

--hadd-noclean不unlink

注:时间单位可以为秒s,分m,小时h,天d,年y,文件大小单位可以为K,M,G

例1:形成2个cpu进程,2个io进程,20秒后停止运行

[root@xianchaomaster1]#stress-c2-i2--verbose--timeout20s

#倘若执行时间为分钟,改20s为1m

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复