全部產品
Search
文件中心

Alibaba Cloud Linux: cgroup v1與cgroup v2的區別

更新時間:Jul 17, 2024

在Linux系統中,cgroup(Control Groups)是一種資源管理和限制的機制,用於限制、記錄和隔離進程組使用的實體資源(如CPU、記憶體、I/O等),通過cgroup,父進程可以控制子進程組的資源使用。cgroup v1和cgroup v2是cgroup機制的兩個主要版本,它們在設計理念和使用方法上存在一些顯著差異。本文介紹cgroup v1與cgroup v2的主要區別。

通用介面差異

cgroup v1介面

介面名稱

作用

是否自研

對應cgroup v2介面

cgroup.procs

寫入進程PID即可把進程遷移到該cgroup。

cgroup.procs

cgroup.clone_children

如果為1,子cgroup會繼承自己的cpuset的配置。

說明

只對cpuset子系統生效,歷史遺留因素在通用介面裡。

不涉及

cgroup.sane_behavior

v2的實驗特性的介面,v2正式發布後為了向後相容而存在

不涉及

notify_on_release

如果為1,當前cgroup變空時會執行release_agent內的進程。

說明

只在根組存在。

可以通過cgroup.events實作類別似功能

release_agent

tasks

寫入線程tid即可把線程遷移到該cgroup。

cgroup.threads

pool_size

控制cgroup緩衝池的大小,在高並發情境下可以加速cgroup的建立和綁定。

說明

依賴cgroup_rename,在cgroup v2中暫無法使用。

不涉及

cgroup v2介面

介面名稱

作用

是否自研

對應cgroup v1介面

cgroup.procs

寫入進程PID即可把進程遷移到該cgroup。

cgroup.procs

cgroup.type

寫入threaded可以開啟線程粒度的控制。

說明

只支援CPUpidsperf_event

不涉及

cgroup.threads

寫入線程tid即可把線程遷移到該cgroup。

說明

需要cgroup.type為threaded。

tasks

cgroup.controllers

展示當前cgroup開啟了哪些子系統。

不涉及

cgroup.subtree_control

控制子cgroup開啟哪些子系統。

說明

需要是cgroup.controllers的子系統。

不涉及

cgroup.events

記錄了當前cgroup是否管控進程,以及當前cgroup是否被凍結,可以用fsnotify監聽狀態是否變化。

說明

根組中不存在。

可以通過notify_on_release和 release_agent實作類別似功能

cgroup.max.descendants

控制最大子孫cgroup的數量。

不涉及

cgroup.max.depth

控制子孫cgroup的最大深度。

不涉及

cgroup.stat

展示當前cgroup有多少個子孫cgroup和處於dying狀態(銷毀中)的子孫cgroup。

不涉及

cgroup.freeze

控制進程凍結。

說明

根組中不存在。

freezer子系統中的freezer.state

cpu.stat

展示CPU使用的統計資訊。

不涉及

io.pressure

展示PSI資訊,支援poll。更多資訊,請參見:

在cgroup v1介面開啟PSI功能後,cpuacct子系統下的io.pressure、memory.pressure、cpu.pressure來實現該功能

memory.pressure

cpu.pressure

子系統介面差異

CPU

cgroup v1介面

介面名稱

作用

是否自研

對應cgroup v2介面

cpu.shares

控制權重,根據權重佔比來分配CPU的時間片,預設值為1024。

cpu.weight,cpu.weight.nice,單位不一樣

cpu.idle

控制當前cgroup組的調度策略類型是否為idle類型,idle類型會根據最小的CPU share分配時間片,且不再有最小已耗用時間的保障,更容易把CPU讓給非idle類型的進程。

說明

cpu.idle為1時,cpu.shares不再可寫,cpu.shares值變為3。

cpu.idle

cpu.priority

細粒度搶佔優先順序,時鐘中斷/喚醒時判斷搶佔,根據優先順序的差值進行調整,使高優先順序更容易搶佔低優先順序。

cpu.priority

cpu.cfs_quota_us

cpu cfs頻寬控制,在 cpu.cfs_period_us的周期內,組內的進程最多已耗用時間為 cpu.cfs_quota_us。

cpu.max

cpu.cfs_period_us

cpu.cfs_burst_us

在cpu.cfs_period_us的周期內,允許進程突發啟動並執行時間。更多資訊,請參見在cgroup v1介面開啟CPU Burst功能

cpu.max.burst

cpu.cfs_init_buffer_us

剛啟動時,允許進程突發啟動並執行時間。

cpu.max.init_buffer

cpu.stat

展示CPU頻寬控制相關統計資訊,例如經歷了多少個period,被throttle了多少次等。

cpu.stat

cpu.rt_runtime_us

cpu rt頻寬控制,對於rt進程,在 cpu.rt_period_us的周期內,組內的進程最多啟動並執行時間為cpu.rt_runtime_us。

不涉及

cpu.rt_period_us

不涉及

cpu.bvt_warp_ns

控制group identity屬性,區分在離線進程,給線上進程更好的CPU QoS保障。更多資訊,請參見Group Identity功能說明

cpu.bvt_warp_ns

cpu.identity

