【CGroup原理篇】4. CPU子系统

本文详细介绍了CGroup中的CPU子系统,包括CFS和RT调度程序的参数配置,如cpu.shares、cpu.cfs_period_us、cpu.cfs_quota_us、cpu.rt_period_us和cpu.rt_runtime_us等。通过实例展示了如何限制控制组的CPU使用,如限制CPU的25%、75%、100%及多核CPU的使用情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面

CPU子系统通过CFS、RT两个调度程序来实现控制组对CPU使用的管理。

  • 完全公平调度程序(CFS) — 根据进程优先级 ∕ 权重或控制组分配CPU使用的调度程序,在控制组间按比例分配 CPU时间(CPU 带宽)。
  • 实时调度程序(RT) — 对实时进程使用 CPU 的时间进行限定。

一、CFS参数配置

1.1 cpu.shares

设置控制组中CPU可用时间的相对比例。参数值为大于等于2的整数。例如:在两个不同控制组,但cpu.shares=100的进程,获得的CPU时间是相同的。在一个控制组内cpu.shares=200的进程获得CPU时间是cpu.shares=100进程的两倍。

多核系统中,CPU时间比例是在所有CPU核心中分配的。例如系统中由一个4核CPU,其中控制组A获得25%的CPU,控制组B获得75%的CPU;如果此时启动4个大量消耗CPU的进程,(一个在控制组A,三个在控制组B),极端条件CPU耗尽的情况下,会得到下面的CPU分配结果:

### Cgroup 的底层实现原理 Cgroups(Control Groups)是一种 Linux 内核功能,用于限制、记录和隔离一组进程的资源分配[^1]。其核心目标是对 CPU、内存、磁盘 I/O 和其他硬件资源进行管理和控制。 #### 1. 基本组成结构 Cgroups 主要由以下几个部分构成: - **子系统 (Subsystems)**:每个子系统负责管理一种特定类型的资源,例如 `cpu` 子系统用来管理 CPU 时间片分配,`memory` 子系统则用来设置内存上限。 - **分层树形结构**:Cgroups 使用层次化的文件系统来表示不同进程组的关系。每一层可以继承父节点的配置或者定义自己的独立策略。 #### 2. 底层工作流程 当操作系统启动时会挂载 cgroup 文件系统到指定目录下,默认路径通常是 `/sys/fs/cgroup/` 。管理员可以通过修改这些特殊文件的内容来调整某个 cgroup 下所有成员的行为模式。比如设定最大允许使用的 RAM 数量或优先级权重等参数值。 以下是简化版的工作流描述: 1. 创建一个新的 control group; 2. 将需要被管控的应用程序加入该新建立起来的任务集合里去; 3. 配置好相应的 resource limits 条件之后保存生效即可完成整个过程操作步骤说明如下图所示: ![CGroup Workflow](https://example.com/images/cgroup-workflow-diagram.png) 此图为假设链接,请替换为实际存在的图片地址。 #### 3. 实际应用案例分析 对于容器技术而言,像 LXC 或 Docker 这样的平台都依赖于 cgroups 提供的基础能力来进行实例间的资源共享与分离处理机制设计思路介绍完毕后我们再来看一段简单的 python 脚本来演示如何利用 libcgroup 接口库函数接口调用方法例子: ```python import os from pylibcgroup import Cgroup def create_and_configure_cgroup(name, cpu_quota=None, memory_limit=None): cg = Cgroup(name) if not os.path.exists('/sys/fs/cgroup/cpu/' + name): cg.create() if cpu_quota is not None: cg.set_param('cpu.cfs_quota_us', str(cpu_quota)) if memory_limit is not None: cg.set_param('memory.limit_in_bytes', str(memory_limit)) create_and_configure_cgroup('my_test_group', cpu_quota=50000, memory_limit=int(2e9)) # 设置CPU配额为50ms每秒, 内存限额为2GB. ``` 上述代码片段展示了通过 Python 编程语言结合第三方扩展模块 PyLibCGROUP 如何快速便捷地构建自定义规则集并应用于具体场景当中实践运用技巧分享结束语句结尾处记得加上适当编号标记引用出处哦! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高桐@BILL

分享快乐,快乐分享...

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值