blk-cgroup: show global disk stats in root cgroup io.stat
authorBoris Burkov <boris@bur.io>
Mon, 1 Jun 2020 20:12:05 +0000 (13:12 -0700)
committerJens Axboe <axboe@kernel.dk>
Sat, 18 Jul 2020 02:18:00 +0000 (20:18 -0600)
commitef45fe470e1e5410db4af87abc5d5055427945ac
tree04e0ebe3aab3388aaffab326991e46c407977b8f
parentcd1fc4b98fb5953a220d690d45b11470fd9325d6
blk-cgroup: show global disk stats in root cgroup io.stat

In order to improve consistency and usability in cgroup stat accounting,
we would like to support the root cgroup's io.stat.

Since the root cgroup has processes doing io even if the system has no
explicitly created cgroups, we need to be careful to avoid overhead in
that case.  For that reason, the rstat algorithms don't handle the root
cgroup, so just turning the file on wouldn't give correct statistics.

To get around this, we simulate flushing the iostat struct by filling it
out directly from global disk stats. The result is a root cgroup io.stat
file consistent with both /proc/diskstats and io.stat.

Note that in order to collect the disk stats, we needed to iterate over
devices. To facilitate that, we had to change the linkage of a disk_type
to external so that it can be used from blk-cgroup.c to iterate over
disks.

Suggested-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Boris Burkov <boris@bur.io>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Documentation/admin-guide/cgroup-v2.rst
block/blk-cgroup.c
block/genhd.c
include/linux/genhd.h