cpu.identity

cpu.ht_stable

控制是否製造SMT對端噪音,用於控制SMT算力穩定。

不涉及

cpu.ht_ratio

控制是否因為SMT對端空閑額外計算使用的quota,用於控制SMT算力穩定。

cpu.ht_ratio

cgroup v2介面

說明

由於cgroup v2中不再支援cpuacct子系統,原cpuacct部分介面或相關功能在CPU子系統下實現。

介面名稱

作用

是否自研

對應cgroup v1介面

cpu.weight

控制權重,根據權重佔比來分配CPU的時間片,預設值為100。

cpu.shares,單位不一樣

cpu.weight.nice

控制權重,根據權重佔比來分配CPU的時間片,預設值為0。

cpu.shares,單位不一樣

cpu.idle

控制當前cgroup組的調度策略類型是否為idle類型,idle類型的會根據最小的CPU share分配時間片,且不再有最小已耗用時間的保障,更容易把CPU讓給非idle類型的進程。

說明

cpu.idle 為1時,cpu.weight、cpu.weight.nice不再可寫,變為最小權重(0.3),同時cpu.weight會因為取整的原因,讀取的值為0。

cpu.idle

cpu.priority

細粒度搶佔優先順序,時鐘中斷/喚醒時判斷搶佔,根據優先順序的差值進行放縮,讓高優先順序更容易搶佔低優先順序。

cpu.priority

cpu.max

CPU cfs頻寬控制,包含兩個值,對應quota和period,在 period內組內進程最多運行quota的時間。

cpu.cfs_quota_us, cpu.cfs_period_us

cpu.max.burst

在cpu.max的period周期內,允許進程突發啟動並執行時間。

cpu.max.burst

cpu.max.init_buffer

剛啟動時,允許進程突發啟動並執行時間。

cpu.cfs_init_buffer_us

cpu.bvt_warp_ns

控制group identity屬性,區分離線進程,給線上進程更好的CPU QoS保障。

cpu.bvt_warp_ns

cpu.identity

cpu.identity

cpu.sched_cfs_statistics

cfs相關資料統計,例如已耗用時間,等待同級/非同級cgroup的時間等。

說明

需要開啟 kernel.sched_schedstats。

cpuacct.sched_cfs_statistics

cpu.wait_latency

進程在隊列中等待的延遲分布。

說明

需要開啟kernel.sched_schedstats和/proc/cpusli/sched_lat_enabled。

cpuacct.wait_latency

cpu.cgroup_wait_latency

進程組在隊列中等待的延遲分布,與wait_latency的區別在於,wait_latency統計task se,cgroup_wait_latency統計group se。

說明

需要開啟kernel.sched_schedstats和/proc/cpusli/sched_lat_enabled。

cpuacct.cgroup_wait_latency

cpu.block_latency

進程因非I/O原因導致的阻塞的延遲分布。

說明

需要開啟kernel.sched_schedstats和/proc/cpusli/sched_lat_enabled。

cpuacct.block_latency

cpu.ioblock_latency

進程因I/O原因導致的阻塞的延遲分布。

說明

需要開啟kernel.sched_schedstats和/proc/cpusli/sched_lat_enabled

cpuacct.ioblock_latency

cpu.ht_ratio

控制是否因為SMT對端空閑額外計算使用的quota,用於控制SMT算力穩定。

說明

需要開啟core scheduling才會生效。

cpu.ht_ratio

cpuset

cgroup v1介面

介面名稱

作用

是否自研

對應cgroup v2介面

cpuset.cpus

控制進程啟動並執行CPU範圍。

說明

為空白時cgroup不允許綁定進程。

cpuset.cpus

cpuset.mems

控制進程分配記憶體的NUMA節點範圍。

說明

為空白時cgroup不允許綁定進程。

cpuset.mems

cpuset.effective_cpus

展示進程運行具體生效的CPU範圍,受CPU熱插拔影響。

cpuset.cpus.effective

cpuset.effective_mems

展示進程分配記憶體具體生效的NUMA節點範圍,受記憶體熱插拔影響。

cpuset.mems.effective

cpuset.cpu_exclusive

控制獨立使用的CPU範圍,不能與同級其他組的有交集。

可以通過cpuset.cpus.partition實作類別似功能

cpuset.mem_exclusive

控制獨立使用的NUMA節點範圍,不能與同級其他組的有交集。

不涉及

cpuset.mem_hardwall

當設定為1,表示記憶體只能從cpuset所屬的記憶體node中分配。

不涉及

cpuset.sched_load_balance

控制是否在cpuset.cpus的範圍內進行建立調度域並負載平衡,預設開啟。

不涉及

cpuset.sched_relax_domain_level

控制負載平衡遷移任務時搜尋的範圍,預設值為-1。

  • -1:表示無要求,使用系統預設策略。

  • 0:表示不進行搜尋。

  • 1:表示搜尋同一個core內的ht。

  • 2:表示搜尋同一個package內的core。

  • 3:表示同一個node內的CPU。

  • 4:表示搜尋同一個chunk內的node。

  • 5:表示搜尋整個系統。

不涉及

cpuset.memory_migrate

