From f99ca8aeb1d20218663911ec3d1ea12b2ee9fd05 Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Tue, 14 Nov 2023 07:49:05 -0800 Subject: [PATCH] Migrate the blkio controller to the v2 cgroup hierarchy There are multiple use cases in Android for which background writes need to be controlled via the cgroup mechanism. The cgroup mechanism can only control background writes if both the blkio and memcg controllers are mounted in the v2 cgroup hierarchy. Hence this patch that migrates the blkio controller from the v1 to the v2 cgroup hierarchy. The changes compared to the previous version of this CL are as follows: - The JoinCgroup actions for the "io" controller have been left out since these caused processes to be migrated to the v2 root cgroup. - The BfqWeight / CfqGroupIdle / CfqWeight settings have been included in this CL instead of applying these settings as a separate CL. Change-Id: I67e06ce3462bb1c1345dba78f8d3d655b6519c74 Signed-off-by: Bart Van Assche --- libprocessgroup/profiles/cgroups.json | 13 +-- libprocessgroup/profiles/task_profiles.json | 115 ++++++++++++++++++-- rootdir/init.rc | 20 ---- 3 files changed, 109 insertions(+), 39 deletions(-) diff --git a/libprocessgroup/profiles/cgroups.json b/libprocessgroup/profiles/cgroups.json index 3e4393df2..d013ec858 100644 --- a/libprocessgroup/profiles/cgroups.json +++ b/libprocessgroup/profiles/cgroups.json @@ -1,12 +1,5 @@ { "Cgroups": [ - { - "Controller": "blkio", - "Path": "/dev/blkio", - "Mode": "0775", - "UID": "system", - "GID": "system" - }, { "Controller": "cpu", "Path": "/dev/cpuctl", @@ -39,6 +32,12 @@ { "Controller": "freezer", "Path": "." + }, + { + "Controller": "io", + "Path": ".", + "NeedsActivation": true, + "Optional": true } ] } diff --git a/libprocessgroup/profiles/task_profiles.json b/libprocessgroup/profiles/task_profiles.json index 1fc66ba10..2c08b0b31 100644 --- a/libprocessgroup/profiles/task_profiles.json +++ b/libprocessgroup/profiles/task_profiles.json @@ -76,6 +76,21 @@ "Name": "FreezerState", "Controller": "freezer", "File": "cgroup.freeze" + }, + { + "Name": "BfqWeight", + "Controller": "io", + "File": "io.bfq.weight" + }, + { + "Name": "CfqGroupIdle", + "Controller": "io", + "File": "io.group_idle" + }, + { + "Name": "CfqWeight", + "Controller": "io", + "File": "io.weight" } ], @@ -439,11 +454,30 @@ "Name": "LowIoPriority", "Actions": [ { - "Name": "JoinCgroup", + "Name": "SetAttribute", "Params": { - "Controller": "blkio", - "Path": "background" + "Name": "BfqWeight", + "Value": "10", + "Optional": "true" + } + }, + { + "Name": "SetAttribute", + "Params": + { + "Name": "CfqGroupIdle", + "Value": "0", + "Optional": "true" + } + }, + { + "Name": "SetAttribute", + "Params": + { + "Name": "CfqWeight", + "Value": "200", + "Optional": "true" } } ] @@ -452,11 +486,30 @@ "Name": "NormalIoPriority", "Actions": [ { - "Name": "JoinCgroup", + "Name": "SetAttribute", "Params": { - "Controller": "blkio", - "Path": "" + "Name": "BfqWeight", + "Value": "100", + "Optional": "true" + } + }, + { + "Name": "SetAttribute", + "Params": + { + "Name": "CfqGroupIdle", + "Value": "0", + "Optional": "true" + } + }, + { + "Name": "SetAttribute", + "Params": + { + "Name": "CfqWeight", + "Value": "1000", + "Optional": "true" } } ] @@ -465,11 +518,30 @@ "Name": "HighIoPriority", "Actions": [ { - "Name": "JoinCgroup", + "Name": "SetAttribute", "Params": { - "Controller": "blkio", - "Path": "" + "Name": "BfqWeight", + "Value": "100", + "Optional": "true" + } + }, + { + "Name": "SetAttribute", + "Params": + { + "Name": "CfqGroupIdle", + "Value": "0", + "Optional": "true" + } + }, + { + "Name": "SetAttribute", + "Params": + { + "Name": "CfqWeight", + "Value": "1000", + "Optional": "true" } } ] @@ -478,11 +550,30 @@ "Name": "MaxIoPriority", "Actions": [ { - "Name": "JoinCgroup", + "Name": "SetAttribute", "Params": { - "Controller": "blkio", - "Path": "" + "Name": "BfqWeight", + "Value": "100", + "Optional": "true" + } + }, + { + "Name": "SetAttribute", + "Params": + { + "Name": "CfqGroupIdle", + "Value": "0", + "Optional": "true" + } + }, + { + "Name": "SetAttribute", + "Params": + { + "Name": "CfqWeight", + "Value": "1000", + "Optional": "true" } } ] diff --git a/rootdir/init.rc b/rootdir/init.rc index 317f80908..fb6473666 100644 --- a/rootdir/init.rc +++ b/rootdir/init.rc @@ -219,26 +219,6 @@ on init write /dev/stune/nnapi-hal/schedtune.boost 1 write /dev/stune/nnapi-hal/schedtune.prefer_idle 1 - # Create blkio group and apply initial settings. - # This feature needs kernel to support it, and the - # device's init.rc must actually set the correct values. - mkdir /dev/blkio/background - chown system system /dev/blkio - chown system system /dev/blkio/background - chown system system /dev/blkio/tasks - chown system system /dev/blkio/background/tasks - chown system system /dev/blkio/cgroup.procs - chown system system /dev/blkio/background/cgroup.procs - chmod 0664 /dev/blkio/tasks - chmod 0664 /dev/blkio/background/tasks - chmod 0664 /dev/blkio/cgroup.procs - chmod 0664 /dev/blkio/background/cgroup.procs - write /dev/blkio/blkio.weight 1000 - write /dev/blkio/background/blkio.weight 200 - write /dev/blkio/background/blkio.bfq.weight 10 - write /dev/blkio/blkio.group_idle 0 - write /dev/blkio/background/blkio.group_idle 0 - restorecon_recursive /mnt mount configfs none /config nodev noexec nosuid