添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
本文详细介绍了Linux内核中的Cgroup概念,包括任务、控制族群、层级结构和子系统的关系,以及其实现的资源限制、优先级控制和隔离等功能。展示了如何在实践中运用Cgroup进行进程资源管理和隔离。 摘要生成于 ,由 DeepSeek-R1 满血版支持,

Cgroup

什么是Cgroup

cgroups,其名称源自控制组群(control groups)的简写,是Linux内核的一个功能,用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘输入输出等)。

这个项目最早是由Google的工程师(主要是Paul Menage和Rohit Seth)在2006年发起,最早的名称为进程容器(process containers)。

在2007年时,因为在Linux内核中,容器(container)这个名词有许多不同的意义,为避免混乱,被重命名为cgroup,并且被合并到2.6.24版的内核中去。自那以后,又添加了很多功能。

Cgroup的相关概念

1.任务(task)。在cgroups中,任务就是系统的一个进程。

2.控制族群(control group)。控制族群就是一组按照某种标准划分的进程。Cgroups中的资源控制都是以控制族群为单位实现。一个进程可以加入到某个控制族群,也从一个进程组迁移到另一个控制族群。一个进程组的进程可以使用cgroups以控制族群为单位分配的资源,同时受到cgroups以控制族群为单位设定的限制。

3.层级(hierarchy)。控制族群可以组织成hierarchical的形式,既一颗控制族群树。控制族群树上的子节点控制族群是父节点控制族群的孩子,继承父控制族群的特定的属性。

4.子系统(subsystem)。一个子系统就是一个资源控制器,比如cpu子系统就是控制cpu时间分配的一个控制器。子系统必须附加(attach)到一个层级上才能起作用,一个子系统附加到某个层级以后,这个层级上的所有控制族群都受到这个子系统的控制。

1.每次在系统中创建新层级时,该系统中的所有任务都是那个层级的默认 cgroup(我们称之为 root cgroup ,此cgroup在创建层级时自动创建,后面在该层级中创建的cgroup都是此cgroup的后代)的初始成员。

2.一个子系统最多只能附加到一个层级。

3.一个层级可以附加多个子系统

4.一个任务可以是多个cgroup的成员,但是这些cgroup必须在不同的层级。

5.系统中的进程(任务)创建子进程(任务)时,该子任务自动成为其父进程所在 cgroup 的成员。然后可根据需要将该子任务移动到不同的 cgroup 中,但开始时它总是继承其父任务的cgroup。

Cgroup的功能

cgroups的一个设计目标是为不同的应用情况提供统一的接口,从控制单一进程(像nice)到操作系统层虚拟化(像OpenVZ,Linux-VServer,LXC)。cgroups提供:

  1. 资源限制 :组可以被设置不超过设定的内存限制;这也包括虚拟内存。
  2. 优先级 :一些组可能会得到大量的CPU或磁盘IO吞吐量。
  3. 结算 :用来衡量系统确实把多少资源用到适合的目的上。
  4. 控制 :冻结组或检查点和重启动。

过去有一段时间,内核开发者甚至把 namespace 也作为一个 cgroups 的 subsystem 加入进来,也就是说 cgroups 曾经甚至还包含了资源隔离的能力。但是资源隔离会给 cgroups 带来许多问题,如 PID 在循环出现的时候 cgroup 却出现了命名冲突、cgroup 创建后进入新的 namespace 导致脱离了控制等等。

Cgroup的作用

Cgroups最初的目标是为资源管理提供的一个统一的框架,既整合现有的cpuset等子系统,也为未来开发新的子系统提供接口。现在的cgroups适用于多种应用场景,从单个进程的资源控制,到实现操作系统层次的虚拟化(OS Level Virtualization)。Cgroups提供了以下功能:

  1. 限制进程组可以使用的资源数量(Resource limiting ) 。比如:memory子系统可以为进程组设定一个memory使用上限,一旦进程组使用的内存达到限额再申请内存,就会触发OOM(out of memory)。
  2. 进程组的优先级控制(Prioritization ) 。比如:可以使用cpu子系统为某个进程组分配特定cpu share。
  3. 记录进程组使用的资源数量(Accounting ) 。比如:可以使用cpuacct子系统记录某个进程组使用的cpu时间
  4. 进程组隔离(Isolation) 。比如:使用ns子系统可以使不同的进程组使用不同的namespace,以达到隔离的目的,不同的进程组有各自的进程、网络、文件系统挂载空间。
  5. 进程组控制(Control) 。比如:使用freezer子系统可以将进程组挂起和恢复。

Cgroup的层级图及特点

层级图:
在这里插入图片描述
Cgroup 特点

