Cgroupsv2实时进程控制与官方文档描述不符的技术疑问
Cgroupsv2 CPU控制器文档与实验矛盾的疑问
官方文档说明
"cpu"控制器负责分配CPU周期,为普通调度策略实现权重和绝对带宽限制模型,为实时调度策略实现绝对带宽分配模型。
警告:Cgroup2暂不支持实时进程控制,且仅当所有RT进程位于根cgroup时才能启用cpu控制器。注意系统管理软件可能在开机时已将RT进程放入非根cgroup,需移回根cgroup才能启用该控制器。
实验过程
- 在根cgroup下创建3个cgroup并启用cpu控制器,所有cgroup的
cpuset仅配置1个CPU - 为cgroup A分配权重200,cgroup B、C分配权重100,放入执行
while true循环的SCHED_NORMAL任务,通过top观察到CPU利用率为50%、25%、25%,符合预期 - 启动采用SCHED_DEAD调度、允许使用66%CPU的实时进程并放入cgroup B,结果该RT进程仍获得66%CPU,剩余33%按50%、25%、25%的比例分配给三个cgroup的普通任务,符合预期
疑问与解释
实验中成功将RT进程放入非根cgroup且cpu控制器正常工作,但与文档描述存在矛盾,原因如下:
- “实时进程控制”的定义:文档中的“暂不支持实时进程控制”指cgroup2无法对RT进程的CPU分配进行cgroup层面的约束(比如通过权重或带宽限制管控RT进程的CPU使用)。你的实验中,RT进程是按照自身SCHED_DEAD调度参数获取CPU资源,cgroup并未对其进行干预,仅对剩余CPU资源按权重分配给普通任务,这恰恰符合“不支持实时进程控制”的描述——cgroup无法介入RT进程的调度逻辑。
- 内核版本差异:文档中“仅当所有RT进程位于根cgroup时才能启用cpu控制器”是旧版本Linux内核的限制。在较新的内核版本中,该限制已被移除,允许在非根cgroup存在RT进程的情况下启用cpu控制器,但依然不支持对RT进程进行cgroup层面的调度控制。你的实验环境使用了较新内核,因此未触发该限制。
内容的提问来源于stack exchange,提问作者Bogdan Tanasa
相关产品推荐
相关产品推荐

