首页 > 其他分享 >CGroup和namespace的介绍以及区别

CGroup和namespace的介绍以及区别

时间:2024-03-20 21:46:24浏览次数:21  
标签:subsystem CGroup 区别 namespace 分组 cgroup Linux 进程

namespace:

namespace是Linux内核用来隔离内核资源的方式。通过namespace可以让一些进程只能看到与自己相关的一部分资源,而另外一些进程也只能看到与它们自己相关的资源,这两拨进程感受不到对方的存在。具体方式就是把一个或者多个进程的相关资源指定在同一个namespace中。Linux namespace是对全局系统资源的一种封装隔离,使得处于不同namespace的进程拥有独立的 全局系统资源,改变一个namespace中的系统资源只会影响当前namespace里面的进程,对其他namespace中的进程没有任何影响。

2.CGroup是Control Groups的缩写,是Linux内核提供的一种可以限制,记录,隔离进程组所使用的物力资源的机制。

 

为什么需要cgroup

随着人们的需求增大,需要追踪一组进程的内存和IO使用情况,于是出现了cgroup,用来统一讲进程进行分组,并且在分组的基础上进行监控和资源控制管理等。

 

什么是cgroup

术语cgroup在不同的上下文中代表不同的意思,可以指整个Linux的cgroup技术,也可以指一个具体进程组。

 

cgroup是Linux下的一种将进程按组进行管理的机制,在用户层看来,cgroup技术就是把系统中的所有进程组织成一颗一颗独立的树,每棵树都包含系统的所有进程,树的每个节点是一个进程组,而每颗树又和一个或者多个subsystem关联,树的作用是将进程分组,而subsystem的作用就是对这些组进行操作。cgroup主要包括下面两部分:

1.subsystem:一个subsystem就是一个内核模块,他被关联到一颗cgroup树之后,就会在树的每个节点(进程组)上做具体的操作。subsystem经常被称作"resource controller",因为它主要被用来调度或者限制每个进程组的资源,但是这个说法不完全准确,因为有时我们将进程分组只是为了做一些监控,观察一下他们的状态,比如perf_event subsystem。到目前为止,Linux支持12种subsystem,比如限制CPU的使用时间,限制使用的内存,统计CPU的使用情况,冻结和恢复一组进程等,后续会对它们一一进行介绍。

2.hierarchy:一个hierarchy可以理解为一棵cgroup树,树的每个节点就是一个进程组,每棵树都会与零到多个subsystem关联。在一颗树里面,会包含Linux系统中的所有进程,但每个进程只能属于一个节点(进程组)。系统中可以有很多颗cgroup树,每棵树都和不同的subsystem关联,一个进程可以属于多颗树,即一个进程可以属于多个进程组,只是这些进程组和不同的subsystem关联。目前Linux支持12种subsystem,如果不考虑不与任何subsystem关联的情况(systemd就属于这种情况),Linux里面最多可以建12颗cgroup树,每棵树关联一个subsystem,当然也可以只建一棵树,然后让这棵树关联所有的subsystem。当一颗cgroup树不和任何subsystem关联的时候,意味着这棵树只是将进程进行分组,至于要在分组的基础上做些什么,将由应用程序自己决定,systemd就是一个这样的例子。

两者的区别:

都是讲进程进行分组,但是两者的作用还是有本质区别的。namespace是为了隔离进程组之间的资源,而cgroup是为了对一组进程进行统一的资源监控和限制。 

标签:subsystem,CGroup,区别,namespace,分组,cgroup,Linux,进程
From: https://www.cnblogs.com/huwy-123/p/18086159

