第 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
注意
net_prio
管控器没有像其它管控器一样被编译在 kernel 中,它是一个在挂载前必须被装载的模块。如要装载这一模块,请以 root
身份输入:
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; … }
用您希望挂载到层级的 kernel 资源管控器名称来替换controller_name。示例请参见 例 3.1 “创建挂载条目”。
例 3.1. 创建挂载条目
如要将
net_prio
管控器附加到默认 cgroup 树中,请将下列字符添加到 /etc/cgconfig.conf
配置文件:
mount { net_prio = /sys/fs/cgroup/net_prio; }
然后重启
cgconfig
服务来应用这些设置:
systemctlrestart
cgconfig.service
/etc/cgconfig.conf
中的组条目可以用来设定资源管控器的参数。更多组条目的信息,请参阅〈第 3.5 节 “设定 cgroup 参数”〉。
/etc/cgconfig.conf
中的样板条目可以用来创建组定义,这个组定义将应用于所有进程。
使用挂载指令
mount
指令可以用于临时挂载层级。如需这样做,请先在 /sys/fs/cgroup/
目录中创建一个挂载点,systemd 将在此目录中挂载主要资源管控器。请以 root
身份输入:
mkdir
/sys/fs/cgroup/
name
请用新挂载目标的名称替代 name,通常是用管控器的名称。接下来,执行
mount
指令来挂载层级,同时附载一个或更多子系统。以 root
身份来输入:
mount
-t
cgroup
-o
controller_namenone
/sys/fs/cgroup/
controller_name
用管控器的名称取代 controller_name 来具体说明被挂载的设备和目标文件夹。
-t cgroup
参数可以明确挂载的类型。
例 3.2. 使用挂载指令来附加控制器
如要使用
mount
指令给 net_prio
管控器挂载层级,请先创建挂载节点:
~]#mkdir
/sys/fs/cgroup/net_prio
然后将
net_prio
挂载到您之前创建的目标中。
~]#mount
-t
cgroup
-o
net_prio
none
/sys/fs/cgroup/net_prio
通过
lssubsys
指令(参见〈“将管控器列表”一节〉),将所有可用层级沿当前挂载节点列表,您就可以验证是否正确附加了层级:
~]# lssubsys -am
cpuset /sys/fs/cgroup/cpuset
cpu,cpuacct /sys/fs/cgroup/cpu,cpuacct
memory /sys/fs/cgroup/memory
devices /sys/fs/cgroup/devices
freezer /sys/fs/cgroup/freezer
net_cls /sys/fs/cgroup/net_cls
blkio /sys/fs/cgroup/blkio
perf_event /sys/fs/cgroup/perf_event
hugetlb /sys/fs/cgroup/hugetlb
net_prio /sys/fs/cgroup/net_prio