Linux 资源管理-Cgroups

来源:互联网 发布:电工绘图软件 编辑:程序博客网 时间:2024/05/16 00:49

 Linux Resource Management—Cgroups

Cgroups简介

Cgroups 是control groups的缩写,是Linux内核提供的一种机制,用来限制、记录、隔离进程组所使用的物理资源,如CPU,内存,I/O等。

Cgroups经过发展,到现在已经可以支持多种应用场景,从单个进程的资源控制,到操作系统层的虚拟化(OS Level Virtualization),LXC将Cgroups作为实现虚拟化所使用的资源隔离手段。

1、 Cgroups相关概念

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

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

3、层级(hierarchy)。控制族群可以组成hierarchy的形式,既一棵控制族群树。子控制族群可以继承父控制族群的属性。

4、子系统(subsystem)。一个子系统就是一类资源控制器,例如CPU子系统负责控制CPU时间片的分配。子系统必须挂载(attach)到某个层级上才能生效。一个子系统最多只能attach到一个层级。

2、Cgroups子系统介绍

Cgroups 包含了多个独立的子系统,每个子系统负责一类资源的管理。RHEL6.4中,有11的子系统:

blkio 这个子系统为块设备设置输入/输出限制,例如磁盘、光盘、usb设备等。

cpu 这个子系统使用调度程序为cgroups任务提供cpu的访问。

cpuacct 产生cgroup任务的cpu资源报告。

cpuset 在多核CPU系统中,为cgroup中的任务分配独立 CPU和内存节点。 

devices 允许或拒绝cgroups 任务对设备的访问。

freeze  挂起或者恢复cgroups中的任务。

memory 设置每个cgroup的内存限制以及产生内存资源报告。

net_cls 使用等级识别符(classid)标记网络数据包,允许linux流量控制程序识别cgroups的数据包。

ns 名称空间子系统。

perf_event 增加了对每group的监测跟踪的能力,即可以监测属于某个特定的group的所有线程以及运行在特定CPU上的线程。

net_prio 这个子系统提供一种方法,动态的为每个网络接口的流量设置优先级。

3、Cgroups 管理机制

Cgroups是分层管理的,子Cgroups会继承父Cgroups的一些属性。类似Linux进程,但是二者之间也有区别。

Linux进程Model 

Linux系统中,所有的进程都是init进程的子进程,它是在启动的时候由内核创建的进程。其他进程则在init之后按序启动。所以Linux的所有进程都继承自同一进程,所有的进程组成一个tree。

Cgroups Model

Cgroups也是分级的,而且子Cgroups会继承父Cgroups的一些属性。与Linux进程模式的主要区别在于:Cgroups可以不是来自同一父Cgroups,也就是说Cgroups可以是多棵树。Cgroups 的管理有以下几个原则:

1、一个层级可以挂载(attach)有一个或多个子系统。例如Cpu和memory子系统可以同时挂载到一个层级上。


2、一个子系统同时最多只能挂载到一个层级上。


3、每次新创建一个层级时,系统的task默认为该层级默认Cgroups(root Cgroups)的成员。一个task可以在层级中任何Cgroups执行,也可以同时位于不通层级的Cgroups中。但是一个任务不能同时位于同一层级的两个Cgroups中。


4、当Cgroups中的一个任务fork出一个新任务时,新任务自动继承其父任务的Cgroups关系。但是,新任务与父任务之间是完全独立的,新任务可以被移动到其他的Cgroups。


关于Cgroup 层级、群组、任务的相关操作,请参考红帽官网文档:

https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/


原创粉丝点击