當設定為非零值時,它允許在重新設定cpuset時自動遷移已指派的記憶體頁面。

不涉及

cpuset.memory_pressure

計算當前cpuset的記憶體換頁壓力。

不涉及

cpuset.memory_spread_page

當設定為1,將該cpuset中進程上下文申請的page cache平均分布到cpuset中的各個節點。

不涉及

cpuset.memory_spread_slab

當設定位1,將該cpuset中進程上下文申請到的slab對象平均分布到cpuset中的各個記憶體節點。

不涉及

cpuset.memory_pressure_enabled

當設定為1,使能cpuset的記憶體壓力統計。

不涉及

cgroup v2介面

介面名稱

作用

是否自研

對應cgroup v1介面

cpuset.cpus

控制進程啟動並執行CPU範圍。

說明

為空白時使用parent的CPU範圍。

cpuset.cpus

cpuset.mems

控制進程分配記憶體的NUMA節點範圍。

說明

為空白時使用parent的NUMA節點範圍。

cpuset.mems

cpuset.cpus.effective

展示進程運行具體生效的CPU範圍,受CPU熱插拔影響。

cpuset.effective_cpus

cpuset.mems.effective

展示進程分配記憶體具體生效的NUMA節點範圍,受記憶體熱插拔影響。

cpuset.effective_mems

cpuset.cpus.partition

控制是否獨立使用CPU範圍,設定為root時,cpuset.cpus內的CPU會被獨立使用。

可以通過 cpuset.cpu_exclusive實作類別似的功能

.__DEBUG__.cpuset.cpus.subpartitions

展示cpuset.cpus.partition為root的子組獨立使用了哪些CPU。

說明

kernel cmdline 開啟了cgroup_debug才會有這個介面。

不涉及

blkio

cgroup v1介面

介面名稱

作用

是否自研

對應cgroup v2介面

blkio.throttle.read_bps_device

讀bps限流配置介面。

例如:

echo "<major>:<minor> <bps>" > /sys/fs/cgroup/blkio/<cgroup>/blkio.throttle.read_bps_device

io.max

blkio.throttle.write_bps_device

寫bps限流配置介面。

例如:

echo "<major>:<minor> <bps>" > /sys/fs/cgroup/blkio/<cgroup>/blkio.throttle.write_bps_device

io.max

blkio.throttle.read_iops_device

讀iops限流配置介面。

例如:

echo "<major>:<minor> <iops>" > /sys/fs/cgroup/blkio/<cgroup>/blkio.throttle.read_iops_device

io.max

blkio.throttle.write_iops_device

讀iops限流配置介面。

例如:

echo "<major>:<minor> <iops>" > /sys/fs/cgroup/blkio/<cgroup>/blkio.throttle.write_iops_device

io.max

blkio.throttle.io_service_bytes

頻寬統計介面。

包含所有裝置的Read、Write、Sync、Async、Discard、Total等頻寬統計資訊,單位位元組。

io.stat

blkio.throttle.io_service_bytes_recursive

頻寬統計介面遞迴版本。

blkio.throttle.io_service_bytes 的遞迴版本,包含子cgroup的統計資訊。

不涉及

blkio.throttle.io_serviced

iops統計介面。

包含所有裝置的Read、Write、Sync、Async、Discard、Total等頻寬統計資訊,單位個。

io.stat

blkio.throttle.io_serviced_recursive

iops統計介面遞迴版本。

blkio.throttle.io_serviced 的遞迴版本,包含子cgroup 的統計。

不涉及

blkio.throttle.io_service_time

io服務時間,從io限流層結束到io完成,用于衡量io平均時延。

更多資訊,請參見Block IO限流增強監控介面

io.extstat

blkio.throttle.io_wait_time

io等待時間,io在限流層等待的時間,用于衡量io平均時延。

更多資訊,請參見Block IO限流增強監控介面

io.extstat

blkio.throttle.io_completed

完成io個數,用于衡量io平均時延。

更多資訊,請參見Block IO限流增強監控介面

io.extstat

blkio.throttle.total_bytes_queued

發生限流的io位元組統計,用於分析io時延是否與限流有關。

更多資訊,請參見Block IO限流增強監控介面

io.extstat

blkio.throttle.total_io_queued

發生限流的io統計,用於分析io時延是否與限流有關。

更多資訊,請參見Block IO限流增強監控介面

io.extstat

blkio.cost.model

配置blk-iocost成本模型,當前僅支援auto和user兩種。

僅存在於根組,例如:

echo "<major>:<minor> ctrl=user model=linear rbps=<rbps> rseqiops=<rseqiops> rrandiops=<rrandiops> wbps=<wbps> wseqiops=<wseqiops> wrandiops=<wrandiops>" > /sys/fs/cgroup/blkio/blkio.cost.model

更多資訊,請參見配置blk-iocost權重限速

io.cost.model

blkio.cost.qos

開啟blk-iocost功能並配置QoS策略,用於磁碟擁塞狀態判斷。

僅存在於根組,例如:

echo "<major>:<minor> enable=1 ctrl=user rpct= rlat=5000 wpct=95.00 wlat=5000 min=50.00 max=150.00" > /sys/fs/cgroup/blkio/blkio.cost.qos

