1. cgroup 是什么它是做什么的cgroupControl Group是 Linux 内核提供的一种机制用来“控制、限制、隔离、统计”进程对系统资源的使用。它的作用可以理解成——给一组进程设置一个“资源沙箱”。来自多个权威技术资料指出cgroup 能限制、统计并隔离一组进程对CPU、内存、I/O、网络等资源的使用是 Linux 系统实现容器如 LXC/Docker资源约束与隔离的关键基础cgroup 不仅能限制资源还能让系统管理员根据优先级优化资源调度提高系统整体稳定性和性能2. CGroup 的诞生2006 年Google 工程师在开源社区发起了一个用来管理和限制进程资源使用的项目名为“process containers”2007 年Linux 内核团队将其改名为 cgroup 纳入到 Linux 内核 feature 项目中。在 2008 年 1 月发布的 Linux 2.6.24这一功能被合并到了内核中。到 Linux 4.5 版本内核CGroup v2 被合并到内核这是一次在使用方式上的重大更新。CGroup 一般也被称为“cgroups”是 control groups 的简称。CGroup 机制的功能就是对 linux 的一组进程进行包括 CPU、内存、磁盘 IO、网络等在内的资源使用进行限制、管理和隔离。3. CGroup 的主要功能CGroup 的主要功能有限制资源的使用如划定内存等资源的使用上限对文件系统的缓存进行限制等优先级控制如让进程以低优先级被 CPU 调度等审计和统计某组消耗了多少 CPU 时间内存峰值是多少例如cpuacct子系统能统计 CPU 使用报告挂起进程和恢复进程执行。4. cgroups 子系统CGroup 对进程组资源的限制是通过子系统来实现的这样做的好处是可以便于新的功能的增加。目前已有的子系统有cpu 子系统主要限制进程的 cpu 使用率。cpuacct 子系统可以统计 cgroups 中的进程的 cpu 使用报告。cpuset 子系统可以为 cgroups 中的进程分配单独的 cpu 节点或者内存节点。memory 子系统可以限制进程的 memory 使用量。blkio 子系统可以限制进程的块设备 io。devices 子系统可以控制进程能够访问某些设备。net_cls 子系统可以标记 cgroups 中进程的网络数据包然后可以使用 tc 模块traffic control对数据包进行控制。net_prio 子系统这个子系统用来设计网络流量的优先级freezer 子系统可以挂起或者恢复 cgroups 中的进程。ns 子系统可以使不同 cgroups 下面的进程使用不同的 namespacehugetlb 子系统这个子系统主要针对于HugeTLB系统进行限制这是一个大页文件系统。cgroup v1 vs v2很关键因为实际系统行为依赖版本项目cgroup v1cgroup v2控制器结构多层级、各自独立统一单层级配置复杂度高更简洁统一应用场景旧系统/兼容性新系统Android 新版本 主流 Linux文档指出v2 统一了层级结构提高一致性和可维护性Android、容器和现代发行版正在逐步向 v2 迁移但仍保留 v1 以兼容某些控制器如 cpuset一句话总结cgroup Linux 给进程分配资源的“管家”和“警戒线”。 它让系统可以限制、隔离、统计并优化资源使用是容器和现代系统资源管理的核心。