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功能
檢查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
在具體的子cgroup中開啟CPU Burst功能。
預設情況下,cgroup v1介面中的CPU Burst功能在各個子cgroup中均未開啟。具體的開啟方式如下:
進入子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資源。檢查當前預設的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
)。echo 400000 > cpu.cfs_quota_us 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
)。echo 600000 > cpu.cfs_burst_us
查詢CPU Burst的統計資料
進入待查詢資料的子cgroup路徑下。
cd /sys/fs/cgroup/cpu/子cgroup目錄名稱/
查看統計資料。
cat cpu.stat
返回結果中,主要的資訊說明如下:
nr_burst
資料:當前子cgroup觸發CPU Burst的次數。burst_time
資料:當前子cgroup突發使用CPU資源的時間。