更多資訊,請參見配置blk-iocost權重限速

io.cost.qos

blkio.cost.weight

配置cgroup權重介面。

僅存在於非根組,可支援兩種配置模式:

  • weight:所有裝置配置相同權重。

  • major:minor + weight:特定裝置配置權重。

更多資訊,請參見配置blk-iocost權重限速

io.cost.weight

blkio.cost.stat

blk-iocost統計介面。僅存在於非根組。

不涉及

cgroup v2介面

介面名稱

作用

是否自研

對應cgroup v1介面

io.max

限流配置介面,包含讀寫 bps和iops。例如:

echo "<major>:<minor> rbps=<bps> wbps=<bps> riops=<iops> wiops=<iops>" > /sys/fs/cgroup/<cgroup>/io.max

blkio.throttle.read_bps_device

blkio.throttle.read_iops_device

blkio.throttle.write_bps_device

blkio.throttle.write_iops_device

io.stat

io統計資訊,包含讀/寫/discard io的頻寬和io 個數。

blkio.throttle.io_service_bytes

blkio.throttle.io_serviced

io.extstat

io擴充統計資訊,包含讀寫io的等待時間、服務時間、完成個數、限流io的位元組和個數統計。

blkio.throttle.io_service_time

blkio.throttle.io_wait_time

blkio.throttle.io_completed

blkio.throttle.total_bytes_queued

blkio.throttle.total_io_queued

io.cost.model

配置blk-iocost成本模型,當前僅支援auto和 user兩種。

僅存在於根組,例如:

echo "<major>:<minor> ctrl=user model=linear rbps=<rbps> rseqiops=<rseqiops> rrandiops=<rrandiops> wbps=<wbps> wseqiops=<wseqiops> wrandiops=<wrandiops>" > /sys/fs/cgroup/io.cost.model

更多資訊,請參見配置blk-iocost權重限速

blkio.cost.model

io.cost.qos

開啟blk-iocost功能並配置QoS策略,用於磁碟擁塞狀態判斷。

僅存在於根組,例如:

echo "<major>:<minor> enable=1 ctrl=user rpct= rlat=5000 wpct=95.00 wlat=5000 min=50.00 max=150.00" > /sys/fs/cgroup/io.cost.qos

更多資訊,請參見配置blk-iocost權重限速

blkio.cost.qos

io.cost.weight

配置cgroup權重介面。

僅存在於非根組,可支援兩種配置模式:

  • weight:所有裝置配置相同權重。

  • major:minor + weight:特定裝置配置權重。

更多資訊,請參見配置blk-iocost權重限速

blkio.cost.weight

memory

cgroup v1介面

介面名稱

作用

是否自研

對應cgroup v2介面

memory.usage_in_bytes

展示當前記憶體使用量量。

不涉及

memory.max_usage_in_bytes

展示記憶體最大使用量。

不涉及

memory.limit_in_bytes

設定記憶體使用量量硬限制。

不涉及

memory.soft_limit_in_bytes

設定記憶體使用量量軟式節流。

不涉及

memory.failcnt

展示記憶體使用量達到限制的次數。

不涉及

memory.mglru_batch_size

基於mglru架構的記憶體主動回收,設定批處理回收的記憶體數量,每批處理記憶體回收之間會嘗試釋放CPU。

不涉及

memory.mglru_reclaim_kbytes

基於mglru架構的記憶體主動回收,設定主動回收記憶體的數量。

不涉及

memory.wmark_ratio

該介面用於設定是否啟用memcg後台非同步回收功能,以及設定非同步回收功能開始工作的memcg記憶體水位線。單位是相對於memcg limit的百分之幾。取值範圍:0~100。

  • 預設值為0,該值也表示禁用memcg後台非同步回收功能。

  • 取值非0時,表示開啟memcg後台非同步回收功能並設定對應的水位線。

更多資訊,請參見Memcg後台非同步回收

memory.wmark_ratio

memory.wmark_high

唯讀介面,說明如下:

  • 當memcg記憶體使用量超過該介面的值時,後台非同步回收功能啟動。

  • 該介面的值由memory.limit_in_bytes * memory.wmark_ratio / 100計算獲得。

  • memcg後台非同步回收功能被禁用時,memory.wmark_high預設為一個極大值,從而達到永不觸發後台非同步回收功能的目的。

  • memcg根組目錄下不存在該介面檔案。

更多資訊,請參見Memcg後台非同步回收

memory.wmark_low

唯讀介面,說明如下:

  • 當memcg記憶體使用量低於該介面的值時,後台非同步回收結束。

  • 該介面的值由memory.wmark_high - memory.limit_in_bytes * memory.wmark_scale_factor / 10000計算得出。

  • memcg根組目錄下不存在該介面檔案。

更多資訊,請參見Memcg後台非同步回收

memory.wmark_scale_factor

該介面用於控制memory.wmark_high和memory.wmark_low之間的間隔。單位是相對於memcg limit的萬分之幾。取值範圍:1~1000

  • 該介面在建立時,會繼承父組的值(該值為50),該值也是預設值,即memcg limit的千分之五。

  • memcg根組目錄不存在該介面檔案。

