控制组实现初步分析
控制组实现初步分析
1. 控制组简介
当前的主流linux内核提供了控制组(control group)的功能,利用该功能允许管理员对系统中运行的任务进行分组,然后为每个组分配资源,比如CPU时间,系统内存,网络带宽或者资源的组合.利用控制组系统管理员可更具体的控制系统资源的分配、优先顺序、拒绝、管理和监控,可以更好的根据用户和资源的情况合理的分配资源,提高系统总体效率.内核为了便于管理资源使用子系统表示单一资源,比如CPU时间,系统内存,网络带宽等,然后每个控制组都会关联一个或者多个子系统,进而实现资源管理和配置。当前的内核支持如下可用的子系统:
blkio:设定系统块设备的I/O限制.
cpu:对系统中CPU资源进行管理.
cpuacct:该子系统自动生成控制组使用CPU资源的报告.
cpuset:该系统为控制组分配独立CPU和内存节点.
devices:提供设备访问白名单机制.
freezer:该系统提供挂起或者恢复控制组的机制.
memory:提供控制组对内存使用的限制以及自动生成这些任务内存资源使用报告.
net_cls:允许内核流量控制器识别属于特定控制组的网络包.
ns:名称空间子系统.
此外,在2.6.35及其上内核中允许子系统编译成独立的模块,动态的安装和卸载,当前系统中支持子系统的最大个数为32(unsigned long类型占用的比特数).
2. 基本数据结构与组织
2.1 控制组文件系统
linux内核将控制组组织成若干树形的层次结构,每一个层次结构以控制组文件系统的形式进行管理和操作。用户通过操作控制组文件系统中的控制文件来对控制组进行管理.控制组根文件系统结构定义如下:
#define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - offsetof(type,member) );})