Linux内核cgroup v2 CFS中cpu.stat throttled_usec统计规则咨询
cgroup v2 CFS调度器中throttled_usec的统计逻辑
核心结论
throttled_usec统计的是cgroup整体被限流的总挂钟时间,而非所有单个线程限流时间的总和。
具体统计逻辑
当cgroup的CPU配额在周期内耗尽触发限流时,内核会记录限流开始的时间戳。只要cgroup处于限流状态,这段挂钟时间就会被持续累计——哪怕cgroup下有多个线程同时被阻塞等待配额恢复,也只会按实际流逝的挂钟时长统计,不会把每个线程的等待时间相加。
举个实际场景:假设cgroup下有3个线程,在同一段15ms的限流窗口里都无法获取CPU时间,那么throttled_usec只会增加15ms,而不是3×15=45ms。
5.14版本内核的实现细节
- 内核通过
struct cfs_rq(CFS运行队列)中的throttled_clock字段记录限流起始时间。 - 触发限流时调用
cfs_rq_throttle()标记起始点;当配额重置或限流解除时,调用cfs_rq_unthrottle()计算从起始到当前的挂钟时长,直接累加到cgroup的throttled_usec指标中。 - 整个统计过程是针对cgroup的CFS调度实例整体进行的,不存在对单个线程的限流时间求和操作。
内容的提问来源于stack exchange,提问作者ALZ
相关产品推荐
相关产品推荐