更多資訊,請參見Memcg後台非同步回收

memory.wmark_min_adj

實現memcg全域最低水位線分級功能的介面為memory.wmark_min_adj。

該介面的值,表示基於全域最低水位線(global wmark_min)所作出的調整(adjustment)百分比。取值範圍:-25 ~ 50,取值範圍說明如下:

  • 該介面建立時,繼承父組的值(值為0),即預設值為0。

  • 取值範圍中的負值是基於調整範圍[0, WMARK_MIN]的百分比,其中WMARK_MIN表示global wmark_min的值,例如:memory.wmark_min_adj=-25, memcg WMARK_MIN is "WMARK_MIN + (WMARK_MIN - 0) * (-25%)"

  • 取值範圍中的正值是基於調整範圍[WMARK_MIN, WMARK_LOW]的百分比,其中WMARK_MINWMARK_LOW分別表示global wmark_min和global wmark_low的值。

  • 當位移後的global wmark_min被觸發後,會執行抑制操作,抑制操作的時間和超出的記憶體使用量為線性比例關係。抑制時間的取值範圍:1ms ~ 1000ms。

更多資訊,請參見Memcg全域最低水位線分級

memory.force_empty

觸發強制頁回收。

不涉及

memory.use_hierarchy

設定層級統計使能。

不涉及

memory.swappiness

設定vmscan時swapiness的參數。

不涉及

memory.priority

該介面提供13個層級的memcg優先順序以支援不同重要程度的業務。取值範圍為0~12,數值越大表示優先順序越高。該介面不會繼承,預設值為0。

  • 實現一定程度的記憶體QoS,此處需要說明的優先順序值非全域變數,只能在同父cgroup下的兄弟節點進行比較。

  • 對於優先順序相等的兄弟節點來說,會按照組的記憶體使用量量來排序選擇記憶體使用量最大的進行OOM操作。

memory.priority

memory.move_charge_at_immigrate

設定移動時的統計控制策略。

不涉及

memory.oom_control

設定oom時的控制策略。

不涉及

memory.oom.group

OOM group功能,當發生OOM時,殺死該memcg內的所有進程。

memory.oom.group

memory.pressure_level

設定記憶體壓力通知。

不涉及

memory.kmem.limit_in_bytes

設定核心記憶體使用量量硬限制。

不涉及

memory.kmem.usage_in_bytes

展示核心記憶體使用量量。

不涉及

memory.kmem.failcnt

展示核心記憶體使用量達到限制的次數。

不涉及

memory.kmem.max_usage_in_bytes

展示核心記憶體最大使用量。

不涉及

memory.kmem.slabinfo

展示核心記憶體slab使用量。

不涉及

memory.kmem.tcp.limit_in_bytes

設定核心tcp記憶體使用量量硬限制。

不涉及

memory.kmem.tcp.usage_in_bytes

展示核心tcp記憶體使用量量。

不涉及

memory.kmem.tcp.failcnt

展示核心tcp記憶體使用量達到限制的次數。

不涉及

memory.kmem.tcp.max_usage_in_bytes

展示核心tcp記憶體最大使用量。

不涉及

memory.memsw.usage_in_bytes

展示記憶體加swap使用量。

不涉及

memory.memsw.max_usage_in_byte

展示記憶體加swap最大使用量。

不涉及

memory.memsw.limit_in_bytes

設定記憶體加swap使用量限制。

不涉及

memory.memsw.failcnt

展示記憶體加swap使用達到限制的次數。

不涉及

memory.swap.high

設定swap使用量限制。

memory.swap.high

memory.swap.events

觸發swap使用量達到限制時的事件。

memory.swap.events

memory.min

設定記憶體使用量量硬保證。

更多資訊,請參見cgroup v1介面支援memcg QoS功能

memory.min

memory.low

設定記憶體使用量量軟保證。更多資訊,請參見cgroup v1介面支援memcg QoS功能

memory.low

memory.high

設定記憶體使用量量限制。更多資訊,請參見cgroup v1介面支援memcg QoS功能

memory.high

memory.allow_duptext

在全域開關 (/sys/kernel/mm/duptext/enabled) 開啟的前提下,memcg開關用於設定各memcg中的進程是否啟用代碼多副本功能。取值範圍:0~1,預設值為0。

  • 取值為1,表示當前memcg中的進程啟用代碼多副本功能。

  • 取值為0,表示當前memcg中的進程不啟用代碼多副本功能。

更多資訊,請參見代碼多副本功能

memory.allow_duptext

memory.allow_duptext_refresh

二進位檔案剛產生/下載,立即開始運行。duptext會在PageDirty、PageWriteback等條件不生效。如果該介面判斷出這種情況,通過非同步任務的方式再次對duptext會在PageDirty、PageWriteback等條件不生效這種情況做一次重新整理。

memory.allow_duptext_refresh

memory.duptext_nodes

用於限制duptext的記憶體配置節點。

memory.duptext_nodes

memory.allow_text_unevictable

memcg程式碼片段鎖定的開關。

memory.allow_text_unevictable

memory.text_unevictable_percent

