Linux Control Groups (cgroups)

时间:2022-12-13 07:14:17

前戏

control groups简称cgroups,是Linux内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如:cpu,memory,IO等等)的机制。最初由google的工程师提出,后来被整合进Linux内核。Cgroups也是LXC为实现虚拟化所使用的资源管理手段,可以说没有cgroups就没有LXC。

从 2.6.24 版本开始,linux 内核提供了一个叫做 cgroups(控制组)的特性。cgroups 就是 control groups 的缩写,用来对一组进程所占用的资源做限制、统计、隔离。也是目前轻量级虚拟化技术 lxc (linux container)的基础之一。每一组进程就是一个控制组,也就是一个 cgroup。cgroups 分为几个子系统,每个子系统代表一种设施或者说是资源控制器,用来调度某一类资源的使用,如 cpu 时钟、内存、块设备 等。

用途

在容器中,如果不对其做任何资源限制,则宿主机允许其占用无限大的内存空间,有时候会因为代码bug程序会一直申请内存,直到把宿主机内存占完,为了避免此类问题出现,宿主机有必要对容器进行资源限制,比如CPU,内存等,主要的作用就是限制和管理资源上限。此外,还可以进程行优先设置,以及将进程挂起和恢复等操作。

Linux Control Groups (cgroups)

验证系统Cgroups

Cgroups在内核层默认开启,从 centos 和 ubuntu 对比来结果来看,显然内核较新的 ubuntu 支持的功能更多

 cat /boot/config-5.4.0-135-generic |grep CGROUP

Linux Control Groups (cgroups)

Cgroups中的内存模块

 cat /boot/config-5.4.0-135-generic |grep MEM |grep CG

Linux Control Groups (cgroups)

Cgroups具体实现

blkio

块设备IO限制

cpu

使用调度程序为 cgroup 任务提供 cpu 的访问

cpuacct

生产 cgroup 任务的 cpu 资源

cpuset

如果是多核心的 cpu, 这个是子系统会为 cgroup 任务分配单独的 cpu 和内存

devices

允许或者拒绝 cgroup 中的任务访问设备

freezer

挂起或者恢复 cgroup 中的任务

memory

设置每个 cgroup 的内存限制以及生产内存的资源报告

net_cls

标记每个网络包以供 cgroup 方便使用

ns

命名空间子系统

perf_event

增加了对每个 cgroup 的检测跟踪的能力,可以监测属于某个特定的 cgroup 的所有线程以及运行在特定 CPU 上的线程

查看系统Cgroups

Linux Control Groups (cgroups)