CPU 受限率(CPU throttling rate)解释和计算方式
什么是CPU受限率
CPU受限率用于衡量在特定时间段内,CPU 被限制运行的程度(即毛刺)。0%表示CPU没有受到限制,100%表示容器的CPU受限率达到100%。
CPU受限率相关指标
CPU 受限率可以通过计算在给定时间段内,CPU 被限制的时间与总时间的比值来获得。例如,如果在 100 毫秒的时间段内,CPU 被限制了 20 毫秒,那么 CPU 受限率为 20%。
CPU受限后,一般来说可能导致服务处理耗时增加。
在 Linux 系统中,可以通过分析 CFS(完全公平调度器)组调度器的统计信息来计算 CPU 受限率。这些信息可以在 /sys/fs/cgroup/cpu(或 /sys/fs/cgroup/cpuacct)目录下的 cpu.stat 文件中找到。cpu.stat 文件包含 nr_periods(控制周期数)和 nr_throttled(被限制次数)参数。
nr_periods:表示自从 CFS 组调度器启动以来,已经经过了多少个控制周期。一个控制周期是指 CFS 组调度器分配给组的固定时间窗口。在每个控制周期中,CFS 组调度器会根据组的权重分配 CPU 时间。
nr_throttled:表示自从 CFS 组调度器启动以来,该组被限制(throttled)的次数。当一个组在控制周期内已经消耗了其分配的 CPU 时间时,组会被限制,直到下一个控制周期开始。
如何计算cpu受限率
要计算 CPU 受限率,可以使用以下方法:
start time:
cat /sys/fs/cgroup/cpu/cpu.stat
nr_periods 146232
nr_throttled 130
throttled_time 30197510213
nr_periods_1 = 146232
nr_throttled_1 = 130
10秒后
cat /sys/fs/cgroup/cpu/cpu.stat
nr_periods 146332
nr_throttled 150
throttled_time 30197510213
nr_periods_2 = 146332
nr_throttled_2 = 150
则这10秒钟的cpu受限率 = (nr_throttled_2 - nr_throttled_1) / (nr_periods_2 - nr_periods_1) = (150-130) / (146332 - 146232) = 20%
参考资料
精准限制CPU:Cgroups https://zhuanlan.zhihu.com/p/551957994
CFS Bandwidth Control https://www.kernel.org/doc/html/v5.7/scheduler/sched-bwc.html