Show Table of Contents
第 2 章 使用控制组群
使用 cgroup 的最简单的方法是安装 libcgroup 软件包,该软件包包含大量与 cgroup 有关的命令行工具及其相关 man page。您可以使用 shell 命令和可在任意系统中使用的工具挂载层级并设定 cgroup 参数(不保留)。但是,使用 libcgroup 提供的工具可简化过程并扩展功能。因此,本指南着重全面介绍 libcgroup 命令。在大多数情况下,我们会将对等的 shell 命令包括在内以便清楚阐述基础机理。我们建议您在可行的情况下尽量使用 libcgroup 命令。
注意
要使用 cgroup,首先请确定在您的系统中安装 libcgroup 软件包,方法为作为 root 运行:
~]# yum install libcgroup2.1. cgconfig 服务
由 libcgroup 软件包安装的
cgconfig 服务可提供创建层级的方便方法,并在层级中附加子系统,且在那些层级中管理 cgroup。我们建议您使用 cgconfig 在您的系统中管理层级和 cgroup。
红帽企业版 Linux 6 不默认启动
cgconfig 服务。当使用 chkconfig 启动该服务时,它读取 cgroup 配置文件 -- /etc/cgconfig.conf。Cgroup 因此会在不同会话间重新创建并保留。根据配置文件的内容,cgconfig 可创建层级、挂载所需文件系统、创建 cgroup 以及为每个组群设定子系统参数。
libcgroup 软件包默认安装的
/etc/cgconfig.conf 文件为每个子系统创建并挂载独立层级,并在这些层级中附加子系统。
如果您停止
cgconfig 服务(使用 service cgconfig stop 命令),则会卸载它挂载的所有层级。
2.1.1. cgconfig.conf 文件
cgconfig.conf 文件包含两个主要类型的条目 -- mount 和 group。挂载条目生成并挂载层级并将其作为虚拟文件系统,同时将子系统附加到那些层级中。挂载条目使用以下语法定义:
mount {
<controller> = <path>;
…
}
示例用法请参考 例 2.1 “创建挂载条目”。
例 2.1. 创建挂载条目
以下示例为
cpuset 子系统创建层级:
mount {
cpuset = /cgroup/cpu;
}
对等的 shell 命令:
~]#mkdir /cgroup/cpu~]#mount -t cgroup -o cpu cpu /cgroup/cpu
组群条目创建 cgroup 并设定子系统参数。组群条目使用以下语法定义:
group <name> {
[<permissions>]
<controller> {
<param name> = <param value>;
…
}
…
}
请注意
permissions 部分是可选的。要为组群条目定义权限,请使用以下语法:
perm {
task {
uid = <task user>;
gid = <task group>;
}
admin {
uid = <admin name>;
gid = <admin group>;
}
}
示例用法请参考 例 2.2 “创建组群条目”:
例 2.2. 创建组群条目
以下示例为 sql 守护进程创建 cgroup,可为
sqladmin 组群中的用户在 cgroup 中添加任务,并让 root 用户修改子系统参数:
group daemons/sql {
perm {
task {
uid = root;
gid = sqladmin;
} admin {
uid = root;
gid = root;
}
} cpu {
cpu.shares = 100;
}
}
当与 例 2.1 “创建挂载条目” 中的挂载条目示例合并时,对等的 shell 命令为:
~]#mkdir -p /cgroup/cpu/daemons/sql~]#chown root:root /cgroup/cpu/daemons/sql/*~]#chown root:sqladmin /cgroup/cpu/daemons/sql/tasks~]#echo 100 > /cgroup/cpu/daemons/sql/cpu.shares
注意
您必须重启
cgconfig 服务方可使 /etc/cgconfig.conf 中的更改生效:
~]# service cgconfig restart
当安装 cgroups 软件包时,会在
/etc/cgconfig.conf 中写入示例配置文件。每行开始的 # 符号将该行注释出来以便 cgconfig 服务忽略它。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.