新項目,Android Q,按照之前的慣例,在配置blkio的前後臺weight比例。
今天在驗證效果時發現,/bg分組下的tasks爲空——即表示沒有任何task被移入此組。
第一反應是cgroup的blkio沒有生效,但是在ls -al /dev/blkio查看後發現,存在一個我並沒有創建的目錄(分組):/dev/blkio/background:
XXX:/ $ ls -al dev/blkio/
total 0
drwxr-xr-x 3 root system 0 2019-09-29 10:31 .
drwxr-xr-x 21 root root 4640 2019-09-29 10:31 ..
drwxr-xr-x 2 system system 0 2019-09-29 10:31 background
drwxr-xr-x 2 system system 0 2019-09-29 10:31 bg
-rw-r--r-- 1 root root 0 2019-09-29 10:31 blkio.group_idle
-r--r--r-- 1 root root 0 2019-09-29 11:27 blkio.io_merged
-r--r--r-- 1 root root 0 2019-09-29 11:27 blkio.io_merged_recursive
-r--r--r-- 1 root root 0 2019-09-29 11:27 blkio.io_queued
-r--r--r-- 1 root root 0 2019-09-29 11:27 blkio.io_queued_recursive
-r--r--r-- 1 root root 0 2019-09-29 11:27 blkio.io_service_bytes
-r--r--r-- 1 root root 0 2019-09-29 11:27 blkio.io_service_bytes_recursive
-r--r--r-- 1 root root 0 2019-09-29 11:27 blkio.io_service_time
-r--r--r-- 1 root root 0 2019-09-29 11:27 blkio.io_service_time_recursive
-r--r--r-- 1 root root 0 2019-09-29 11:27 blkio.io_serviced
-r--r--r-- 1 root root 0 2019-09-29 11:27 blkio.io_serviced_recursive
-r--r--r-- 1 root root 0 2019-09-29 11:27 blkio.io_wait_time
-r--r--r-- 1 root root 0 2019-09-29 11:27 blkio.io_wait_time_recursive
-rw-r--r-- 1 root root 0 2019-09-29 11:27 blkio.leaf_weight
-rw-r--r-- 1 root root 0 2019-09-29 11:27 blkio.leaf_weight_device
--w------- 1 root root 0 2019-09-29 11:27 blkio.reset_stats
-r--r--r-- 1 root root 0 2019-09-29 11:27 blkio.sectors
-r--r--r-- 1 root root 0 2019-09-29 11:27 blkio.sectors_recursive
-r--r--r-- 1 root root 0 2019-09-29 11:27 blkio.time
-r--r--r-- 1 root root 0 2019-09-29 11:27 blkio.time_recursive
-rw-r--r-- 1 root system 0 2019-09-29 10:31 blkio.weight
-rw-r--r-- 1 root root 0 2019-09-29 11:27 blkio.weight_device
-rw-r--r-- 1 root root 0 2019-09-29 11:27 cgroup.clone_children
-rw-r--r-- 1 root root 0 2019-09-29 11:27 cgroup.procs
-r--r--r-- 1 root root 0 2019-09-29 11:27 cgroup.sane_behavior
-rw-r--r-- 1 root root 0 2019-09-29 11:27 notify_on_release
-rw-r--r-- 1 root root 0 2019-09-29 11:27 release_agent
-rw-rw-r-- 1 root system 0 2019-09-29 10:31 tasks
查看background分組中的tasks發現有大量task號,且在動態變動:
XXX:/ $ cat dev/blkio/background/tasks | wc -l
339
XXX:/ $ cat dev/blkio/background/tasks | wc -l
315
基本確定Android Q上的AMS與LMKD在修改進程優先級時控制前後臺blkio.weight的分組已經從以前的/與/bg,變更爲了/與/background。
爲了進一步確認這一點,開始跟代碼。
發現sched_policy.cpp中的set_cpuset_policy函數實現變化較大:
int set_cpuset_policy(int tid, SchedPolicy policy) {
if (tid == 0) {
tid = GetThreadId();
}
policy = _policy(policy);
switch (policy) {
case SP_BACKGROUND:
return SetTaskProfiles(tid,
{"HighEnergySaving", "ProcessCapacityLow", "LowIoPriority",
"TimerSlackHigh"},
true)
? 0
: -1;
case SP_FOREGROUND:
case SP_AUDIO_APP:
case SP_AUDIO_SYS:
return SetTaskProfiles(tid,
{"HighPerformance", "ProcessCapacityHigh", "HighIoPriority",
"TimerSlackNormal"},
true)
? 0
: -1;
case SP_TOP_APP:
return SetTaskProfiles(tid,
{"MaxPerformance", "ProcessCapacityMax", "MaxIoPriority",
"TimerSlackNormal"},
true)
? 0
: -1;
case SP_SYSTEM:
return SetTaskProfiles(tid, {"ServiceCapacityLow", "TimerSlackNormal"}, true) ? 0 : -1;
case SP_RESTRICTED:
return SetTaskProfiles(tid, {"ServiceCapacityRestricted", "TimerSlackNormal"}, true)
? 0
: -1;
default:
break;
}
return 0;
}
SetTaskProfiles爲配置文件,具體定義在system/core/libprocessgroup/profiles/task_profiles.json,比如LowIoPriority定義則爲:
{
"Name": "LowIoPriority",
"Actions": [
{
"Name": "JoinCgroup",
"Params":
{
"Controller": "blkio",
"Path": "background"
}
}
]
},
此處真相大白。