在cgroup v1接口开启CPU Burst功能

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的详细信息,请参见干掉讨厌的CPU限流

开启CPU Burst功能

  1. 检查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'
  2. 在具体的子cgroup中开启CPU Burst功能。

    说明

    默认情况下,cgroup v1接口中的CPU Burst功能在各个子cgroup中均未开启。

    1. 进入子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资源。

    2. 检查当前默认的CPU Burst设置。

      cat cpu.cfs_burst_us

      返回结果的默认值为0,表示CPU Burst功能未开启。

    3. 设置cpu.cfs_burst_us的值以开启CPU Burst功能。

      您可以设置一个适用的正整数启用CPU Burst功能,且这个正整数表示子cgroup突发额外使用的CPU资源的上限。本文通过以下示例场景,介绍如何开启CPU Burst功能。

      1. 配置CFS Bandwidth Controller带宽控制器默认的cpu.cfs_quota_uscpu.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'
      2. 配置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资源的时间。