全部產品
Search
文件中心

Alibaba Cloud Linux:在cgroup v1介面開啟CPU Burst功能

更新時間:Jul 17, 2024

Alibaba Cloud Linux 2(核心版本4.19.91-22.al7開始)和Alibaba Cloud Linux 3為cgroup v1介面提供了CPU Burst功能。CPU Burst功能允許容器被CPU限流時,突發使用CPU資源,進而提升容器效能、降低系統的延遲指標。本文介紹如何在cgroup v1介面開啟CPU Burst功能,以及如何查詢CPU Burst的統計資料。

背景資訊

在Container Service中,容器允許使用的CPU資源被核心的CFS Bandwidth Controller(頻寬控制器)限流。當您在cgroup v1介面開啟CPU Burst功能後,CPU Burst功能允許容器突發使用限流之外的CPU資源。該功能既可以保證容器啟動並執行服務品質,又不降低容器部署密度。

說明

突發是指允許容器超過CPU限流使用額外的CPU資源。

關於CPU Burst的詳細資料,您可以通過Alibaba Cloud Linux 2核心文檔進行瞭解。Alibaba Cloud Linux 2核心文檔儲存在Debuginfo包和源碼包內,路徑為Documentation/scheduler/sched-bwc.rst。下載Debuginfo包和源碼包的具體操作,請參見Alibaba Cloud Linux 2使用說明

功能原理

CPU Burst功能允許突發使用的CPU資源依賴於日常的資源積累。比如,容器在日常運行中使用的CPU資源未超過CPU限流,則空餘的CPU資源將會被積累。後續當容器運行需要大量CPU資源時,將通過CPU Burst功能突發使用CPU資源,這部分突發使用的資源來源於已積累的資源。以休假體系作為類比:

假如您每年休假時間為4天(CPU限流),未休的假期可以存放起來後續使用,但存放上限為4天(CPU Burst)。當您第一年、第二年各只休了1天的假期,那麼沒有休息的6天假期可以存放起來。當第三年的時候,理論上您可以休息共計10天的假期,但因為有存放上限(CPU Burst),則實際可以休息至多8天的假期。

開啟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功能的全域開關已關閉。您可以運行以下命令開啟全域開關:

      echo 1 > /proc/sys/kernel/sched_cfs_bw_burst_enabled
  2. 在具體的子cgroup中開啟CPU Burst功能。

    預設情況下,cgroup v1介面中的CPU Burst功能在各個子cgroup中均未開啟。具體的開啟方式如下:

    1. 進入子cgroup路徑下,檢查CFS Bandwidth Controller限流是否處於生效狀態。

      cd /sys/fs/cgroup/cpu/子cgroup目錄名稱/
      cat cpu.cfs_period_us
      cat cpu.cfs_quota_us

      如果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)。

        echo 400000 > cpu.cfs_quota_us
        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)。

        echo 600000 > cpu.cfs_burst_us

查詢CPU Burst的統計資料

  1. 進入待查詢資料的子cgroup路徑下。

    cd /sys/fs/cgroup/cpu/子cgroup目錄名稱/
  2. 查看統計資料。

    cat cpu.stat

    返回結果中,主要的資訊說明如下:

    • nr_burst資料:當前子cgroup觸發CPU Burst的次數。

    • burst_time資料:當前子cgroup突發使用CPU資源的時間。