第 3 章 使用 libcgroup 工具
libcgroup 数据包, 在 Red Hat Enterprise Linux 之前版本中是管理 cgroup 的主要工具,但现已过时。为避免冲突,请不要将 libcgroup 工具应用于默认资源管控器(列于 Red Hat Enterprise Linux 7 中可用的管控器),它们现在是 systemd 的专属域。这就让 libcgroup 工具的应用空间变得有限,只有当您需要管理目前不受 systemd 支持的控制器时,请再使用它,例如 net_prio。
以下章节将描述:与层级的默认系统没有冲突时,如何在相关情景中使用 libcgroup 工具。
注意
使用 libcgroup 工具前,请先确保 libcgroup 和 libcgroup-tools 数据包已安装在系统上。安装方法:请以
root
身份运行:
yum install libcgroup yum install libcgroup-tools
~]# yum install libcgroup
~]# yum install libcgroup-tools
注意
net_prio
管控器没有像其它管控器一样被编译在 kernel 中,它是一个在挂载前必须被装载的模块。如要装载这一模块,请以 root
身份输入:
modprobe netprio_cgroup
modprobe netprio_cgroup
3.1. 挂载层级 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
如需使用非自动挂载的 kernel 资源管控器,您需要创建一个包含这一管控器的层级。通过编写
/etc/cgconfig.conf
的 mount
部分来添加或者分离层级。这一方法可让管控器附载持续,也就是说系统重启后,您的设定也将被保留并运作。或者,您可以使用 mount
指令为当前会话创建临时挂载。
使用 cgconfig 服务
通过 libcgroup-tools 数据包安装的
cgconfig
服务可以让附加资源的管控器挂载层级。默认情况下,这一服务不会自动启动。当您启动 cgconfig
时,它会应用 /etc/cgconfig.conf
配置文件中的设置。因此,从会话到会话,配置会被重建,并且持续。请注意,如果您终止 cgconfig
,那它之前挂载的层级都将被卸载。
通过 libcgroup 数据包安装的默认
/etc/cgconfig.conf
文件不包含任何配置设置,仅会有 systemd 自动挂载主要资源管控器的信息。
/etc/cgconfig.conf
可创建三种条目 —— mount、group 和 template。mount 条目用于创建层级并将层级挂载为虚拟文件系统,并且将管控器附加到这些层级中。Red Hat Enterprise Linux 7 中, 默认层级会被自动挂载到 /sys/fs/cgroup/
目录,因此,cgconfig
被用来单独附载非默认的管控器。mount 条目通过以下句法定义:
mount { controller_name = /sys/fs/cgroup/controller_name; … }
mount {
controller_name = /sys/fs/cgroup/controller_name;
…
}
用您希望挂载到层级的 kernel 资源管控器名称来替换controller_name。示例请参见 例 3.1 “创建挂载条目”。
例 3.1. 创建挂载条目
如要将
net_prio
管控器附加到默认 cgroup 树中,请将下列字符添加到 /etc/cgconfig.conf
配置文件:
mount { net_prio = /sys/fs/cgroup/net_prio; }
mount {
net_prio = /sys/fs/cgroup/net_prio;
}
然后重启
cgconfig
服务来应用这些设置:
systemctl restart cgconfig.service
systemctl restart cgconfig.service
/etc/cgconfig.conf
中的组条目可以用来设定资源管控器的参数。更多组条目的信息,请参阅〈第 3.5 节 “设定 cgroup 参数”〉。
/etc/cgconfig.conf
中的样板条目可以用来创建组定义,这个组定义将应用于所有进程。
使用挂载指令
mount
指令可以用于临时挂载层级。如需这样做,请先在 /sys/fs/cgroup/
目录中创建一个挂载点,systemd 将在此目录中挂载主要资源管控器。请以 root
身份输入:
mkdir /sys/fs/cgroup/name
mkdir /sys/fs/cgroup/name
请用新挂载目标的名称替代 name,通常是用管控器的名称。接下来,执行
mount
指令来挂载层级,同时附载一个或更多子系统。以 root
身份来输入:
mount -t cgroup -o controller_name none /sys/fs/cgroup/controller_name
mount -t cgroup -o controller_name none /sys/fs/cgroup/controller_name
用管控器的名称取代 controller_name 来具体说明被挂载的设备和目标文件夹。
-t cgroup
参数可以明确挂载的类型。
例 3.2. 使用挂载指令来附加控制器
如要使用
mount
指令给 net_prio
管控器挂载层级,请先创建挂载节点:
mkdir /sys/fs/cgroup/net_prio
~]# mkdir /sys/fs/cgroup/net_prio
然后将
net_prio
挂载到您之前创建的目标中。
mount -t cgroup -o net_prio none /sys/fs/cgroup/net_prio
~]# mount -t cgroup -o net_prio none /sys/fs/cgroup/net_prio
通过
lssubsys
指令(参见〈“将管控器列表”一节〉),将所有可用层级沿当前挂载节点列表,您就可以验证是否正确附加了层级: