CPU Burst功能允许容器被CPU限流时,能够突发性地使用一定量的CPU资源,从而提升容器性能并降低系统的延迟指标。因此,Alibaba Cloud Linux 2(内核版本4.19.91-22.al7
开始)和Alibaba Cloud Linux 3为cgroup v1接口提供了CPU Burst功能。本文介绍如何在cgroup v1接口开启CPU Burst功能,以及如何查询CPU Burst的统计数据。
关于CPU Burst的详细信息,请参见Kill the Annoying CPU Throttling。
开启CPU Burst功能
检查cgroup v1接口中的CPU Burst功能的全局开关是否已打开。
cat /proc/sys/kernel/sched_cfs_bw_burst_enabled
返回结果说明:
如果返回结果为
1
,则表示CPU Burst功能的全局开关已打开。说明默认情况下,cgroup v1接口中的CPU Burst功能的全局开关为打开状态。
如果返回结果不为
1
,则表示CPU Burst功能的全局开关已关闭。运行以下命令,打开全局开关。
sudo sh -c 'echo 1 > /proc/sys/kernel/sched_cfs_bw_burst_enabled'
在具体的子cgroup中开启CPU Burst功能。
说明默认情况下,cgroup v1接口中的CPU Burst功能在各个子cgroup中均未开启。
进入子cgroup路径下,检查CFS Bandwidth Controller限流是否处于生效状态。
<cgroup>
需替换为子cgroup目录名称。cd /sys/fs/cgroup/cpu/<cgroup>/ cat cpu.cfs_period_us cat cpu.cfs_quota_us
若
cat cpu.cfs_quota_us
结果为正整数,则表示CFS Bandwidth Controller限流处于生效状态,进而在启用CPU Burst功能后,容器才可以获得超出CPU限流的CPU资源。检查当前默认的CPU Burst设置。
cat cpu.cfs_burst_us
返回结果的默认值为
0
,表示CPU Burst功能未开启。设置
cpu.cfs_burst_us
的值以开启CPU Burst功能。您可以设置一个适用的正整数启用CPU Burst功能,且这个正整数表示子cgroup突发额外使用的CPU资源的上限。本文通过以下示例场景,介绍如何开启CPU Burst功能。
配置CFS Bandwidth Controller带宽控制器默认的
cpu.cfs_quota_us
与cpu.cfs_period_us
。以下配置,将CPU资源的使用周期(
cpu.cfs_period_us
)设置为100ms,每个周期中的CPU限流(cpu.cfs_quota_us
)设置为400ms,则子cgroup将会持续获得4个CPU资源(cpu.cfs_quota_us
/cpu.cfs_period_us
)。sudo sh -c 'echo 400000 > cpu.cfs_quota_us' sudo sh -c 'echo 100000 > cpu.cfs_period_us'
配置
cpu.cfs_burst_us
以开启CPU Burst功能。以下配置,将CPU Burst的值设置为600ms,表示开启了CPU Burst功能,且允许子cgroup可以突发额外使用最多6个CPU资源(
cpu.cfs_burst_us
/cpu.cfs_period_us
)。sudo sh -c 'echo 600000 > cpu.cfs_burst_us'
查询CPU Burst的统计数据
进入待查询数据的子cgroup路径下,查看统计数据。
<cgroup>
需替换为子cgroup目录名称。
cd /sys/fs/cgroup/cpu/<cgroup>/
cat cpu.stat
返回结果中,主要的信息说明如下:
nr_burst
数据:当前子cgroup触发CPU Burst的次数。burst_time
数据:当前子cgroup突发使用CPU资源的时间。