memcg鎖定程式碼片段的記憶體佔用比例。

memory.text_unevictable_percent

memory.thp_reclaim

開啟或關閉THP reclaim功能。支援以下配置項:

  • reclaim:開啟THP reclaim功能。

  • swap:預留配置項,目前暫無實際功能。

  • disable:關閉THP reclaim功能。

THP reclaim功能預設為關閉狀態,即介面預設值為disable。

更多資訊,請參見THP reclaim功能

memory.thp_reclaim

memory.thp_reclaim_stat

查看THP reclaim功能當前的狀態。介面內的參數說明如下:

  • queue_length:當前被THP reclaim管理的透明大頁數量。

  • split_hugepage:累計拆分的透明大頁數量。

  • reclaim_subpage:累計回收的全零頁面數量。

該介面的參數值按照NUMA node的順序(node0、node1)從左至右排列。

更多資訊,請參見THP reclaim功能

memory.thp_reclaim_stat

memory.thp_reclaim_ctrl

控制THP reclaim功能的觸發機制。目前支援以下配置項:

  • threshold:預設值為16。表示當透明大頁中的全零頁面數量超過該值時,會觸發THP reclaim功能。

  • reclaim:用於主動觸發THP reclaim功能。

更多資訊,請參見THP reclaim功能

memory.thp_reclaim_ctrl

memory.thp_control

提供memcg thp控制介面,可以禁止anon/shmem/file thp的申請。

例如不允許離線memcg使用大頁,即使不能防止片段的產生,但能減少THP的爭搶,以及記憶體浪費的問題。

memory.thp_control

memory.reclaim_caches

主動回收memcg內的緩衝。例如:echo 100M > memory.reclaim_caches

memory.reclaim_caches

memory.pgtable_bind

頁表頁記憶體是否強制在本節點申請。

memory.pgtable_bind

memory.pgtable_misplaced

跨節點分配的頁表頁記憶體的統計 。

memory.pgtable_misplaced

memory.oom_offline

快速OOM特性中,使用者使用該介面來標記離線任務所在的 memcg。

memory.oom_offline

memory.async_fork

async fork(原名 fcm)功能的memcg開關。

memory.async_fork

memory.direct_compact_latency

memsli功能:直接記憶體整理的延遲。

memory.direct_compact_latency

memory.direct_reclaim_global_latency

memsli功能:直接全域記憶體回收的延遲。

memory.direct_reclaim_global_latency

memory.direct_reclaim_memcg_latency

memsli功能:直接memcg記憶體回收的延遲。

memory.direct_reclaim_memcg_latency

memory.direct_swapin_latency

memsli功能:直接記憶體換入的延遲。

memory.direct_swapin_latency

memory.direct_swapout_global_latency

memsli功能:直接全域記憶體換出的延遲。

memory.direct_swapout_global_latency

memory.direct_swapout_memcg_latency

memsli功能:直接memcg記憶體換出的延遲。

memory.direct_swapout_memcg_latency

memory.exstat

extend/extra記憶體統計。當前包含4個自研特性的統計:

  • wmark_min_throttled_ms 【分級 min 水線】

  • wmark_reclaim_work_ms 【memcg 非同步回收】

  • unevictable_text_size_kb 【程式碼片段鎖定】

  • pagecache_limit_reclaimed_kb 【page cache 限制】

更多資訊,請參見Memcg Exstat功能

自研增強

memory.exstat

memory.idle_page_stats

冷記憶體:kidled的記憶體統計資料(單memcg + hierarchy)。

memory.idle_page_stats

memory.idle_page_stats.local

冷記憶體:kidled的記憶體統計資料(單memcg)。

memory.idle_page_stats.local

memory.numa_stat

匿名、檔案、鎖定記憶體的NUMA統計。

memory.numa_stat

memory.pagecache_limit.enable

開啟page cache限制開關。

更多資訊,請參見Page Cache限制功能

memory.pagecache_limit.enable

memory.pagecache_limit.size

page cache限制:限制量。

memory.pagecache_limit.size

memory.pagecache_limit.sync

page cache限制:限制方式(同步、非同步)。

memory.pagecache_limit.sync

memory.reap_background

zombie memcg reaper:memcg粒度的後台/非同步reap的開關。

memory.reap_background

memory.stat

記憶體的統計。

memory.stat

memory.use_priority_oom

開啟priority oom開關。

更多資訊,請參見Memcg OOM優先順序策略功能

memory.use_priority_oom

memory.use_priority_swap

開啟priority swap開關。

更多資訊,請參見Memcg OOM優先順序策略功能

memory.use_priority_swap

cgroup v2介面

介面名稱

作用

是否自研

對應cgroup v1介面

memory.current

展示記憶體使用量量。

不涉及

memory.min

設定記憶體使用量量硬保證。

更多資訊,請參見cgroup v1介面支援memcg QoS功能

memory.min

memory.low

設定記憶體使用量量軟保證。

更多資訊,請參見cgroup v1介面支援memcg QoS功能

memory.low

memory.high

設定記憶體使用量量限制。

更多資訊,請參見cgroup v1介面支援memcg QoS功能

memory.high

memory.max

設定記憶體使用量量限制。

