索鸟网

  1. 首页
  2. linux cgroup代码学习(1)——cgroup介绍

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


Cgroup介绍

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

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

  2. Prioritization:控制优先级

  3. Accounting:审计和统计

  4. Control:挂起,恢复进程等

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

上图中同样列出了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).

架构组成:

先看图:

图片来自:http://www.cnblogs.com/yjf512...

按照资源的划分,系统被划分成了不同的子系统(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的详细组织关系,留在下节说明。

cgroup

来源地址:https://segmentfault.com/a/1190000010453919 版权归作者所有!

相关教程

  • linux cgroup代码学习(2)——数据结构整理

    相关的结构 task_struct 定义了CONFIG_CGROUPS宏的话,task_struct和cgroup相关的变量有: /* Control Group info protected by css_set_lock */ struct css_set __rcu *cgroups;//关联的css_set /* cg_l
  • Linux Namespace和Cgroup

    为了方便阅读,将自己写的所有关于namespace和cgroup的文章统一列在这里,希望对有需要的人有所帮助,后续有新的内容后将会更新这里的列表。 namespace 包含了Linux目前常用的6个namespace的介绍 Linux Namespace系列(01):Namespace概述 Linux Namespace系列(02):UTS names
  • Docker之cgroup篇

    一、CGroup简介:CGroup 是 Control Groups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组 (process groups) 所使用的物力资源 (如 cpu memory i/o 等等) 的机制。2007 年进入 Linux 2.6.24 内核,CGroups 不是全新创造的,它将进程管理从 cpuset 中剥离出来,作者是 Goo
  • 实现容器的底层技术 - 每天5分钟玩转 Docker 容器技术(30)

    为了更好地理解容器的特性,本节我们将讨论容器的底层实现技术。cgroup 和 namespace 是最重要的两种技术。cgroup 实现资源限额, namespace 实现资源隔离。cgroupcgroup 全称 Control Group。Linux 操作系统通过 cgroup 可以设置进程使用 CPU、内存 和 IO 资源的限额。相信你已经猜到了:前面我们看到的--cpu-s
  • cgroup实现cpu绑定和资源使用比例限制

          背景原理:部分物理服务器上部署了多个应用,为了避免由于部分应用异常造成机器负载过高,影响其他应用,对每个应用所属进程进行cpu使用限制。     限制内容:A,绑定应用使用除0号cpu以外的其他cpu;B,设定cpu资源使用比例,当资源充足时候,可以使用超过预设比例的cpu资源,当资源紧张时候,按照
  • 内核虚拟化技术——LXC初体验

    一、Cgroups1.1 介绍Cgroup是Control group的简称。最初由由Google的工程师(主要是Paul Menage和Rohit Seth)在2006年以“process containers(进程容器)”的名字开始的, 在2007年的晚些时候被重命名为“控制组”并被合并到了2.6.24版的内核中,现已成为Linux内核中的一个功能,是Linux内核提供一种可
  • 走进docker(04):什么是容器的runtime?

    我们都知道runc是容器runtime的一个实现,那到底什么是runtime?包含了哪些内容? 容器的runtime和image一样,也有标准,也由OCI (Open Containers Initiative)负责维护,地址为Runtime Specification,了解runtime标准有利于我们更好的理解docker和runc的关系,本文将对该标
  • docker资源限制和应用总结

    Docker(linux container)所依赖的底层技术1 Namespace用来做容器的隔离,有了namespace,在docker container里头看来,就是一个完整的linux的世界。在host看来,container里的进程,就是一个普通的host进程,namespace提供这种pid的映射和隔离效果,host承载着container,就好比一个世外桃源。na