From 07f6c82a4ce101ef74c1da03a655e5052285de0a Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Thu, 20 Jan 2022 21:46:30 +0000 Subject: [PATCH] Migrate the blkio controller to the v2 cgroup hierarchy This patch preserves the following parameter values: * Foreground BFQ weight: 100 * Foreground CFQ group_idle: 0 * Foreground CFQ weight: 1000 * Background BFQ weight: 10 * Background CFQ group_idle: 0 * Background CFQ weight: 200 The foreground BFQ weight in task_profiles.json is the default BFQ weight. From https://www.kernel.org/doc/Documentation/block/bfq-iosched.txt: "weight (namely blkio.bfq.weight or io.bfq-weight): the weight of the group inside its parent. Available values: 1..10000 (default 100). The linear mapping between ioprio and weights, described at the beginning of the tunable section, is still valid, but all weights higher than IOPRIO_BE_NR*10 are mapped to ioprio 0." Bug: 213617178 Test: Booted Android in Cuttlefish and ran the following test: Test: adb -e shell cat /sys/fs/cgroup/*/*/io.bfq.weight | sort | uniq -c Test: 22 default 10 Test: 98 default 100 Change-Id: I7dfa521363a316592852fecce9192708c7a90514 Signed-off-by: Bart Van Assche --- libprocessgroup/profiles/cgroups.json | 12 +- libprocessgroup/profiles/task_profiles.json | 118 ++++++++++++++++++-- rootdir/init.rc | 20 ---- 3 files changed, 111 insertions(+), 39 deletions(-) diff --git a/libprocessgroup/profiles/cgroups.json b/libprocessgroup/profiles/cgroups.json index 3e4393df2..23d76ee15 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,11 @@ { "Controller": "freezer", "Path": "." + }, + { + "Controller": "io", + "Path": ".", + "NeedsActivation": true } ] } diff --git a/libprocessgroup/profiles/task_profiles.json b/libprocessgroup/profiles/task_profiles.json index 7e0396467..e73de796c 100644 --- a/libprocessgroup/profiles/task_profiles.json +++ b/libprocessgroup/profiles/task_profiles.json @@ -76,6 +76,24 @@ "Name": "FreezerState", "Controller": "freezer", "File": "cgroup.freeze" + }, + { + "Name": "BfqWeight", + "Controller": "io", + "File": "blkio.bfq.weight", + "FileV2": "io.bfq.weight" + }, + { + "Name": "CfqGroupIdle", + "Controller": "io", + "File": "blkio.group_idle", + "FileV2": "io.group_idle" + }, + { + "Name": "CfqWeight", + "Controller": "io", + "File": "blkio.weight", + "FileV2": "io.weight" } ], @@ -440,11 +458,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" } } ] @@ -453,11 +490,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" } } ] @@ -466,11 +522,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" } } ] @@ -479,11 +554,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 7ad1c3ce8..1bb7ac3e1 100644 --- a/rootdir/init.rc +++ b/rootdir/init.rc @@ -243,26 +243,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