第 27 章 使用 cgroupfs 手动管理 cgroup
			您可以通过在 cgroupfs 虚拟文件系统中创建目录来管理系统上的 cgroup 层次结构。文件系统默认挂载到 /sys/fs/cgroup/ 目录中,您可以在专用控制文件中指定所需的配置。
		
				通常,红帽建议您使用 systemd 来控制系统资源的使用。您应该只在特殊情况下手动配置 cgroups 虚拟文件系统。例如,当您需要使用在 cgroup-v2 层次结构中没有对应的 cgroup-v1 控制器时。
			
27.1. 在 cgroups-v2 文件系统中创建 cgroup 和启用控制器
				您可以通过创建和删除目录,并通过写入 cgroup 虚拟文件系统中的文件来管理 控制组 (cgroups)。文件系统默认挂载到 /sys/fs/cgroup/ 目录中。要使用 cgroups 控制器中的设置,您还需要为子 cgroup 启用所需的控制器。在默认情况下,root cgroup 会为其子 cgroups 启用 memory 和 pids。因此,红帽建议在 /sys/fs/cgroup/ root cgroup 中创建至少两个级别的子 cgroup。这样,您可以选择从子 cgroup 中删除 memory 和 pids 控制器,并更好地组织 cgroup 文件。
			
先决条件
- 您有 root 权限。
流程
- 创建 - /sys/fs/cgroup/Example/目录:- mkdir /sys/fs/cgroup/Example/ - # mkdir /sys/fs/cgroup/Example/- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - /sys/fs/cgroup/Example/目录定义一个子组。当您创建- /sys/fs/cgroup/Example/目录时,目录中会自动创建一些- cgroups-v2接口文件。- /sys/fs/cgroup/Example/目录还包含- memory和- pids控制器的特定于控制器的文件。
- 可选:检查新创建的子控制组: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 示例输出显示常规 - cgroup控制接口文件,如- cgroup.procs或- cgroup.controllers。无论启用控制器是什么,这些文件都是所有控制组通用的。- memory.high和- pids.max等文件与- memory和- pids控制器有关,它们是 root 控制组 (- /sys/fs/cgroup/) ,默认情况下会被- systemd启用。- 默认情况下,新创建的子组从父 - cgroup继承所有设置。在这种情况下,来自 root- cgroup没有限制。
- 验证 - /sys/fs/cgroup/cgroup.controllers文件中是否有所需的控制器:- cat /sys/fs/cgroup/cgroup.controllers cpuset cpu io memory hugetlb pids rdma - # cat /sys/fs/cgroup/cgroup.controllers cpuset cpu io memory hugetlb pids rdma- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 启用所需的控制器。在本例中是 - cpu和- cpuset控制器:- echo "+cpu" >> /sys/fs/cgroup/cgroup.subtree_control echo "+cpuset" >> /sys/fs/cgroup/cgroup.subtree_control - # echo "+cpu" >> /sys/fs/cgroup/cgroup.subtree_control # echo "+cpuset" >> /sys/fs/cgroup/cgroup.subtree_control- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 这些命令为 - /sys/fs/cgroup/root 控制组的直接子组启用- cpu和- cpuset控制器。包含新创建的- Example控制组。子组 是可以指定进程,并根据标准对每个进程应用控制检查的位置。- 用户可以在任意级别读取 - cgroup.subtree_control文件的内容,以了解即时子组中哪些控制器可用于启用。注意- 默认情况下,root 控制组群中的 - /sys/fs/cgroup/cgroup.subtree_control文件包含- 内存和- pids控制器。
- 为 - Example控制组群的子- cgroup启用所需的控制器:- echo "+cpu +cpuset" >> /sys/fs/cgroup/Example/cgroup.subtree_control - # echo "+cpu +cpuset" >> /sys/fs/cgroup/Example/cgroup.subtree_control- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 这些命令可确保,直接的子组仅具有与 CPU 时间分发相关的控制器,而不是 - memory或- pids控制器。
- 创建 - /sys/fs/cgroup/Example/tasks/目录:- mkdir /sys/fs/cgroup/Example/tasks/ - # mkdir /sys/fs/cgroup/Example/tasks/- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - /sys/fs/cgroup/Example/tasks/目录定义了一个子组,它带有只与- cpu和- cpuset控制器相关的文件。现在,您可以将进程分配到此控制组,并将- cpu和- cpuset控制器选项用于您的进程。
- 可选:检查子控制组: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
					cpu 控制器只有在相关子控制组至少有 2 个在单个 CPU 上竞争时间的进程时,才会被激活 。
				
验证
- 可选:确认您已创建了一个新 - cgroup,且只有所需控制器活跃:- cat /sys/fs/cgroup/Example/tasks/cgroup.controllers cpuset cpu - # cat /sys/fs/cgroup/Example/tasks/cgroup.controllers cpuset cpu- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow