cgroup v1與cgroup v2的區(qū)別
在Linux系統(tǒng)中,cgroup(Control Groups)是一種資源管理和限制的機制,用于限制、記錄和隔離進程組使用的物理資源(如CPU、內存、I/O等),通過cgroup,父進程可以控制子進程組的資源使用。cgroup v1和cgroup v2是cgroup機制的兩個主要版本,它們在設計理念和使用方法上存在一些顯著差異。本文介紹cgroup v1與cgroup v2的主要區(qū)別。
通用接口差異
cgroup v1接口
接口名稱 | 作用 | 是否自研 | 對應cgroup v2接口 |
cgroup.procs | 寫入進程PID即可把進程遷移到該cgroup。 | 否 | cgroup.procs |
cgroup.clone_children | 如果為1,子cgroup會繼承自己的cpuset的配置。 說明 只對cpuset子系統(tǒng)生效,歷史遺留因素在通用接口里。 | 否 | 不涉及 |
cgroup.sane_behavior | v2的實驗特性的接口,v2正式發(fā)布后為了向后兼容而存在 | 否 | 不涉及 |
notify_on_release | 如果為1,當前cgroup變空時會執(zhí)行release_agent內的進程。 說明 只在根組存在。 | 否 | 可以通過cgroup.events實現(xiàn)類似功能 |
release_agent | 否 | ||
tasks | 寫入線程tid即可把線程遷移到該cgroup。 | 否 | cgroup.threads |
pool_size | 控制cgroup緩存池的大小,在高并發(fā)場景下可以加速cgroup的創(chuàng)建和綁定。 說明 依賴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開啟了哪些子系統(tǒng)。 | 否 | 不涉及 |
cgroup.subtree_control | 控制子cgroup開啟哪些子系統(tǒng)。 說明 需要是cgroup.controllers的子系統(tǒng)。 | 否 | 不涉及 |
cgroup.events | 記錄了當前cgroup是否管控進程,以及當前cgroup是否被凍結,可以用fsnotify監(jiān)聽狀態(tài)是否變化。 說明 根組中不存在。 | 否 | 可以通過notify_on_release和 release_agent實現(xiàn)類似功能 |
cgroup.max.descendants | 控制最大子孫cgroup的數(shù)量。 | 否 | 不涉及 |
cgroup.max.depth | 控制子孫cgroup的最大深度。 | 否 | 不涉及 |
cgroup.stat | 展示當前cgroup有多少個子孫cgroup和處于dying狀態(tài)(銷毀中)的子孫cgroup。 | 否 | 不涉及 |
cgroup.freeze | 控制進程凍結。 說明 根組中不存在。 | 否 | freezer子系統(tǒng)中的freezer.state |
cpu.stat | 展示CPU使用的統(tǒng)計信息。 | 否 | 不涉及 |
io.pressure | 展示PSI信息,支持poll。更多信息,請參見: | 否 | 在cgroup v1接口開啟PSI功能后,cpuacct子系統(tǒng)下的io.pressure、memory.pressure、cpu.pressure來實現(xiàn)該功能 |
memory.pressure | 否 | ||
cpu.pressure | 否 |
子系統(tǒng)接口差異
CPU
cgroup v1接口
接口名稱 | 作用 | 是否自研 | 對應cgroup v2接口 |
cpu.shares | 控制權重,根據(jù)權重占比來分配CPU的時間片,默認值為1024。 | 否 | cpu.weight,cpu.weight.nice,單位不一樣 |
cpu.idle | 控制當前cgroup組的調度策略類型是否為idle類型,idle類型會根據(jù)最小的CPU share分配時間片,且不再有最小運行時間的保障,更容易把CPU讓給非idle類型的進程。 說明 cpu.idle為1時,cpu.shares不再可寫,cpu.shares值變?yōu)?。 | 否 | cpu.idle |
cpu.priority | 細粒度搶占優(yōu)先級,時鐘中斷/喚醒時判斷搶占,根據(jù)優(yōu)先級的差值進行調整,使高優(yōu)先級更容易搶占低優(yōu)先級。 | 是 | 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的周期內,允許進程突發(fā)運行的時間。更多信息,請參見在cgroup v1接口開啟CPU Burst功能。 | 否 | cpu.max.burst |
cpu.cfs_init_buffer_us | 剛啟動時,允許進程突發(fā)運行的時間。 | 是 | cpu.max.init_buffer |
cpu.stat | 展示CPU帶寬控制相關統(tǒng)計信息,例如經歷了多少個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屬性,區(qū)分在離線進程,給在線進程更好的CPU QoS保障。更多信息,請參見Group Identity功能說明。 | 是 | cpu.bvt_warp_ns |
cpu.identity | 是 | cpu.identity | |
cpu.ht_stable | 控制是否制造SMT對端噪音,用于控制SMT算力穩(wěn)定。 | 是 | 不涉及 |
cpu.ht_ratio | 控制是否因為SMT對端空閑額外計算使用的quota,用于控制SMT算力穩(wěn)定。 | 是 | cpu.ht_ratio |
cgroup v2接口
由于cgroup v2中不再支持cpuacct子系統(tǒng),原cpuacct部分接口或相關功能在CPU子系統(tǒng)下實現(xiàn)。
接口名稱 | 作用 | 是否自研 | 對應cgroup v1接口 |
cpu.weight | 控制權重,根據(jù)權重占比來分配CPU的時間片,默認值為100。 | 否 | cpu.shares,單位不一樣 |
cpu.weight.nice | 控制權重,根據(jù)權重占比來分配CPU的時間片,默認值為0。 | 否 | cpu.shares,單位不一樣 |
cpu.idle | 控制當前cgroup組的調度策略類型是否為idle類型,idle類型的會根據(jù)最小的CPU share分配時間片,且不再有最小運行時間的保障,更容易把CPU讓給非idle類型的進程。 說明 cpu.idle 為1時,cpu.weight、cpu.weight.nice不再可寫,變?yōu)樽钚嘀兀?.3),同時cpu.weight會因為取整的原因,讀取的值為0。 | 否 | cpu.idle |
cpu.priority | 細粒度搶占優(yōu)先級,時鐘中斷/喚醒時判斷搶占,根據(jù)優(yōu)先級的差值進行放縮,讓高優(yōu)先級更容易搶占低優(yōu)先級。 | 是 | cpu.priority |
cpu.max | CPU cfs帶寬控制,包含兩個值,對應quota和period,在 period內組內進程最多運行quota的時間。 | 否 | cpu.cfs_quota_us, cpu.cfs_period_us |
cpu.max.burst | 在cpu.max的period周期內,允許進程突發(fā)運行的時間。 | 否 | cpu.max.burst |
cpu.max.init_buffer | 剛啟動時,允許進程突發(fā)運行的時間。 | 是 | cpu.cfs_init_buffer_us |
cpu.bvt_warp_ns | 控制group identity屬性,區(qū)分離線進程,給在線進程更好的CPU QoS保障。 | 是 | cpu.bvt_warp_ns |
cpu.identity | 是 | cpu.identity | |
cpu.sched_cfs_statistics | cfs相關數(shù)據(jù)統(tǒng)計,例如運行時間,等待同級/非同級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的區(qū)別在于,wait_latency統(tǒng)計task se,cgroup_wait_latency統(tǒng)計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算力穩(wěn)定。 說明 需要開啟core scheduling才會生效。 | 是 | cpu.ht_ratio |
cpuset
cgroup v1接口
接口名稱 | 作用 | 是否自研 | 對應cgroup v2接口 |
cpuset.cpus | 控制進程運行的CPU范圍。 說明 為空時cgroup不允許綁定進程。 | 否 | cpuset.cpus |
cpuset.mems | 控制進程分配內存的NUMA節(jié)點范圍。 說明 為空時cgroup不允許綁定進程。 | 否 | cpuset.mems |
cpuset.effective_cpus | 展示進程運行具體生效的CPU范圍,受CPU熱插拔影響。 | 否 | cpuset.cpus.effective |
cpuset.effective_mems | 展示進程分配內存具體生效的NUMA節(jié)點范圍,受內存熱插拔影響。 | 否 | cpuset.mems.effective |
cpuset.cpu_exclusive | 控制獨立使用的CPU范圍,不能與同級其他組的有交集。 | 否 | 可以通過cpuset.cpus.partition實現(xiàn)類似功能 |
cpuset.mem_exclusive | 控制獨立使用的NUMA節(jié)點范圍,不能與同級其他組的有交集。 | 否 | 不涉及 |
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中的各個節(jié)點。 | 否 | 不涉及 |
cpuset.memory_spread_slab | 當設置位1,將該cpuset中進程上下文申請到的slab對象平均分布到cpuset中的各個內存節(jié)點。 | 否 | 不涉及 |
cpuset.memory_pressure_enabled | 當設置為1,使能cpuset的內存壓力統(tǒng)計。 | 否 | 不涉及 |
cgroup v2接口
接口名稱 | 作用 | 是否自研 | 對應cgroup v1接口 |
cpuset.cpus | 控制進程運行的CPU范圍。 說明 為空時使用parent的CPU范圍。 | 否 | cpuset.cpus |
cpuset.mems | 控制進程分配內存的NUMA節(jié)點范圍。 說明 為空時使用parent的NUMA節(jié)點范圍。 | 否 | cpuset.mems |
cpuset.cpus.effective | 展示進程運行具體生效的CPU范圍,受CPU熱插拔影響。 | 否 | cpuset.effective_cpus |
cpuset.mems.effective | 展示進程分配內存具體生效的NUMA節(jié)點范圍,受內存熱插拔影響。 | 否 | cpuset.effective_mems |
cpuset.cpus.partition | 控制是否獨立使用CPU范圍,設置為root時,cpuset.cpus內的CPU會被獨立使用。 | 否 | 可以通過 cpuset.cpu_exclusive實現(xiàn)類似的功能 |
.__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 | 帶寬統(tǒng)計接口。 包含所有設備的Read、Write、Sync、Async、Discard、Total等帶寬統(tǒng)計信息,單位字節(jié)。 | 否 | io.stat |
blkio.throttle.io_service_bytes_recursive | 帶寬統(tǒng)計接口遞歸版本。 blkio.throttle.io_service_bytes 的遞歸版本,包含子cgroup的統(tǒng)計信息。 | 否 | 不涉及 |
blkio.throttle.io_serviced | iops統(tǒng)計接口。 包含所有設備的Read、Write、Sync、Async、Discard、Total等帶寬統(tǒng)計信息,單位個。 | 否 | io.stat |
blkio.throttle.io_serviced_recursive | iops統(tǒng)計接口遞歸版本。 blkio.throttle.io_serviced 的遞歸版本,包含子cgroup 的統(tǒng)計。 | 否 | 不涉及 |
blkio.throttle.io_service_time | io服務時間,從io限流層結束到io完成,用于衡量io平均時延。 更多信息,請參見Block IO限流增強監(jiān)控接口。 | 是 | io.extstat |
blkio.throttle.io_wait_time | io等待時間,io在限流層等待的時間,用于衡量io平均時延。 更多信息,請參見Block IO限流增強監(jiān)控接口。 | 是 | io.extstat |
blkio.throttle.io_completed | 完成io個數(shù),用于衡量io平均時延。 更多信息,請參見Block IO限流增強監(jiān)控接口。 | 是 | io.extstat |
blkio.throttle.total_bytes_queued | 發(fā)生限流的io字節(jié)統(tǒng)計,用于分析io時延是否與限流有關。 更多信息,請參見Block IO限流增強監(jiān)控接口。 | 是 | io.extstat |
blkio.throttle.total_io_queued | 發(fā)生限流的io統(tǒng)計,用于分析io時延是否與限流有關。 更多信息,請參見Block IO限流增強監(jiān)控接口。 | 是 | 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策略,用于磁盤擁塞狀態(tài)判斷。 僅存在于根組,例如: 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統(tǒng)計接口。僅存在于非根組。 | 是 | 不涉及 |
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統(tǒng)計信息,包含讀/寫/discard io的帶寬和io 個數(shù)。 | 否 | blkio.throttle.io_service_bytes blkio.throttle.io_serviced |
io.extstat | io擴展統(tǒng)計信息,包含讀寫io的等待時間、服務時間、完成個數(shù)、限流io的字節(jié)和個數(shù)統(tǒng)計。 | 否 | 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策略,用于磁盤擁塞狀態(tài)判斷。 僅存在于根組,例如: 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 | 展示內存使用達到限制的次數(shù)。 | 否 | 不涉及 |
memory.mglru_batch_size | 基于mglru框架的內存主動回收,設置批處理回收的內存數(shù)量,每批處理內存回收之間會嘗試釋放CPU。 | 是 | 不涉及 |
memory.mglru_reclaim_kbytes | 基于mglru框架的內存主動回收,設置主動回收內存的數(shù)量。 | 是 | 不涉及 |
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 | 實現(xiàn)memcg全局最低水位線分級功能的接口為memory.wmark_min_adj。 該接口的值,表示基于全局最低水位線(global wmark_min)所作出的調整(adjustment)百分比。取值范圍:-25 ~ 50,取值范圍說明如下:
更多信息,請參見Memcg全局最低水位線分級。 | 是 | |
memory.force_empty | 觸發(fā)強制頁回收。 | 否 | 不涉及 |
memory.use_hierarchy | 設置層級統(tǒng)計使能。 | 是 | 不涉及 |
memory.swappiness | 設置vmscan時swapiness的參數(shù)。 | 否 | 不涉及 |
memory.priority | 該接口提供13個級別的memcg優(yōu)先級以支持不同重要程度的業(yè)務。取值范圍為0~12,數(shù)值越大表示優(yōu)先級越高。該接口不會繼承,默認值為0。
| 是 | memory.priority |
memory.move_charge_at_immigrate | 設置移動時的統(tǒng)計控制策略。 | 否 | 不涉及 |
memory.oom_control | 設置oom時的控制策略。 | 否 | 不涉及 |
memory.oom.group | OOM group功能,當發(fā)生OOM時,殺死該memcg內的所有進程。 | 是 | memory.oom.group |
memory.pressure_level | 設置內存壓力通知。 | 否 | 不涉及 |
memory.kmem.limit_in_bytes | 設置內核內存使用量硬限制。 | 否 | 不涉及 |
memory.kmem.usage_in_bytes | 展示內核內存使用量。 | 否 | 不涉及 |
memory.kmem.failcnt | 展示內核內存使用達到限制的次數(shù)。 | 否 | 不涉及 |
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內存使用達到限制的次數(shù)。 | 否 | 不涉及 |
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使用達到限制的次數(shù)。 | 否 | 不涉及 |
memory.swap.high | 設置swap使用量限制。 | 是 | memory.swap.high |
memory.swap.events | 觸發(fā)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的內存分配節(jié)點。 | 是 | 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功能默認為關閉狀態(tài),即接口默認值為disable。 更多信息,請參見THP reclaim功能。 | 是 | memory.thp_reclaim |
memory.thp_reclaim_stat | 查看THP reclaim功能當前的狀態(tài)。接口內的參數(shù)說明如下:
該接口的參數(shù)值按照NUMA node的順序(node0、node1)從左到右排列。 更多信息,請參見THP reclaim功能。 | 是 | memory.thp_reclaim_stat |
memory.thp_reclaim_ctrl | 控制THP reclaim功能的觸發(fā)機制。目前支持以下配置項:
更多信息,請參見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 | 頁表頁內存是否強制在本節(jié)點申請。 | 是 | memory.pgtable_bind |
memory.pgtable_misplaced | 跨節(jié)點分配的頁表頁內存的統(tǒng)計 。 | 是 | 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內存統(tǒng)計。當前包含4個自研特性的統(tǒng)計:
更多信息,請參見Memcg Exstat功能。 | 自研增強 | memory.exstat |
memory.idle_page_stats | 冷內存:kidled的內存統(tǒng)計數(shù)據(jù)(單memcg + hierarchy)。 | 是 | memory.idle_page_stats |
memory.idle_page_stats.local | 冷內存:kidled的內存統(tǒng)計數(shù)據(jù)(單memcg)。 | 是 | memory.idle_page_stats.local |
memory.numa_stat | 匿名、文件、鎖定內存的NUMA統(tǒng)計。 | 否 | 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 | 內存的統(tǒng)計。 | 否 | memory.stat |
memory.use_priority_oom | 開啟priority oom開關。 更多信息,請參見Memcg OOM優(yōu)先級策略功能。 | 是 | memory.use_priority_oom |
memory.use_priority_swap | 開啟priority swap開關。 更多信息,請參見Memcg OOM優(yōu)先級策略功能。 | 是 | 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 | 觸發(fā)swap使用量達到限制時的事件。 | 否 | 不涉及 |
memory.oom.group | OOMgroup功能,當發(fā)生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 | 實現(xiàn)memcg全局最低水位線分級功能的接口為memory.wmark_min_adj。 該接口的值,表示基于全局最低水位線(global wmark_min)所作出的調整(adjustment)百分比。取值范圍:-25 ~ 50,取值范圍說明如下:
更多信息,請參見Memcg全局最低水位線分級。 | 是 | memory.wmark_min_adj |
memory.priority | 該接口提供13個級別的memcg優(yōu)先級以支持不同重要程度的業(yè)務。取值范圍為0~12,數(shù)值越大表示優(yōu)先級越高。該接口不會繼承,默認值為0。
更多信息,請參見Memcg OOM優(yōu)先級策略功能。 | 是 | memory.priority |
memory.use_priority_oom | 開啟priority oom開關。 更多信息,請參見Memcg OOM優(yōu)先級策略功能。 | 是 | memory.use_priority_oom |
memory.use_priority_swap | 開啟priority swap開關。 更多信息,請參見Memcg OOM優(yōu)先級策略功能。 | 是 | 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內存統(tǒng)計。當前包含4個自研特性的統(tǒng)計:
更多信息,請參見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的內存統(tǒng)計數(shù)據(jù)(單memcg + hierarchy) | 是 | memory.idle_page_stats |
memory.idle_page_stats.local | 冷內存:kidled 的內存統(tǒng)計數(shù)據(jù)(單memcg)。 | 是 | memory.idle_page_stats.local |
memory.numa_stat | 匿名、文件、鎖定內存的NUMA統(tǒng)計。 | 是 | memory.numa_stat |
memory.reap_background | zombie memcg reaper:memcg粒度的后臺/異步reap的開關。 | 是 | memory.reap_background |
memory.stat | 內存的統(tǒng)計。 | 否 | memory.stat |
memory.use_priority_oom | 開啟priority oom開關。 更多信息,請參見Memcg OOM優(yōu)先級策略功能。 | 是 | memory.use_priority_oom |
cpuacct
接口名稱 | 作用 | 是否自研 | 對應cgroup v2接口 |
cpuacct.usage | 使用CPU的總時間,單位是ns。 | 否 | 用cpu.stat展示類似的信息 |
cpuacct.usage_user | 在用戶態(tài)使用的CPU時間,單位是ns。 | 否 | |
cpuacct.usage_sys | 在內核態(tài)使用的CPU時間,單位是ns。 | 否 | |
cpuacct.usage_percpu | 每個CPU的使用時間,單位是ns。 | 否 | |
cpuacct.usage_percpu_user | 在用戶態(tài)每個CPU使用的時間,單位是ns。 | 否 | |
cpuacct.usage_percpu_sys | 在內核態(tài)每個CPU使用的時間,單位是ns。 | 否 | |
cpuacct.usage_all | cpuacct.usage_percpu_user和cpuacct.usage_percpu_sys信息的匯總,單位是ns。 | 否 | |
cpuacct.stat | 在用戶態(tài)和內核態(tài)使用的CPU時間,單位是tick。 | 否 | |
cpuacct.proc_stat | 展示容器粒度的CPU時間、loadavg、運行進程數(shù)量等信息。 | 是 | |
cpuacct.enable_sli | 控制是否統(tǒng)計容器粒度的loadavg。 | 是 | 不涉及 |
cpuacct.sched_cfs_statistics | cfs相關數(shù)據(jù)統(tǒng)計,例如運行時間,等待同級/非同級cgroup的時間等。 | 是 | cpu.sched_cfs_statistics |
cpuacct.wait_latency | 進程在隊列中等待的延遲分布。 | 是 | cpu.wait_latency |
cpuacct.cgroup_wait_latency | 進程組在隊列中等待的延遲分布,與wait_latency的區(qū)別在于,wait_latency統(tǒng)計task se,cgroup_wait_latency統(tǒng)計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 | 控制凍結狀態(tài),可寫入 | 否 | cgroup.freeze |
freezer.self_freezing | 展示是否因為自身的凍結狀態(tài)而凍結。 | 否 | 不涉及 |
freezer.parent_freezing | 展示是否因為祖先的凍結狀態(tài)而凍結。 | 否 | 不涉及 |
ioasids
ioasids子系統(tǒng)的cgroup v1接口和cgroup v2接口沒有差別。
接口名稱 | 作用 | 是否自研 |
ioasids.current | 當前group已經分配的ioasid的數(shù)量。 | 是 |
ioasids.events | 由于超過可分配ioasid的限制而發(fā)生的事件數(shù)量。 | 是 |
ioasids.max | 當前group可以分配的總的ioasid數(shù)量。 | 是 |
net_cls/net_prio
接口名稱 | 作用 | 是否自研 | 對應cgroup v2接口 |
net_cls.classid | 配置cgroup當前的class id, 與qdisc或iptable配合使用。 | 否 | 不涉及 說明 cgroup v2中移除了相關的接口, 建議使用ebpf對流量進行過濾和整形。 |
net_prio.prioidx | 只讀, 內核內部使用的, 當前cgroup在數(shù)據(jù)結構中的索引值。 | 否 | |
net_prio.ifpriomap | 配置每一個網卡對應的prio值。 | 否 |
perf_event
perf_event子系統(tǒng)沒有接口,perf_event在cgroup v2上默認使能,和cgroup v1沒有差別。
pids
pids子系統(tǒng)的cgroup v1接口和cgroup v2接口沒有差別。
接口名稱 | 作用 | 是否自研 |
pids.max | 控制進程數(shù)量上限。 | 否 |
pids.current | 展示當前進程數(shù)量。 | 否 |
pids.events | 展示因為達到進程數(shù)量上限而fork失敗的事件次數(shù),并支持fsnotify。 | 否 |
rdma
rdma子系統(tǒng)的cgroup v1接口和cgroup v2接口沒有差別。
接口名稱 | 作用 | 是否自研 |
rdma.max | 控制網卡資源使用限制。 | 否 |
rdma.current | 展示網卡資源使用。 | 否 |