24.3. 通过调整 CPU 带宽来控制应用程序的 CPU 时间分布
				您需要为 cpu 控制器的相关文件分配值,以控制分发到特定 cgroup 树下应用程序的 CPU 时间。
			
先决条件
- 您有 root 权限。
- 您至少有两个用于控制 CPU 时间分发的应用程序。
- 您确保相关的应用程序在同一 CPU 上竞争 CPU 时间,如 为 CPU 时间分布准备 cgroup 中所述。
- 
						您已挂载了 cgroups-v2文件系统,如 挂载 cgroups-v2 中所述。
- 
						您在父控制组和子控制组中启用了 cpu和cpuset控制器,如 为 CPU 时间分布准备 cgroup 中所述。
- 您在 - /sys/fs/cgroup/根控制组 中创建了两级 子控制组,如下例所示:- … ├── Example │ ├── tasks … - … ├── Example │ ├── tasks …- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
流程
- 配置 CPU 带宽以在控制组群内实现资源限制: - echo "200000 1000000" > /sys/fs/cgroup/Example/tasks/cpu.max - # echo "200000 1000000" > /sys/fs/cgroup/Example/tasks/cpu.max- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 第一个值是允许的时间配额(以微秒为单位),用于子组中的所有进程可以在一段时间内运行。第二个值指定时间段的长度。 - 在一段时间内,当控制组中的进程共同耗尽此配额指定的时间时,它们会在该时间段的剩余时间内节流,并且直到下一个时间段才允许运行。 - 此命令设置 CPU 时间分布控制,以便 - /sys/fs/cgroup/Example/tasks子组中的所有进程每 1 秒只能在 CPU 上运行 0.2 秒。也就是说,每秒的五分之一。
- 可选:验证时间配额: - cat /sys/fs/cgroup/Example/tasks/cpu.max 200000 1000000 - # cat /sys/fs/cgroup/Example/tasks/cpu.max 200000 1000000- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 将应用的 PID 添加到 - Example/tasks子组中:- echo "34578" > /sys/fs/cgroup/Example/tasks/cgroup.procs echo "34579" > /sys/fs/cgroup/Example/tasks/cgroup.procs - # echo "34578" > /sys/fs/cgroup/Example/tasks/cgroup.procs # echo "34579" > /sys/fs/cgroup/Example/tasks/cgroup.procs- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 示例命令确保所需的应用程序成为 - Example/tasks子组的成员,并且不超过为此子组配置的 CPU 时间分布。
验证
- 验证应用程序是否在指定的控制组群中运行: - cat /proc/34578/cgroup /proc/34579/cgroup 0::/Example/tasks 0::/Example/tasks - # cat /proc/34578/cgroup /proc/34579/cgroup 0::/Example/tasks 0::/Example/tasks- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 上面的输出显示了在 - Example/tasks子组中运行的指定应用程序的进程。
- 检查节流应用程序的当前 CPU 消耗: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 请注意, - PID 34578和- PID 34579的 CPU 消耗已减少到 10%。- Example/tasks子组将其进程控制到 CPU 时间的 20%。由于控制组中有 2 个进程,因此每个进程可以使用 10% 的 CPU 时间。