在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可以開啟線程粒度的控制。 說明 只支援CPU、pids和perf_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。
| 否 | 不涉及 |
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權重介面。 僅存在於非根組,可支援兩種配置模式:
更多資訊,請參見配置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權重介面。 僅存在於非根組,可支援兩種配置模式:
更多資訊,請參見配置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。
更多資訊,請參見Memcg後台非同步回收。 | 是 | memory.wmark_ratio |
memory.wmark_high | 唯讀介面,說明如下:
更多資訊,請參見Memcg後台非同步回收。 | 是 | |
memory.wmark_low | 唯讀介面,說明如下:
更多資訊,請參見Memcg後台非同步回收。 | 是 | |
memory.wmark_scale_factor | 該介面用於控制memory.wmark_high和memory.wmark_low之間的間隔。單位是相對於memcg limit的萬分之幾。取值範圍:1~1000
更多資訊,請參見Memcg後台非同步回收。 | 是 | |
memory.wmark_min_adj | 實現memcg全域最低水位線分級功能的介面為memory.wmark_min_adj。 該介面的值,表示基於全域最低水位線(global wmark_min)所作出的調整(adjustment)百分比。取值範圍:-25 ~ 50,取值範圍說明如下:
更多資訊,請參見Memcg全域最低水位線分級。 | 是 | |
memory.force_empty | 觸發強制頁回收。 | 否 | 不涉及 |
memory.use_hierarchy | 設定層級統計使能。 | 是 | 不涉及 |
memory.swappiness | 設定vmscan時swapiness的參數。 | 否 | 不涉及 |
memory.priority | 該介面提供13個層級的memcg優先順序以支援不同重要程度的業務。取值範圍為0~12,數值越大表示優先順序越高。該介面不會繼承,預設值為0。
| 是 | 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。
更多資訊,請參見代碼多副本功能。 | 是 | 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功能。支援以下配置項:
THP reclaim功能預設為關閉狀態,即介面預設值為disable。 更多資訊,請參見THP reclaim功能。 | 是 | memory.thp_reclaim |
memory.thp_reclaim_stat | 查看THP reclaim功能當前的狀態。介面內的參數說明如下:
該介面的參數值按照NUMA node的順序(node0、node1)從左至右排列。 更多資訊,請參見THP reclaim功能。 | 是 | memory.thp_reclaim_stat |
memory.thp_reclaim_ctrl | 控制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內的緩衝。例如: | 是 | 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個自研特性的統計:
更多資訊,請參見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。
更多資訊,請參見Memcg後台非同步回收。 | 是 | memory.wmark_ratio |
memory.wmark_high | 唯讀介面,說明如下:
更多資訊,請參見Memcg後台非同步回收。 | 是 | memory.wmark_high |
memory.wmark_low | 唯讀介面,說明如下:
更多資訊,請參見Memcg後台非同步回收。 | 是 | memory.wmark_low |
memory.wmark_scale_factor | 該介面用於控制memory.wmark_high和memory.wmark_low之間的間隔。單位是相對於memcg limit的萬分之幾。取值範圍:1~1000。
更多資訊,請參見Memcg後台非同步回收。 | 是 | memory.wmark_scale_factor |
memory.wmark_min_adj | 實現memcg全域最低水位線分級功能的介面為memory.wmark_min_adj。 該介面的值,表示基於全域最低水位線(global wmark_min)所作出的調整(adjustment)百分比。取值範圍:-25 ~ 50,取值範圍說明如下:
更多資訊,請參見Memcg全域最低水位線分級。 | 是 | memory.wmark_min_adj |
memory.priority | 該介面提供13個層級的memcg優先順序以支援不同重要程度的業務。取值範圍為0~12,數值越大表示優先順序越高。該介面不會繼承,預設值為0。
更多資訊,請參見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個自研特性的統計:
更多資訊,請參見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 | 控制凍結狀態,可寫入 | 否 | 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 | 展示網卡資源使用。 | 否 |