相关文章

  • 考研数学一、数学二和数学三有什么区别?终于有人说清楚了
    考研数学一、数学二和数学三主要针对不同类型的专业和学科,它们在考试内容、难度和适用的专业上有所区别。考试内容和难度数学一涵盖高等数学的广泛内容,包括空间解析几何、多元函数积分学(二重积分以外)、无穷级数、微积分的物理应用等。数学一是三者中内容最广泛、难度最高......
  • using namespace 可以简化代码,但在实际开发中需要谨慎使用,特别是在较大的项目中!!!
    usingnamespace是C++中的一个语句,用于指定当前作用域内使用特定命名空间中的所有标识符,而无需每次都显式指定命名空间。这种语句可以简化代码编写,减少重复输入命名空间的需求,提高代码的可读性和简洁性。下面是一个示例,演示了usingnamespace的用法:#include<iostrea......
  • 使用cgroups进行资源限制和管理
    cgroups是内核提供的一种机制,可以用来限制一组进程的资源使用。通过创建cgroups并设置相应的限制参数,可以确保多个程序共同运行时每个程序占用的资源受到限制。挂载cgroup文件系统查看cgroup是否已经挂载:mount|grepcgroup如果没有挂载,则编辑/etc/fstab文件添加以下......
  • 接口和抽象类的区别
    接口和抽象类的区别修饰的关键字不同:接口interface,抽象类abstractclass抽象类本质也是一个类,某个类只能只能继承一个抽象类(类的单继承),但可以实现多个接口抽象类只能继承于一个类,但接口可以继承多个接口(类单继承,接口多继承)抽象类中的可以有抽象方法和普通方法,接口中除了......
  • 从时间复杂度的角度出发,list和vector之间查找,插入,删除等数据操作的区别
    list和vector是STL(标准模板库)中常用的两种序列容器,它们各自在不同类型的操作上有着不同的优势。下面是list和vector在不同操作上的擅长之处:list的擅长操作插入和删除操作:list是一个双向链表,插入和删除元素时只需要调整相邻节点的指针,因此在中间或任意位置插入或删除元素时效率很......
  • .forEach循环和.map()循环的主要区别,它们分别在什么情况下使用?
      .forEach()和.map()都是JavaScript数组的迭代方法,用于对数组中的每个元素执行某个操作。它们之间的主要区别在于返回值和使用情况。1.forEach()方法:  .forEach()方法用于遍历数组中的每个元素,并对每个元素执行指定的回调函数。该方法没有返回值,它仅用于执......
  • JavaScript中的“==“和“===“运算符的区别
    JavaScript中的比较运算符"=="和"==="用于比较两个值是否相等。尽管它们的目的相同,但它们在比较过程中采用了不同的策略1.“==”相等运算符:"=="运算符执行一种松散相等比较,它在比较之前会进行类型转换。如果进行比较的两个值类型不同,JavaScript会尝试将它们......
  • 如何理解UDP 和 TCP? 区别? 应用场景?
    一、UDPUDP(UserDatagramProtocol),用户数据包协议,是一个简单的面向数据报的通信协议,即对应用层交下来的报文,不合并,不拆分,只是在其上面加上首部后就交给了下面的网络层也就是说无论应用层交给UDP多长的报文,它统统发送,一次发送一个报文而对接收方,接到后直接去除首部,交给上面的应......
  • Go环境变量配置,及GOROOT、GOPATH的区别
    一、安装Gogo下载地址:https://golang.google.cn/dl/windows下载安装,有两种方式。解压和直接安装方式一:直接下载安装包。以.msi结尾的文件。例如:go1.22.1.windows-amd64.msi 下载后,双击后一直点下一步即可安装成功。方式二:下载压缩包文件,直接解压。解压后配置环境变量......
  • 【MySql】SQLite和MySQL的区别
    SQLite和MySQL都是热门的关系型数据库管理系统,但是它们之间存在一些主要的差异:部署模式:SQLite是一个嵌入式数据库,它的所有数据都存储在一个单独的磁盘文件中,不需要安装数据库服务器,特别适合小型项目、桌面应用程序或者IoT设备等。MySQL是一个服务式数据库,需要设立专门的数据......