linux cgroup类型,linux cgroup代码学习(1)——cgroup介绍

Cgroup介绍

cgroup 的全称是control group.是linux中用来限制,隔离任务(进程)所使用物理资源的技术。其对进程的限制主要体现在以下方面:

Resource limiation:限制CPU,内存等资源的使用

Prioritization:控制优先级

Accounting:审计和统计

Control:挂起,恢复进程等

其以file system的方式提供使用,在使用时,需要先mount cgroup 文件系统,并在mount时指定需要挂载的子系统。CentOS 默认启动已经开启cgroup.可以使用mount 命令查看当前系统cgroup挂载信息:

bVR1Cj?w=1296&h=222

上图中同样列出了subsystem的种类,linux中子系统分为以下几类,可以查看/proc/cgroups查看支持的子系统。

[root@localhost ~]# cat /proc/cgroups

#subsys_name hierarchy num_cgroups enabled

cpuset 2 1 1

cpu 7 1 1

cpuacct 7 1 1

memory 10 1 1

devices 3 1 1

freezer 9 1 1

net_cls 4 1 1

blkio 8 1 1

perf_event 6 1 1

hugetlb 5 1 1

cpu//cpu的调度策略

cpuset//用来限制可使用的cpu和内存节点

cpuacct// not clear

memory//内存大小限制

blkio//输入输出限制

devices//可访问的设备

net_cls// not clear

freezer// not clear

需要打开某项subsystem,mount相应的subsystem 就可以了:

mount -t cgroup -o cpu,cpuset cgroup /cgroup/cpu

//mount [-t vfstype] [-o options] device dir

这边的device参数可以变动,系统默认的参数是cgroup, 正如上图所示系统各个subsystem都是以cgroup mount.上处的命令也可以写成

#mount -t cgroup -o cpu test /cgroup/

#mount | grep cpu

#cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)

#test on /cgroup type cgroup (rw,relatime,cpu)

这样,我们就可以使用挂载的子系统了。

cgroup以filesystem的方式提供服务,在挂载的目录下,mkdir可创建新的cgroup,rmdir可删除cgroup(不能直接rm).

架构组成:

按照资源的划分,系统被划分成了不同的子系统(subsystem),正如我们上面列出的cpu, cpuset, blkio...每种资源独立构成一个subsystem.

可以将cgroup的架构抽象的理解为多根的树结构,一个hierarchy代表一棵树,树上绑定一个或多个subsystem.而树的叶子则是cgroup,一个cgroup具体的限制了某种资源。一个或多个cgroup组成一个css_set。简单来讲,就是一个资源限制集合(css_set)对一种subsystem(cpu,devices)的限制条件只能有一个,这是显然的吧...最终的task(进程)同css_set关联,从而达到限制资源的目的。具体cgroup和css_set 关联的方式,放在后面讲。

常见的4个

task(任务):cgroups的术语中,task就表示系统的一个进程。

cgroup(控制组):cgroups 中的资源控制都以cgroup为单位实现。cgroup表示按某种资源控制标准划分而成的任务组,包含一个或多个子系统。一个任务可以加入某个cgroup,也可以从某个cgroup迁移到另外一个cgroup。

subsystem(子系统):cgroups中的subsystem就是一个资源调度控制器(Resource Controller)。比如CPU子系统可以控制CPU时间分配,内存子系统可以限制cgroup内存使用量。

hierarchy(层级树):hierarchy由一系列cgroup以一个树状结构排列而成,每个hierarchy通过绑定对应的subsystem进行资源调度。hierarchy中的cgroup节点可以包含零或多个子节点,子节点继承父节点的属性。整个系统可以有多个hierarchy。

另外整理的:

css_set:一组关联cgroup的集合。

cgroupfs_root:代表一个hierarchy

cgroup_subsys:代表一个subsystem

subsystem和hierarchy绑定的限制关系:

限定1. 一个hierarchy上可以绑定一个或者多个subsystem.例如 cpu & memory 绑定到了同一个hierarchy

限定2. 一个subsystem不能从某个hierarchy解绑然后绑定到其他的hierarchy 上。 但是当且仅当这些hirearchy的subsystem相同时可以绑定,可以理解为给hierarchy起了别名。(subsystem不能出现在不同的hierarchy上,但是你拷贝了一个hierarchy则是可以的)。

限定3. 创建一个hierarchy的时候,系统所有css_set都会和此hierarchy的root cgroup关联。也就相当于所有的task都和root cgroup关联。但是在同一个hierarchy中,一个css_set只能和一个cgroup关联。

限定4. fork子进程的时候父子进程在同一个cgroup.但是后续可以修改。

这里只要对cgroup大概的层次结构了解就可以了,其中subsystem,hierarchy,cgroup的详细组织关系,留在下节说明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值