linux cgroup限制cpu

8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
描述
在里面,跟CPU相关的子系统有、和cpu 。
其中主要用于设置CPU的亲和性,可以限制中的进程只能在指定的CPU上运行,或者不能在指定的CPU上运行,同时还能设置内存的亲和性 。设置亲和性一般只在比较特殊的情况才用得着,所以这里不做介绍 。
包含当前所使用的CPU的统计信息,信息量较少,有兴趣可以去看看它的文档,这里不做介绍 。
本篇只介绍cpu子系统,包括怎么限制的CPU使用上限及相对于其它的相对值 。
本篇所有例子都在-- 16.04下执行通过
创建子
在下,已经帮我们mount好了cpu子系统,我们只需要在相应的目录下创建子目录就可以了1
2
3
4
5
6
7
8
9
10
11
12
13从这里的输出可以看到,被挂载在了/sys/fs//,
而cpu和一起挂载到了/sys/fs//cpu,下面
[]:~$ mount|grep cpu
on /sys/fs// type(rw,,nodev,,,)
on /sys/fs//cpu, type(rw,,nodev,,,cpu,)
进入/sys/fs//cpu,并创建子
[]:~$ cd /sys/fs//cpu,
[]:/sys/fs//cpu,$ sudo mkdir test
[]:/sys/fs//cpu,$ cd test
[]:/sys/fs//cpu,/test$ ls
. .stat . cpu. cpu.stat tasks
.procs .usage cpu. cpu.
除了里面通用的.、tasks、.procs、这几个文件外,以.开头的文件跟子系统有关,我们这里只需要关注cpu.开头的文件 。
cpu. & cpu.
【linux cgroup限制cpu】用来配置时间周期长度,用来配置当前在设置的周期长度内所能使用的CPU时间数,两个文件配合起来设置CPU的使用上限 。两个文件的单位都是微秒(us),的取值范围为1毫秒(ms)到1秒(s),的取值大于1ms即可,如果的值为-1(默认值),表示不受cpu时间的限制 。下面是几个例子:1
2
3
4
5

linux cgroup限制cpu

文章插图
6
7
8
9
10
111.限制只能使用1个CPU(每250ms能使用250ms的CPU时间)
# echo> cpu. /* quota = 250ms */
# echo> cpu. /*= 250ms */
2.限制使用2个CPU(内核)(每500ms能使用的CPU时间,即使用两个内核)
# echo> cpu. /* quota =*/
# echo> cpu. /*= 500ms */
3.限制使用1个CPU的20%(每50ms能使用10ms的CPU时间,即使用一个CPU核心的20%)
# echo 10000 > cpu. /* quota = 10ms */
# echo 50000 > cpu. /*= 50ms */
cpu.
用来设置CPU的相对值,并且是针对所有的CPU(内核),默认值是1024,假如系统中有两个,分别是A和B,A的值是1024,B的值是512,那么A将获得1024/(1204+512)=66%的CPU资源,而B将获得33%的CPU资源 。有两个特点:如果A不忙,没有使用到66%的CPU时间,那么剩余的CPU时间将会被系统分配给B,即B的CPU使用率可以超过33%
如果添加了一个新的 C,且它的值是1024,那么A的限额变成了1024/(1204+512+1024)=40%,B的变成了20%
从上面两个特点可以看出:在闲的时候,基本上不起作用,只有在CPU忙的时候起作用,这是一个优点 。
由于是一个绝对值,需要和其它的值进行比较才能得到自己的相对限额,而在一个部署很多容器的机器上,的数量是变化的,所以这个限额也是变化的,自己设置了一个高的值,但别人可能设置了一个更高的值,所以这个功能没法精确的控制CPU使用率 。
cpu.stat
包含了下面三项统计结果: 表示过去了多少个cpu.里面配置的时间周期
: 在上面的这些周期中,有多少次是受到了限制(即中的进程在指定的时间周期中用光了它的配额)
: 中的进程被限制使用CPU持续了多长时间(纳秒)