cgroup/rstat: Record the cumulative per-cpu time of cgroup and its descendants
authorHao Jia <jiahao.os@bytedance.com>
Mon, 7 Aug 2023 03:29:30 +0000 (11:29 +0800)
committerTejun Heo <tj@kernel.org>
Mon, 7 Aug 2023 18:41:25 +0000 (08:41 -1000)
commit0437719c1a97791481c5fd59642494f2108701a8
treebfcf3316cae8af8e104241529ba6feb9646d7740
parente7e64a1bff12f212be12b048723718c2152c4489
cgroup/rstat: Record the cumulative per-cpu time of cgroup and its descendants

The member variable bstat of the structure cgroup_rstat_cpu
records the per-cpu time of the cgroup itself, but does not
include the per-cpu time of its descendants. The per-cpu time
including descendants is very useful for calculating the
per-cpu usage of cgroups.

Although we can indirectly obtain the total per-cpu time
of the cgroup and its descendants by accumulating the per-cpu
bstat of each descendant of the cgroup. But after a child cgroup
is removed, we will lose its bstat information. This will cause
the cumulative value to be non-monotonic, thus affecting
the accuracy of cgroup per-cpu usage.

So we add the subtree_bstat variable to record the total
per-cpu time of this cgroup and its descendants, which is
similar to "cpuacct.usage*" in cgroup v1. And this is
also helpful for the migration from cgroup v1 to cgroup v2.
After adding this variable, we can obtain the per-cpu time of
cgroup and its descendants in user mode through eBPF/drgn, etc.
And we are still trying to determine how to expose it in the
cgroupfs interface.

Suggested-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Hao Jia <jiahao.os@bytedance.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
include/linux/cgroup-defs.h
kernel/cgroup/rstat.c