Skip to content

cgroup I/O control is inert unless the kernel config enables it

scope: soc:msm8998 · severity: fact · confidence: proven · subsystem: performance

On the taimen kernel config, io.weight, io.max, io.latency, systemd’s IOWeight= / IOReadBandwidthMax=, and IOSchedulingClass= are all inert. Do not design a fix around them without changing the kernel config first.

CONFIG_BLK_CGROUP=y # accounting only
# CONFIG_BLK_CGROUP_IOLATENCY is not set
# CONFIG_BLK_CGROUP_IOCOST is not set
# CONFIG_BLK_CGROUP_IOPRIO is not set
# CONFIG_BFQ_GROUP_IOSCHED is not set

On device this shows as /sys/fs/cgroup/ carrying only io.pressure and io.stat — there is no io.weight to write. And /sys/block/sda/queue/scheduler selects mq-deadline, which ignores ioprio entirely, so IOSchedulingClass=idle is a no-op too. Only bfq honours ioprio, and it is built but not selected.

Consequence: a background.slice can be CPU-nice’d but has no I/O protection at all, and none can be added from userspace on this kernel.

The general check, on any device, before designing around a cgroup knob: ls /sys/fs/cgroup/ and confirm the file you intend to write actually exists.

Related: shipped-configuration-is-not-running-configuration.