memory.max

memory.swap.current

展示swap使用量。

不涉及

memory.swap.high

設定swap使用量限制。

不涉及

memory.swap.max

設定swap使用量硬限制。

不涉及

memory.swap.events

觸發swap使用量達到限制時的事件。

不涉及

memory.oom.group

OOMgroup功能,當發生OOM時,殺死該memcg內的所有進程。

memory.oom.group

memory.wmark_ratio

該介面用於設定是否啟用memcg後台非同步回收功能,以及設定非同步回收功能開始工作的memcg記憶體水位線。單位是相對於memcg limit的百分之幾。取值範圍:0~100。

  • 預設值為0,該值也表示禁用memcg後台非同步回收功能。

  • 取值為非0時,表示開啟memcg後台非同步回收功能並設定對應的水位線。

更多資訊,請參見Memcg後台非同步回收

memory.wmark_ratio

memory.wmark_high

唯讀介面,說明如下:

  • 當memcg記憶體使用量超過該介面的值時,後台非同步回收功能啟動。

  • 該介面的值由memory.limit_in_bytes * memory.wmark_ratio / 100計算獲得。

  • memcg後台非同步回收功能被禁用時,memory.wmark_high預設為一個極大值,從而達到永不觸發後台非同步回收功能的目的。

  • memcg根組目錄下不存在該介面檔案。

更多資訊,請參見Memcg後台非同步回收

memory.wmark_high

memory.wmark_low

唯讀介面,說明如下:

  • 當memcg記憶體使用量低於該介面的值時,後台非同步回收結束。

  • 該介面的值由memory.wmark_high - memory.limit_in_bytes * memory.wmark_scale_factor / 10000計算得出。

  • memcg根組目錄下不存在該介面檔案。

更多資訊,請參見Memcg後台非同步回收

memory.wmark_low

memory.wmark_scale_factor

該介面用於控制memory.wmark_high和memory.wmark_low之間的間隔。單位是相對於memcg limit的萬分之幾。取值範圍:1~1000。

  • 該介面在建立時,會繼承父組的值(該值為50),該值也是預設值,即memcg limit的千分之五。

  • memcg根組目錄不存在該介面檔案。

更多資訊,請參見Memcg後台非同步回收

memory.wmark_scale_factor

memory.wmark_min_adj

實現memcg全域最低水位線分級功能的介面為memory.wmark_min_adj。

該介面的值,表示基於全域最低水位線(global wmark_min)所作出的調整(adjustment)百分比。取值範圍:-25 ~ 50,取值範圍說明如下:

  • 該介面建立時,繼承父組的值(值為0),即預設值為0。

  • 取值範圍中的負值是基於調整範圍[0, WMARK_MIN]的百分比,其中WMARK_MIN表示global wmark_min的值,例如:memory.wmark_min_adj=-25, memcg WMARK_MIN is "WMARK_MIN + (WMARK_MIN - 0) * (-25%)"

  • 取值範圍中的正值是基於調整範圍[WMARK_MIN, WMARK_LOW]的百分比,其中WMARK_MINWMARK_LOW分別表示global wmark_min和global wmark_low的值。

  • 當位移後的global wmark_min被觸發後,會執行抑制操作,抑制操作的時間和超出的記憶體使用量呈線性比例關係。抑制時間的取值範圍:1ms ~ 1000ms。

更多資訊,請參見Memcg全域最低水位線分級

memory.wmark_min_adj

memory.priority

該介面提供13個層級的memcg優先順序以支援不同重要程度的業務。取值範圍為0~12,數值越大表示優先順序越高。該介面不會繼承,預設值為0。

  • 實現一定程度的記憶體QoS,此處需要說明的優先順序值非全域變數,只能在同父cgroup下的兄弟節點進行比較。

  • 對於優先順序相等的兄弟節點來說,會按照組的記憶體使用量量來排序選擇記憶體使用量最大的進行OOM操作。

更多資訊,請參見Memcg OOM優先順序策略功能

memory.priority

memory.use_priority_oom

開啟priority oom開關。

更多資訊,請參見Memcg OOM優先順序策略功能

memory.use_priority_oom

memory.use_priority_swap

開啟priority swap開關。

更多資訊,請參見Memcg OOM優先順序策略功能

memory.use_priority_swap

memory.direct_reclaim_global_latency

memsli功能:直接全域記憶體回收的延遲。

memory.direct_reclaim_global_latency

memory.direct_reclaim_memcg_latency

memsli功能:直接memcg記憶體回收的延遲。

memory.direct_reclaim_memcg_latency

memory.direct_compact_latency

memsli功能:直接記憶體整理的延遲。

memory.direct_compact_latency

memory.direct_swapout_global_latency

memsli功能:直接全域記憶體換出的延遲。

memory.direct_swapout_global_latency

memory.direct_swapout_memcg_latency

memsli功能:直接memcg記憶體換出的延遲。

memory.direct_swapout_memcg_latency

memory.direct_swapin_latency

memsli功能:直接記憶體換入的延遲。

memory.direct_swapin_latency

memory.exstat

