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