Cgroups(control groups)是Linux内核中的一个功能,用于限制进程组的资源使用。Cgroups允许将一组进程绑定在一起,并将一组资源分配给这组进程。这样可以在系统上实现资源隔离,从而避免出现资源争用和冲突。Cgroups的实现通过控制器来完成。控制器是Cgroups的一个功能模块,负责限制和分配特定的资源。Linux内核中有多个控制器,包括CPU、内存、I/O和网络等。每个控制器都可以控制指定资源的使用。在使用Cgroups时,管理员需要创建一个Cgroup层次结构,然后将进程添加到指定的Cgroup中。可以使用命令行工具(如cgroup_tools)或API来创建Cgroup。一旦进程添加到Cgroup中,它将受到Cgroup所分配的资源的限制。进程只能使用分配给Cgroup的资源,而不能超出这些限制。cgroups像进程一样以层次结构组织,子cgroups继承其父cgroup的某些属性。但是,两种模型之间存在差异。Linux进程模型:Linux系统上的所有进程都是一个共同父进程的子进程,init进程,该进程由内核在启动时执行并启动其他进程(这些进程可能再启动自己的子进程)。因为所有进程都来自单个父进程,所以Linux进程模型是一个单一的层次结构或树。此外,除init之外的每个Linux进程都继承其父进程的环境(例如PATH变量)和某些其他属性(例如打开的文件描述符)。Cgroup模型:cgroups与进程类似,因为它们是分层的,且子cgroup从其父cgroup继承某些属性。根本区别在于,系统上可以存在许多不同的cgroup层次结构。如果Linux进程模型是一个进程树,则cgroup模型是一个或多个不连接的任务(即进程)树。多个单独的cgroup层次结构是必要的,因为每个层次结构都连接到一个或多个子系统。一个子系统表示单个资源,例如CPU时间或内存。 Linux中可用的子系统包括:- blkio——此子系统设置对块设备(例如物理驱动器(磁盘、固态或USB))的输入/输出访问限制。
- cpu——此子系统使用调度程序为cgroup任务提供CPU访问权限。
- cpuacct——此子系统自动生成关于在cgroup中使用的任务使用的CPU资源的报告。
- cpuset——此子系统将单个CPU(在多核系统上)和内存节点分配给cgroup中的任务。devices——此子系统允许或拒绝cgroup中的任务访问设备。