CPU 受限率(CPU throttling rate)解释和计算方式

发布时间 2023-12-12 19:40:05作者: 流了个火

什么是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%