控制群组(congrol group)简介

控制群组(control group)也称为 cgroup ,是Linux内核的功能:在系统中运行的层级制进程组,可以对其进行资源分配(如 CPU 时间、系统内存、网络带宽或者这些资源的组合)。通过cgroup可以在分配、排序、拒绝、管理和监控系统资源等方面,可以进行精细化控制。硬件资源可以在应用程序和用户间智能分配,从而增加整体效率。

控制群组可对进程进行层级式分组并标记,并对其可用资源进行限制。通过将 cgroup 层级系统(cgroup hierarchies)与 systemd 单位树(systemd unit tree)捆绑,可以把资源管理设置从进程级别移至应用程序级别。这样就能够通过 systemctl 命令或者修改 systemd 单元文件来管理系统资源。

备注

传统对 libcgroup 软件包中的 cgconfig 指令已不建议使用,容易和默认的cgroup层级产生冲突。

通过 systemctl 或者 cgconfig 可以管理内核 cgroup 管控组(也称为子系统),主要的cgroup管控组是 cpu, memory 和 blkio。

cgroup默认层级

默认情况下, systemd 会自动创建 slicescopeservice 单位的层级,为cgroup树提供统一结构。使用 systemctl 指令,可以创建自定义 slice 进一步修改结构。 systemd 也自动为 /sys/fs/cgroup/ 目录中重要的内核资源管控器挂载层级。

警告

虽然不推荐使用 libcgroup 软件包中的 cgconfig 工具,但它可以为 systemd (尤其是 net-prio 管控器)暂不支持的管控器挂载、处理层级。永远不要使用 libcgropup 工具去修改 systemd 默认挂载的层级,否则可能会导致异常情况。

systemd的unit type(单位类型)

系统中运行的所有进程,都是 systemd init 进程的子进程。

在资源管控方面,systemd 提供了三种单位类型:

  • service : 一个或一组进程,由 systemd 根据单元配置文件启动。

参考