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資源的時間。