cgroup s资源限制 上一篇文章中,我们了解了Docker的资源隔离技术namespace,通过系统调用构建了一个相对隔离的shell环境。也可以称之为一个简单的容器。接下来将讲解另一个强大的内核工具- cgroup s。它不仅可以限制被namespace隔离起来的资源,还可以为资源设置权重、计算使用量、操控任务 ( 进程或线程 ) 启停等。 1. cgroup s是什么 cgroup s顾名思义就是把任务放到一...
一、 Cgroup 的目的 Cgroup 和namespa类似,也是将进程进程分组,但是目的与namespace不一样,namespace是为了隔离进程组之前的资源,而 Cgroup 是为了对一组进程进行统一的资源监控和限制。 二、为什么需要 Cgroup 在Linux里,对进程进程分组,比如Session group、process group等,后来需要追踪一组进程的内存和IO使用情况,出现了 cgroup ,用来统一对进程进行分组,并在分组的基础上对进程进程监控和资源控制管理等。 三、...
CGroup 简介 CGroup 是 Control Groups 的简称,通俗的来说, cgroup s 可以限制、记录、隔离进程组所使用的物理资源(包括:CPU、memory、IO 等),为容器实现虚拟化提供了基本保证,是构建 Docker 等一系列虚拟化管理工具的基石。 CGroup 主要有四大 功能 : 资源限制(Resource Limitation): cgroup s 可以对进程组使用的资源总额进行限制。如设定应用运行时使用内存的上限,一旦超过这个配额就发出 OOM(Out of Memory)。 优先级分配(
笔者作为一个初学者,在学习了docker的原理和 概念 后,对 cgroup 和namespace产生了兴趣,于是开始学习它们。学习理解并做出了归纳。 什么是 cgroup cgroup s,其名称源自控制组群(control groups)的简写,是Linux内核的一个 功能 ,用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘输入输出等) cgroup s的一个设计目标是为不同的应用情况提供统一的接口,...
memory cgroup Cgroup 的memory子系统,即memory cgroup (memcg),提供了对系统中一组进程的内存行为的管理,从而对整个系统中对内存有不用需求的进程或应用程序区分管理,实现更有效的资源利用和隔离。 在实际业务场景中,为了防止一些应用程序对资源的滥用(可能因为应用本身的bug,如内存泄露),导致对同一主机上其他应用造成影响,我们往往希望可以控制应用程序的内存使用量,这是memcg提供的主要 功能 之一,当然它还可以做的更多。 Memcg的应用场景,往往来自一些虚拟化的业务需求,
目录一、 Cgroup 基本信息二、CPU使用率控制1、CPU使用率基本信息2、CPU使用率控制的方式3、利用stress压力测试工具来进行测试4、CPU周期5、限制CPU内核的使用三、内存限额四、Block I/O的限制五、bps和iops的限制 一、 Cgroup 基本信息 ​ docker中对资源进行控制的方式是使用 Cgroup ,开控制资源,K8S中也有limit来控制资源 ​ docker通过 Cgroup 来控制勇气使用的资源配额,包括CPU、内存、磁盘三大方面,基本覆盖常见的资源配额和使用量控制
目录Namespace 概念 容器6六项隔离Namespace API实际操作 Cgroup 概念 实际操作 之前学习了docker的一些原理和文件系统,对于其核心技术namespace和 cgroup 没有一个很好的认识,下面将记录其知识点 Namespace namespce资源隔离,又称为命名空间,它主要做访问隔离。其原理是针对一类资源进行抽象,并将其封装在一起提供给一个容器使用,对于这类资源,因为每个容器都有自己的抽象,而他们彼此之间是不可见的,所以就可以做到访问隔离。 docker就是通过这样一种技术,使
Cgroup (Control Groups)是这样一种机制:它以分组的形式对进程使用系统资源的行为进行管理和控制。也就是说,用户通过 cgroup 对所有进程进行分组,再对该分组整体进行资源的分配和控制。 1 Cgroup 的结构 cgroup 中的每个分组称为进程组,它包含多个进程。最初情况下,系统内的所有进程形成一个进程组(根进程组),根据系统对资源的需求,这个根进程组将被进一步细分为子进
文章目录玩Docker? Cgroup ----资源分配一、 Cgroup 简介二、基于Dockerfile创建安装stress镜像三、创建容器的CPU权重控制四、cpu周期限制五、cpu core控制六、cpu配额控制参数的混合使用七、内存限额八、Block IO的限制九、bps和iops 的限制 玩Docker? Cgroup ----资源分配 一、 Cgroup 简介 Cgroup 是Control Groups的缩写,是Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源 ( 如CPU、 内存、磁
cgroup 功能 在于将一台计算机上的资源(CPU,memory,network)进行分片,来防止进程间不利的资源抢占。 术语 cgroup :关联一组 task 和一组 subsystem 的配置参数。 一个 task 对应一个进程, cgroup 是资源分片的最小单位。 subsystem:资源管理器,一个 subsystem 对应一项资源的管理,如 cpu, cpuset,memroy 等。