第 2 章 使用控制组群
使用 cgroup 的最简单的方法是安装 libcgroup 软件包,该软件包包含大量与 cgroup 有关的命令行工具及其相关 man page。您可以使用 shell 命令和可在任意系统中使用的工具挂载层级并设定 cgroup 参数(不保留)。但是,使用 libcgroup 提供的工具可简化过程并扩展功能。因此,本指南着重全面介绍 libcgroup 命令。在大多数情况下,我们会将对等的 shell 命令包括在内以便清楚阐述基础机理。我们建议您在可行的情况下尽量使用 libcgroup 命令。
注意
要使用 cgroup,首先请确定在您的系统中安装 libcgroup 软件包,方法为作为 root 运行:
~]# yum install libcgroup
2.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
服务忽略它。