Linux 6提供了一个新的内核特性:control groups ,在本指南中被称为cgroups 。Cgroup 允许您在系统上运行的用户定义的任务(进程)组之间分配资源,例如 CPU 时间、系统内存、网络带宽或这些资源的组合。您可以监控您配置的 cgroup,拒绝 cgroup 访问某些资源,甚至可以在正在运行的系统上动态地重新配置您的 cgroup。cgconfig( control group config )服务可以配置为在启动时启动并重新建立您预定义的 cgroups,从而使它们在重新启动后保持不变。
通过使用 cgroup,系统管理员可以对系统资源的分配、优先级排序、拒绝、管理和监控进行细粒度控制。硬件资源可以在任务和用户之间适当分配,提高整体效率。
1.1. Cgroups 是如何组织的
Cgroups 是按层次组织的,就像进程一样,子 cgroups 继承了它们父母的一些属性。但是,这两种模型之间存在差异。
Linux 进程模型
Linux 系统上的所有进程都是一个公共父进程的子进程:该init进程由内核在启动时执行并启动其他进程(这些进程可能会依次启动它们自己的子进程)。因为所有进程都来自一个父进程,所以 Linux 进程模型是一个单一的层次结构或树。
此外,每个 Linux 进程除了继承其父进程的 init环境(例如 PATH 变量)[1]和某些其他属性(例如打开的文件描述符)。
Cgroup 模型
Cgroup 与进程的相似之处在于:
-
它们是分层的,并且
-
子 cgroup 从其父 cgroup 继承某些属性。
根本区别在于许多不同的 cgroup 层次结构可以同时存在于一个系统上。如果说 Linux 进程模型是一棵单独的进程树,那么 cgroup 模型就是一个或多个独立的、不连接的任务树(即进程)。
多个独立的 cgroup 层次结构是必要的,因为每个层次结构都附加到_一个或多个_ 子系统。子系统[2]表示单个资源,例如 CPU 时间或内存。Red Hat Enterprise Linux 6 提供十个 cgroup 子系统,按名称和功能列出如下。
Red Hat Enterprise Linux 中的可用子系统
-
blkio— 该子系统对物理驱动器(磁盘、固态或 USB)等块设备的输入/输出访问设置限制。 -
cpu— 该子系统使用调度程序为 cgroup 任务提供对 CPU 的访问。 -
cpuacct— 该子系统生成有关 cgroup 中任务使用的 CPU 资源的自动报告。 -
cpuset— 该子系统将单个 CPU(在多核系统上)和内存节点分配给 cgroup 中的任务。 -
devices— 该子系统允许或拒绝 cgroup 中的任务访问设备。 -
freezer— 该子系统暂停或恢复 cgroup 中的任务。 -
memory— 该子系统对 cgroup 中任务使用的内存设置限制,并生成关于这些任务使用的内存资源的自动报告。 -
net_cls— 该子系统使用类别标识符 (classid) 标记网络数据包,允许 Linux 流量控制器 (tc) 识别源自特定 cgroup 任务的数据包。 -
net_prio— 该子系统提供了一种动态设置每个网络接口的网络流量优先级的方法。 -
ns—_命名空间_子系统。 -
perf_event— 该子系统识别任务的 cgroup 成员资格,可用于性能分析。
子系统(资源控制器)的定义非常笼统:它作用于一组任务,即进程。
Cgroups vs 进程
Cgroups(Control Groups)和进程是两个不同的概念,用于在操作系统中管理资源和执行程序。
Cgroups是Linux内核提供的一种机制,用于限制、账户和隔离进程组的资源使用。通过使用cgroups,可以将一组相关的进程组织在一起,并对它们施加资源限制,如CPU、内存、磁盘IO等。Cgroups可以用于实现资源管理、负载均衡和隔离等功能,使得系统管理员能够更好地控制和管理系统中的资源分配。
进程是正在执行的程序实例。它是计算机系统中的一个基本概念,表示正在运行的程序在操作系统中分配的资源单元。每个进程都有自己的地址空间、堆栈、文件描述符等资源,它们可以执行计算任务、访问系统资源和与其他进程进行通信。
异同点如下:
- Cgroups是一种资源管理机制,用于对一组相关进程施加资源限制和隔离,而进程是正在执行的程序实例。
- Cgroups可以用于控制进程组的资源使用,如CPU、内存等,而进程本身并不具备这种能力。
- Cgroups是由操作系统内核提供的机制,而进程是操作系统的基本执行单位。
- 通过使用Cgroups,可以对进程组施加资源限制和隔离,从而实现资源管理和控制的目的。
总之,Cgroups和进程是不同的概念,前者是一种资源管理机制,后者是执行程序的实例。Cgroups提供了对进程组的资源管理和控制,使系统管理员能够更好地管理系统中的资源分配。