extend/extra記憶體統計。當前包含4個自研特性的統計:

  • wmark_min_throttled_ms 【分級 min 水線】

  • wmark_reclaim_work_ms 【memcg 非同步回收】

  • unevictable_text_size_kb 【程式碼片段鎖定】

  • pagecache_limit_reclaimed_kb 【page cache 限制】

更多資訊,請參見Memcg Exstat功能

memory.exstat

memory.pagecache_limit.enable

page cache限制:開關。

更多資訊,請參見Page Cache限制功能

memory.pagecache_limit.enable

memory.pagecache_limit.size

page cache限制:限制量。

更多資訊,請參見Page Cache限制功能

memory.pagecache_limit.size

memory.pagecache_limit.sync

page cache限制:限制方式(同步、非同步)。

更多資訊,請參見Page Cache限制功能

memory.pagecache_limit.sync

memory.idle_page_stats

冷記憶體:kidled的記憶體統計資料(單memcg + hierarchy)

memory.idle_page_stats

memory.idle_page_stats.local

冷記憶體:kidled 的記憶體統計資料(單memcg)。

memory.idle_page_stats.local

memory.numa_stat

匿名、檔案、鎖定記憶體的NUMA統計。

memory.numa_stat

memory.reap_background

zombie memcg reaper:memcg粒度的後台/非同步reap的開關。

memory.reap_background

memory.stat

記憶體的統計。

memory.stat

memory.use_priority_oom

開啟priority oom開關。

更多資訊,請參見Memcg OOM優先順序策略功能

memory.use_priority_oom

cpuacct

介面名稱

作用

是否自研

對應cgroup v2介面

cpuacct.usage

使用CPU的總時間,單位是ns。

用cpu.stat展示類似的資訊

cpuacct.usage_user

在使用者態使用的CPU時間,單位是ns。

cpuacct.usage_sys

在核心態使用的CPU時間,單位是ns。

cpuacct.usage_percpu

每個CPU的使用時間,單位是ns。

cpuacct.usage_percpu_user

在使用者態每個CPU使用的時間,單位是ns。

cpuacct.usage_percpu_sys

在核心態每個CPU使用的時間,單位是ns。

cpuacct.usage_all

cpuacct.usage_percpu_user和cpuacct.usage_percpu_sys資訊的匯總,單位是ns。

cpuacct.stat

在使用者態和核心態使用的CPU時間,單位是tick。

cpuacct.proc_stat

展示容器粒度的CPU時間、loadavg、運行進程數量等資訊。

cpuacct.enable_sli

控制是否統計容器粒度的loadavg。

不涉及

cpuacct.sched_cfs_statistics

cfs相關資料統計,例如已耗用時間,等待同級/非同級cgroup的時間等。

cpu.sched_cfs_statistics

cpuacct.wait_latency

進程在隊列中等待的延遲分布。

cpu.wait_latency

cpuacct.cgroup_wait_latency

進程組在隊列中等待的延遲分布,與wait_latency的區別在於,wait_latency統計task se,cgroup_wait_latency統計group se。

cpu.cgroup_wait_latency

cpuacct.block_latency

進程被非io原因導致的阻塞的延遲分布。

cpu.block_latency

cpuacct.ioblock_latency

進程被io原因導致的阻塞的延遲分布。

cpu.ioblock_latency

io.pressure

展示PSI資訊,支援poll。更多資訊,請參見:

不涉及

memory.pressure

cpu.pressure

freezer

介面名稱

作用

是否自研

對應cgroup v2介面

freezer.state

控制凍結狀態,可寫入FROZENTHAWED用於凍結或解凍。

cgroup.freeze

freezer.self_freezing

展示是否因為自身的凍結狀態而凍結。

不涉及

freezer.parent_freezing

展示是否因為祖先的凍結狀態而凍結。

不涉及

ioasids

ioasids子系統的cgroup v1介面和cgroup v2介面沒有差別。

介面名稱

作用

是否自研

ioasids.current

當前group已經分配的ioasid的數量。

ioasids.events

由於超過可分配ioasid的限制而發生的事件數目量。

ioasids.max

當前group可以分配的總的ioasid數量。

net_cls/net_prio

介面名稱

作用

是否自研

對應cgroup v2介面

net_cls.classid

配置cgroup當前的class id, 與qdisc或iptable配合使用。

不涉及

說明

cgroup v2中移除了相關的介面, 建議使用ebpf對流量進行過濾和整形。

net_prio.prioidx

唯讀, 核心內部使用的, 當前cgroup在資料結構中的索引值。

net_prio.ifpriomap

配置每一個網卡對應的prio值。

perf_event

perf_event子系統沒有介面,perf_event在cgroup v2上預設使能,和cgroup v1沒有差別。

pids

pids子系統的cgroup v1介面和cgroup v2介面沒有差別。

介面名稱

作用

是否自研

pids.max

控制進程數量上限。

pids.current

展示當前進程數量。

pids.events

展示因為達到進程數量上限而fork失敗的事件次數,並支援fsnotify。

rdma

rdma子系統的cgroup v1介面和cgroup v2介面沒有差別。

介面名稱

作用

是否自研

rdma.max

控制網卡資源使用限制。

rdma.current

展示網卡資源使用。