本文檔內容主要是分析android設備中cgroup v1實現了哪些控制器,他們有哪些子控制器以及如何配置這些控制器的。 我是使用紅米Note4Plus的開發版本來調研分析的,手機已經解鎖並具有了root許可權,可以隨意操作修改手機內容。不涉及到源代碼層面的調查分析。 設備的基本配置信息:高通msm8 ...
目錄
本文檔內容主要是分析android設備中cgroup v1實現了哪些控制器,他們有哪些子控制器以及如何配置這些控制器的。
我是使用紅米Note4Plus的開發版本來調研分析的,手機已經解鎖並具有了root許可權,可以隨意操作修改手機內容。不涉及到源代碼層面的調查分析。
設備的基本配置信息:高通msm8953晶元、android7.0、8核CPU-arm64、3GB記憶體、內核版本3.18.31。
adb shell uname -a
Linux localhost 3.18.31-perf-g66052ad #1 SMP PREEMPT Thu Aug 29 23:06:40 CST 2019 aarch64
adb shell getprop |grep -iE "ro.build|ro.product|ro.board"
[ro.board.platform]: [msm8953]
[ro.build.date]: [Thu Aug 29 22:56:57 CST 2019]
[ro.build.software.version]: [Android7.0_10]
[ro.build.version.sdk]: [24]
[ro.product.board]: [msm8953]
[ro.product.cpu.abi]: [arm64-v8a]
[ro.product.model]: [Redmi Note 4X]
8核CPU, AArch64:
adb shell cat /proc/cpuinfo
Processor : AArch64 Processor rev 4 (aarch64)
processor : 0
BogoMIPS : 38.40
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part : 0xd03
CPU revision : 4
processor : 1 ...
processor : 2 ...
processor : 3 ...
processor : 4 ...
processor : 5 ...
processor : 6 ...
processor : 7 ...
Hardware : Qualcomm Technologies, Inc MSM8953
記憶體總大小為3GB。
adb shell cat /proc/meminfo
MemTotal: 2914764 kB ## 記憶體大小為3GB
MemFree: 1100080 kB
MemAvailable: 1306628 kB
Buffers: 9584 kB
Cached: 399040 kB
SwapCached: 72728 kB
Active: 598636 kB
Inactive: 411028 kB
Active(anon): 365696 kB
Inactive(anon): 391956 kB
Active(file): 232940 kB
Inactive(file): 19072 kB
Unevictable: 146796 kB
Mlocked: 146796 kB
SwapTotal: 1048572 kB
SwapFree: 669908 kB
Dirty: 60 kB
Writeback: 0 kB
AnonPages: 741228 kB
Mapped: 384520 kB
Shmem: 10056 kB
Slab: 133476 kB
SReclaimable: 36096 kB
SUnreclaim: 97380 kB
KernelStack: 38976 kB
PageTables: 38472 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 2505952 kB
Committed_AS: 70269080 kB
VmallocTotal: 258998208 kB
VmallocUsed: 126804 kB
VmallocChunk: 258746676 kB
1 開機初始化
開機初始化部分,主要分析cgroup文件系統是如何初始化的。我們重點關註init.xxx.rc文件中的初始化配置。
1.1 init.miui.rc
# 創建和掛載memory、freezer控制組。
on init
# Create cgroup mount point for memory and freezer
mount tmpfs none /sys/fs/cgroup mode=0750,uid=0,gid=1000
mkdir /sys/fs/cgroup/memory 0750 root system
mount cgroup none /sys/fs/cgroup/memory memory
mkdir /sys/fs/cgroup/freezer 0750 root system
mount cgroup none /sys/fs/cgroup/freezer freezer
# 創建cpuset的子控制器:vr、foreground、top-app、boost等
# 設置預設許可權
on late-init
# set vr related cpuset
mkdir /dev/cpuset/vr
write /dev/cpuset/vr/mems 0
# change permissions for vr cpusets as we'll touch at runtime
chown system system /dev/cpuset/foreground/boost/cpus
chmod 0664 /dev/cpuset/foreground/cpus
chown root system /dev/cpuset/foreground/cpus
chown system system /dev/cpuset/vr
chown system system /dev/cpuset/vr/cpu_exclusive
chown system system /dev/cpuset/vr/cpus
chown system system /dev/cpuset/vr/tasks
chmod 0664 /dev/cpuset/top-app/cpus
chown root system /dev/cpuset/top-app/cpus
chown system system /dev/cpuset/top-app/boost
chown system system /dev/cpuset/top-app/boost/tasks
chown system system /dev/cpuset/top-app/boost/cpus
chmod 0664 /dev/cpuset/vr/cpu_exclusive
chmod 0664 /dev/cpuset/vr/cpus
chmod 0664 /dev/cpuset/vr/tasks
chmod 0664 /dev/cpuset/top-app/boost/tasks
# 創建cpuset子控制器game、gamelite,並設置許可權。
on late-init
# put some heavy-load thread into this cpuset for performance
mkdir /dev/cpuset/game
write /dev/cpuset/game/mems 0
chown system system /dev/cpuset/game
chown system system /dev/cpuset/game/tasks
chown system system /dev/cpuset/game/cgroup.procs
chmod 0660 /dev/cpuset/game/tasks
chmod 0660 /dev/cpuset/game/cgroup.procs
# put some light-load thread into this cpuset for battery life
mkdir /dev/cpuset/gamelite
write /dev/cpuset/gamelite/mems 0
chown system system /dev/cpuset/gamelite
chown system system /dev/cpuset/gamelite/tasks
chown system system /dev/cpuset/gamelite/cgroup.procs
chmod 0660 /dev/cpuset/gamelite/tasks
chmod 0660 /dev/cpuset/gamelite/cgroup.procs
on boot
# 壓力時速監視器
# psi
chmod 0660 /proc/pressure/io
chmod 0660 /proc/pressure/memory
chmod 0660 /proc/pressure/cpu
# 創建cpuctl下的子控制器fg_service、fg_limited
# 初始化子控制器配置
mkdir /dev/cpuctl/fg_service
chown system system /dev/cpuctl/fg_service/tasks
chmod 0666 /dev/cpuctl/fg_service/tasks
write /dev/cpuctl/bg_non_interactive/cpu.rt_runtime_us 300000
write /dev/cpuctl/fg_service/cpu.shares 256
write /dev/cpuctl/fg_service/cpu.rt_runtime_us 400000
write /dev/cpuctl/fg_service/cpu.rt_period_us 1000000
mkdir /dev/cpuctl/fg_service/fg_limited
chown system system /dev/cpuctl/fg_service/fg_limited/tasks
chmod 0666 /dev/cpuctl/fg_service/fg_limited/tasks
write /dev/cpuctl/fg_service/fg_limited/cpu.shares 256
write /dev/cpuctl/fg_service/fg_limited/cpu.rt_runtime_us 400000
write /dev/cpuctl/fg_service/fg_limited/cpu.rt_period_us 1000000
1.2 init.qcom.rc
on init
# 創建記憶體控制器
# 設置基本配置
# Create cgroup mount point for memory
mkdir /sys/fs/cgroup/memory/bg 0750 root system
write /sys/fs/cgroup/memory/bg/memory.swappiness 140
write /sys/fs/cgroup/memory/bg/memory.move_charge_at_immigrate 1
chown root system /sys/fs/cgroup/memory/bg/tasks
chmod 0660 /sys/fs/cgroup/memory/bg/tasks
# 把日誌服務進程ID寫入到cpuset/system-background/tasks
# Logcat dump daemon, dumps logs to logdump partition
service logdumpd /system/bin/logcat -b all -v threadtime -D -w /dev/block/bootdevice/by-name/logdump
class core
writepid /dev/cpuset/system-background/tasks
seclabel u:r:logdumpd:s0
disabled
1.3 init.miui.early_boot.sh
配置了dex2oat線程的cpuset。詳情忽略。
1.4 init.zygote64_32.rc
# 把zygote服務放入cpuset/foreground控制組
service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-system-server --socket-name=zygote
class main
socket zygote stream 660 root system
onrestart write /sys/android_power/request_state wake
onrestart write /sys/power/state on
onrestart restart audioserver
onrestart restart cameraserver
onrestart restart media
onrestart restart netd
writepid /dev/cpuset/foreground/tasks /sys/fs/cgroup/stune/foreground/tasks
writepid /d/ktrace/sched/zygote64_pid
service zygote_secondary /system/bin/app_process32 -Xzygote /system/bin --zygote --socket-name=zygote_secondary
class main
socket zygote_secondary stream 660 root system
onrestart restart zygote
writepid /dev/cpuset/foreground/tasks /dev/stune/foreground/tasks
writepid /d/ktrace/sched/zygote_pid
1.5 init.target.rc
在這個文件中設置各種子控制組的預設的CPU親和性。
# 配置了cpuset的各組cpu分配
on boot
write /dev/cpuset/top-app/cpus 0-7
# 頂層app中的boost任務限制在4-7
write /dev/cpuset/top-app/boost/cpus 4-7
# 前臺任務限制在0-6
write /dev/cpuset/foreground/cpus 0-6
write /dev/cpuset/foreground/boost/cpus 0-6
# 後臺任務限制到 0-1
write /dev/cpuset/background/cpus 0-1
# 系統後臺限制到 0-3
write /dev/cpuset/system-background/cpus 0-3
總而言之,在開機初始化init.xx.rc中完成的任務主要是:
- 創建和掛載控制組文件系統。
- 寫入初始的基礎配置信息。
- 寫入某些關鍵進程到預設的控制組。
2 控制組概覽
2.1 控制器信息
cat /proc/cgroups
#subsys_name hierarchy num_cgroups enabled
cpuset 4 10 1
cpu 3 3 1
cpuacct 1 108 1
memory 2 3 1
freezer 5 65 1
這裡會列舉出每個控制器的名稱、分層的層級數、子控制組數量、是否已經使能。
2.2 控制組文件系統
查看每種控制組文件系統的掛載位置和掛載類型。
mount |grep cgroup
none on /acct type cgroup (rw,relatime,cpuacct)
none on /dev/memcg type cgroup (rw,relatime,memory)
none on /dev/cpuctl type cgroup (rw,relatime,cpu)
none on /dev/cpuset type cgroup (rw,relatime,cpuset,noprefix,release_agent=/sbin/cpuset_release_agent)
none on /sys/fs/cgroup type tmpfs (rw,seclabel,relatime,size=1436904k,nr_inodes=359226,mode=750,gid=1000)
none on /sys/fs/cgroup/memory type cgroup (rw,relatime,memory)
none on /sys/fs/cgroup/freezer type cgroup (rw,relatime,freezer)
說明:
掛載的文件系統類型是cgroup,是cgroup v1版本。cgroup v2版本的文件系統類型是cgroup2。
發現有兩個memory的節點:/dev/memcg,/sys/fs/cgroup/memory。查看對比了文件內容完全一致。沒有代碼來驗證他們是否是一個鏈接關係。
接下來我們就依次查看一下每種控制器的分層結構和配置信息。
3 cpuacct
從#2.1章節我們可以看到cpuacct有1個分層,108個控制組。這些子控制器是預設劃分的,以用戶id為單位。
ls -l
-rw-r--r-- 1 root root 0 2022-06-16 14:20 cgroup.clone_children
-rw-r--r-- 1 root root 0 2022-06-16 14:20 cgroup.procs
-r--r--r-- 1 root root 0 2022-06-16 14:20 cgroup.sane_behavior
-r--r--r-- 1 root root 0 2022-06-16 14:20 cpuacct.stat
-rw-r--r-- 1 root root 0 2022-06-16 14:20 cpuacct.usage
-r--r--r-- 1 root root 0 2022-06-16 14:20 cpuacct.usage_percpu
-rw-r--r-- 1 root root 0 2022-06-16 14:20 notify_on_release
-rw-r--r-- 1 root root 0 2022-06-16 14:20 release_agent
-rw-r--r-- 1 root root 0 2022-06-16 14:20 tasks
drwxr-xr-x 2 root root 0 2022-06-16 14:20 uid
drwx------ 20 system system 0 2022-06-16 13:57 uid_1000
drwx------ 5 system system 0 2022-06-16 10:28 uid_1001
drwx------ 6 system system 0 2022-06-16 10:27 uid_......
drwx------ 2 system system 0 2022-06-16 10:27 uid_10125
drwx------ 2 system system 0 2022-06-16 10:27 uid_10127
drwx------ 2 system system 0 2022-06-16 10:27 uid_10137
cat命令查看根目錄下的配置後做個簡單彙總:
配置 | 值 | 說明 |
---|---|---|
cgroup.clone_children | 0 | 子控制組不克隆配置 |
cgroup.procs | ... | 進程id列表 |
cgroup.sane_behavior | 0 | 不啟用blkio統計 |
cpuacct.stat | user 46994,system 72578 | 用戶空間和內核空間消耗的USER_HZ |
cpuacct.usage | 1317380348219 | 所有任務的累加CPU時間 |
cpuacct.usage_percpu | 。。。 | 每個CPU的累加時間(共8個CPU) |
notify_on_release | 0 | 沒有啟用控制組釋放的通知 |
release_agent | - | 沒有指定命令 |
tasks | ... | 線程id列表 |
任意選擇一個子控制器uid_10110來看一下:
ls
cgroup.clone_children cpuacct.stat cpuacct.usage_percpu tasks
cgroup.procs cpuacct.usage notify_on_release
cat cpuacct.usage
564932354
cat cpuacct.usage_percpu
165586827 221125369 52289165 26123542 18939792 24406827 49224999 7235833
cat cpuacct.stat
user 50
system 16
4 cpuset
4.1 cpuset分層結構
從#2.1章節我們可以看到cpuset有4個分層,10個控制組。
通過直觀的查看目錄樹,我們看到CPUSET控制組的樹形目錄:
/dev/cpuset
├── top-app
│ └── boost
├── foreground
│ └── boost
├── foreground
├── background
├── system-background
├── game
├── gamelite
└── vr
4.2 cpuset根控制組
看一下根目錄結構:
adb shell ls -l /dev/cpuset
total 0
drwxr-xr-x 2 system system 0 1974-11-23 05:28 background
-rw-r--r-- 1 root root 0 2022-06-17 08:58 cgroup.clone_children
-rw-r--r-- 1 root root 0 2022-06-17 08:58 cgroup.procs
-r--r--r-- 1 root root 0 2022-06-17 08:58 cgroup.sane_behavior
-rw-r--r-- 1 root root 0 2022-06-17 08:58 cpu_exclusive
-rw-r--r-- 1 root root 0 2022-06-17 08:58 cpus
-r--r--r-- 1 root root 0 2022-06-17 08:58 effective_cpus
-r--r--r-- 1 root root 0 2022-06-17 08:58 effective_mems
drwxr-xr-x 3 system system 0 1974-11-23 05:28 foreground
drwxr-xr-x 2 system system 0 1974-11-23 05:28 game
drwxr-xr-x 2 system system 0 1974-11-23 05:28 gamelite
-rw-r--r-- 1 root root 0 2022-06-17 08:58 mem_exclusive
-rw-r--r-- 1 root root 0 2022-06-17 08:58 mem_hardwall
-rw-r--r-- 1 root root 0 2022-06-17 08:58 memory_migrate
-r--r--r-- 1 root root 0 2022-06-17 08:58 memory_pressure
-rw-r--r-- 1 root root 0 2022-06-17 08:58 memory_pressure_enabled
-rw-r--r-- 1 root root 0 2022-06-17 08:58 memory_spread_page
-rw-r--r-- 1 root root 0 2022-06-17 08:58 memory_spread_slab
-rw-r--r-- 1 root root 0 2022-06-17 08:58 mems
-rw-r--r-- 1 root root 0 2022-06-17 08:58 notify_on_release
-rw-r--r-- 1 root root 0 2022-06-17 08:58 release_agent
-rw-r--r-- 1 root root 0 2022-06-17 08:58 sched_load_balance
-rw-r--r-- 1 root root 0 2022-06-17 08:58 sched_relax_domain_level
drwxrwxr-x 2 system system 0 1974-11-23 05:28 system-background
-rw-rw-r-- 1 system system 0 1974-11-23 05:28 tasks
drwxr-xr-x 3 system system 0 1974-11-23 05:28 top-app
drwxr-xr-x 2 system system 0 1974-11-23 05:28 vr
cat命令查看根目錄下的配置後做個簡單彙總:
配置 | 值 | 說明 |
---|---|---|
cgroup.clone_children | 0 | 子控制組不克隆配置 |
cgroup.procs | ... | 進程id列表 |
cgroup.sane_behavior | 0 | 不啟用blkio統計 |
cpus | 0-7 | cpu id列表 |
mems | 0 | mem節點id列表 |
effective_cpus | 0-7 | 有效cpu id列表 |
effective_mems | 0 | 有效mem節點id列表 |
cpu_exclusive | 1 | cpu獨占 |
mem_exclusive | 1 | mem獨占 |
mem_hardwall | 0 | 頁面限制沒有啟用 |
memory_migrate | 0 | 記憶體移動沒有啟用 |
memory_pressure_enabled | 0 | 記憶體壓力監測沒有使能 |
memory_pressure | 0 | 記憶體壓力監測為空 |
memory_spread_page | 0 | page擴展沒有使能 |
memory_spread_slab | 0 | slab擴展沒有使能 |
sched_load_balance | 1 | 開啟負載均衡 |
sched_relax_domain_level | -1 | 調度搜索範圍設為不限制 |
notify_on_release | 0 | 沒有啟用控制組釋放的通知 |
release_agent | /sbin/cpuset_release_agent | 指定了命令 |
tasks | ... | 線程id列表 |
4.3 cpuset子控制組
關鍵是要看系統的子控制組如何配置的。這些控制組的預設設置在初始化init.xxx.rc時已經寫入了。我這裡彙總一下cpuset中cpu和mem相關的配置信息。
控制組 | cpus | mems | sched_load_balance |
---|---|---|---|
top-app | 0-7 | 0 | 1 |
top-app/boost | 4-7 | 0 | 1 |
foreground | 0-6 | 0 | 1 |
foreground/boost | 4-7 | 0 | 1 |
background | 0-1 | 0 | 1 |
system-background | 0-3 | 0 | 1 |
game | - | 0 | 1 |
gamelite | - | 0 | 1 |
vr | - | 0 | 1 |
對看到的結果做個彙總:
- 只有一個mem節點,所以記憶體節點id列表肯定是0。
- miui配置的三個子控制組cpus為空,會使用父目錄下的配置。
- boost性能要求的控制組都配置在CPU4-7
- 後臺限制在0-1
- 系統後臺限制在0-3
- top應用全開放cpu0-7
5 cpuctl
5.1 cpuctl分層結構
從#2.1章節我們可以看到cpuctl有3個分層和3個控制組。
通過查看/dev/cpuctl下的目錄結構,我們可以看到控制組的分層結構:
/dev/cpuctl
└── fg_service
└── fg_limited
5.2 cpuctl配置和屬性
控制組根目錄:
adb shell ls -l /dev/cpuctl
-rw-r--r-- 1 root root 0 2022-06-17 10:42 cgroup.clone_children
-rw-r--r-- 1 root root 0 2022-06-17 10:42 cgroup.procs
-r--r--r-- 1 root root 0 2022-06-17 10:42 cgroup.sane_behavior
-rw-r--r-- 1 root root 0 2022-06-17 10:42 cpu.cfs_period_us
-rw-r--r-- 1 root root 0 2022-06-17 10:42 cpu.cfs_quota_us
-rw-r--r-- 1 root root 0 2022-06-17 10:42 cpu.notify_on_migrate
-rw-r--r-- 1 root root 0 2022-06-17 10:42 cpu.rt_period_us
-rw-r--r-- 1 root root 0 2022-06-17 10:42 cpu.rt_runtime_us
-rw-r--r-- 1 root root 0 2022-06-17 10:42 cpu.shares
-r--r--r-- 1 root root 0 2022-06-17 10:42 cpu.stat
-rw-r--r-- 1 root root 0 2022-06-17 10:42 cpu.upmigrate_discourage
drwxr-xr-x 3 root root 0 1974-11-23 05:28 fg_service
-rw-r--r-- 1 root root 0 2022-06-17 10:42 notify_on_release
-rw-r--r-- 1 root root 0 2022-06-17 10:42 release_agent
-rw-rw-rw- 1 system system 0 1974-11-23 05:28 tasks
通過cat命令,我們可以查看到幾個關鍵的cpu時間片分配信息:
配置 | root | fg_service | fg_limited | 說明 |
---|---|---|---|---|
cfs_period_us | 100000 | 100000 | 100000 | 100ms調度周期 |
cfs_quota_us | -1 | -1 | 80000 | fg_limited的時間片限定為80ms,即80%比例 |
shares | 1024 | 256 | 256 | fg_service和fg_limited的時間調度比分別設為1/4 |
rt_period_us | 1000000 | 1000000 | 1000000 | CPU運行周期1秒 |
rt_runtime_us | 950000 | 400000 | 400000 | 允許運行的CPU時間為950ms、400ms、400ms |
6 memory
6.1 mem控制組分層結構
查看控制組信息:
adb shell cat /proc/cgroups
#subsys_name hierarchy num_cgroups enabled
cpuset 4 10 1
cpu 3 3 1
cpuacct 1 103 1
memory 2 3 1
freezer 5 65 1
控制組有2層,3個控制組。通過查看/sys/fs/cgroup/memory目錄,我們可以看到memory的控制組結構如下:
/sys/fs/cgroup/memory
├── apps
└── sys_critical
6.2 控制組配置
通過cat命令,我們可以查看個控制組下的配置信息。在此我們跟控制組和2個子控制組的配置收集在這個表格中:
配置 | root | apps | sys_critical | 說明 |
---|---|---|---|---|
cgroup.clone_children | 0 | 0 | ||
cgroup.event_control | - | - | - | |
cgroup.procs | 列表省略... | 空 | ... | |
cgroup.sane_behavior | 0 | 無此文件 | ||
notify_on_release | 0 | 0 | ||
release_agent | 空 | 無此文件 | ||
tasks | 列表省略... | 空 | ... | |
memory.failcnt | 0 | 0 | 0 | |
memory.force_empty | - | - | - | |
memory.limit_in_bytes | 18446744073709551615 | 18446744073709551615 | 18446744073709551615 | |
memory.max_usage_in_bytes | 0 | 0 | 2793472 | |
memory.memsw.failcnt | 0 | 0 | 0 | |
memory.memsw.limit_in_bytes | 18446744073709551615 | 18446744073709551615 | 18446744073709551615 | |
memory.memsw.max_usage_in_bytes | 0 | 0 | 2797568 | |
memory.memsw.usage_in_bytes | 2329587712 | 0 | 2666496 | |
memory.move_charge_at_immigrate | 0 | 0 | 0 | |
memory.oom_control | oom_kill_disable 0 under_oom 0 | oom_kill_disable 0 under_oom 0 | oom_kill_disable 0 under_oom 0 | |
memory.pressure_level | - | - | - | |
memory.soft_limit_in_bytes | 18446744073709551615 | 18446744073709551615 | 18446744073709551615 | |
memory.stat | 內容太長,省略 | 內容太長,省略 | 內容太長,省略 | |
memory.swappiness | 60 | 0 | 0 | |
memory.usage_in_bytes | 1964482560 | 0 | 2662400 | |
memory.use_hierarchy | 0 | 0 | 0 | 0 |
針對上表信息對記憶體配置作個總結說明:
- apps控制組沒有寫入任務進程和線程,實際上沒有啟用。
- 內容用量還沒有觸達上限閾值,沒有相關的記憶體不夠用情況
- 記憶體軟限制跟硬限制閾值大小一樣。
7 freezer
7.1 freezer分層結構
查看控制組信息:
adb shell cat /proc/cgroups
#subsys_name hierarchy num_cgroups enabled
cpuset 4 10 1
cpu 3 3 1
cpuacct 1 103 1
memory 2 3 1
freezer 5 65 1
freezer控制組有5個層次,65個控制組。
我們看一下/sys/fs/cgroup/freezer的目錄結構,大概看一下控制的分層結構(一個root加上64個子控制組):
/sys/fs/cgroup/freezer
├── miui0
├── miui1
├── miui2
├── miuiXXX ...
├── miui61
├── miui62
└── miui63
從這裡可以看出,miui預設劃分了64個子控制組,如果需要批量操作進程線程,只需要寫入到相應的控制組即可。
7.2 freezer控制組配置
根目錄下除了cgroup全局控制之外,沒有其他內容。
muiui0~miui63子控制組只是預先劃分好的,裡面並沒有填充任何進程和線程,實際上是沒有有效工作的。
我們隨便看一下miui11子控制組下的配置文件:
cat cgroup.clone_children
0
# 沒有配置進程列表
cat cgroup.procs
空
# 父狀態
cat freezer.parent_freezing
0
# 自狀態
cat freezer.self_freezing
0
# 狀態:未凍結
cat freezer.state
THAWED
# 釋放通知未啟用
cat notify_on_release
0
# 線程列表為空
cat tasks
空