CGroup概述 (简介 组织结构和基本规则)

CGroup(Control Groups)是Linux系统中的一个功能,用于限制、记录和隔离进程组的资源使用,如CPU、内存和IO。它具有资源限制、优先级分配、资源统计和进程控制四大功能。CGroup通过subsystem(如cpu、memory、blkio等)对资源进行调度,并以hierarchy(层级树)的形式组织,允许任务(进程)在cgroup之间迁移。每个cgroup可以附加一个或多个subsystem,而subsystem可以附加到多个hierarchy,但一个task不能属于同一hierarchy的不同cgroup。

CGroup简介

CGroup是 Control Groups 的简称,通俗的来说,cgroups 可以限制、记录、隔离进程组所使用的物理资源(包括:CPU、memory、IO 等),为容器实现虚拟化提供了基本保证,是构建 Docker 等一系列虚拟化管理工具的基石。

CGroup主要有四大功能:

资源限制(Resource Limitation):cgroups 可以对进程组使用的资源总额进行限制。如设定应用运行时使用内存的上限,一旦超过这个配额就发出 OOM(Out of Memory)。

优先级分配(Prioritization):通过分配的 CPU 时间片数量及硬盘 IO 带宽大小,实际上就相当于控制了进程运行的优先级。

资源统计(Accounting): cgroups 可以统计系统的资源使用量,如 CPU 使用时长、内存用量等等,这个功能非常适用于计费。

进程控制(Control):cgroups 可以对进程组执行挂起、恢复等操作

要了解CGroup,就要了解一些术语:task(任务), cgroup(控制组),subsystem(子系统),hierarchy(层级树)

task: task就是表示系统的一个进程。

cgroup: 资源控制的单位,表示一整个任务组,每个任务组被划分相应的资源,包含了一个或者多个子系统。一个任务既可以加入到这个 cgroup 中,也可以迁移到另外一个 cgroup 中去。

subsystem: 一个资源调度器(Resource Controller,控制着CPU,内存,访问,输入输出等资源和权限。

hierarchy: 一种操作系统的组织结构,可以理解为是一个 cgroup 树,将 cgroup 串成树状结构,通过虚拟端口暴露给用户。

subsystem

### cgroup v1 与 cgroup v2 的区别及在 Linux AWS ECS on Fargate 中的具体作用 #### cgroup v1 与 cgroup v2 的主要区别 cgroup(Control Groups)是 Linux 内核的一个特性,用于限制、记录隔离进程组的资源使用。cgroup v1 cgroup v2 是该功能的两个版本,具有以下关键区别: #### 1. 层次结构 - **cgroup v1**:采用分层设计,每个子系统(如 CPU、内存、块设备 I/O 等)都有独立的层级结构[^3]。这意味着每个资源控制器(如 `cpu` 或 `memory`)都需要单独挂载。 - **cgroup v2**:统一了层次结构,所有子系统共享同一个层级结构。这种设计简化了管理,并避免了 cgroup v1 中可能出现的冲突问题。 #### 2. 文件接口 - **cgroup v1**:使用多个文件来管理任务线程。例如,`tasks` 文件用于添加或列出属于某个 cgroup 的任务。 - **cgroup v2**:引入了 `cgroup.procs` 文件,不仅支持添加列出进程,还支持线程组的所有线程[^2]。 #### 3. 委派机制 - **cgroup v1**:委派机制较为复杂,通常需要手动配置权限。 - **cgroup v2**:提供了更简单的委派机制,通过设置 `nsdelegate` 挂载选项,可以在创建命名空间时自动委派给 cgroup 命名空间[^2]。 #### 4. 子系统控制 - **cgroup v1**:每个子系统有独立的控制文件,如 `cpu.shares`、`memory.limit_in_bytes` 等。 - **cgroup v2**:所有子系统的控制都通过统一的 `cgroup.controllers` `cgroup.subtree_control` 文件进行管理[^3]。 --- #### cgroupLinux AWS ECS on Fargate 中的作用 #### 1. 在 Linux 中的作用 cgroupLinux 容器技术(如 Docker Kubernetes)的核心组件之一,用于实现资源隔离限制。以下是其具体作用: - **资源限制**:通过设置 `memory.max`(cgroup v2)或 `memory.limit_in_bytes`(cgroup v1),可以限制容器的内存使用。 - **优先级分配**:通过调整 `cpu.weight`(cgroup v2)或 `cpu.shares`(cgroup v1),可以为不同任务分配不同的 CPU 时间片。 - **统计监控**:cgroup 提供了丰富的统计信息,如 `memory.current`(cgroup v2)或 `memory.usage_in_bytes`(cgroup v1),用于监控资源使用情况。 示例代码(cgroup v2 设置内存限制): ```bash sudo mkdir /sys/fs/cgroup/memory_limit echo 536870912 | sudo tee /sys/fs/cgroup/memory_limit/memory.max > /dev/null ``` #### 2. 在 AWS ECS on Fargate 中的作用 AWS ECS on Fargate 使用 Amazon Linux 2023,默认启用了 cgroup v2[^3]。在这种环境中,cgroup 的作用包括: - **资源分配**:Fargate 根据任务定义中的 CPU 内存限制,通过 cgroup v2 动态分配资源。 - **隔离性**:确保每个容器运行在独立的 cgroup 中,避免资源争用。 - **自动化管理**:Fargate 自动处理 cgroup 的挂载配置,用户无需手动干预。 示例代码(查看当前任务的 cgroup 配置): ```bash cat /proc/self/cgroup ``` --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值