第 1 章 控制组群(Cgroup)简介
Red Hat Enterprise Linux 6 提供新的内核功能:控制族群(control group),本手册中使用其简称 cgroup。Cgroup 可让您为系统中所运行任务(进程)的用户定义组群分配资源 -- 比如 CPU 时间、系统内存、网络带宽或者这些资源的组合。您可以监控您配置的 cgroup,拒绝 cgroup 访问某些资源,甚至在运行的系统中动态配置您的 cgroup。可将
cgconfig
(“控制组群配置 ”)服务配置为在引导时启动,并重新建立您预先定义的 cgroup,这样可使其在重启过程中保留它们。
使用 cgroup,系统管理员可更具体地控制对系统资源的分配、优先顺序、拒绝、管理和监控。可更好地根据任务和用户分配硬件资源,提高总体效率。
1.1. 如何管理控制组群
Cgroup 是分层管理的,类似进程,且子 cgroup 会继承其上级 cgroup 的一些属性。但这两个模式也有不同。
Linux 进程模式
Linux 系统中的所有进程都是通用父进程
init
的子进程,该进程在引导时由内核执行并启动其它进程(这些进程会按顺序启动其子进程)。因为所有进程都归结到一个父进程,所以 Linux 进程模式是一个单一层级结构,或者树结构。
另外,
init
之外的每个 Linux 进程都会继承其父进程的环境(比如 PATH 变量)[1]和某些属性(比如打开文件描述符)。
Cgroup 模式
Cgroup 与进程在以下方面类似:
- 它们是分级的,且
- 子 cgroup 会继承父 cgroup 的某些属性。
根本的不同是在某个系统中可同时存在不同的分级 cgroup。如果 Linux 进程模式是进程的单一树模式,那么 cgroup 模式是一个或者更多任务的独立、未连接树(例如:进程)。
需要多个独立 cgroup 分级,因为每个分级都会附加到一个或者多个子系统中。子系统[2]代表单一资源,比如 CPU 时间或者内存。Red Hat Enterprise Linux 6 提供 9 个 cgroup 子系统,根据名称和功能列出如下。
Red Hat Enterprise Linux 中的可用子系统
blkio
-- 这个子系统为块设备设定输入/输出限制,比如物理设备(磁盘,固态硬盘,USB 等等)。cpu
-- 这个子系统使用调度程序提供对 CPU 的 cgroup 任务访问。cpuacct
-- 这个子系统自动生成 cgroup 中任务所使用的 CPU 报告。cpuset
-- 这个子系统为 cgroup 中的任务分配独立 CPU(在多核系统)和内存节点。devices
-- 这个子系统可允许或者拒绝 cgroup 中的任务访问设备。freezer
-- 这个子系统挂起或者恢复 cgroup 中的任务。memory
-- 这个子系统设定 cgroup 中任务使用的内存限制,并自动生成由那些任务使用的内存资源报告。net_cls
-- 这个子系统使用等级识别符(classid)标记网络数据包,可允许 Linux 流量控制程序(tc)识别从具体 cgroup 中生成的数据包。ns
-- 名称空间子系统。
注意
您可能在 cgroup 文献,比如 man page 或者内核文档中看到术语资源控制器或者控制器。这两个词与 “subsystem(子系统)”的含义相同,且基于这样的事实,即子系统通常调度资源或者在其所附属层级的 cgroup 中应用限制。
子系统(资源控制器)的定义非常普通:它是根据一组任务行动的东西,例如进程。