[Devel] [PATCH vz10] cpuacct: expose interface file in cgroup v2

Konstantin Khorenko khorenko at virtuozzo.com
Wed Nov 19 19:26:31 MSK 2025


On 11/10/25 17:03, Aleksei Oladko wrote:
> In commit 0a76d99f5aa, the cpuacct controller was implicitly enabled in
> cgroup v2. This patch enables user access to the cpuacct interface files
> in cgroup v2, allowing statistics such as cpuacct.usage_percpu to be
> retrieved in the same way as in cgroup v1.
> 
> https://virtuozzo.atlassian.net/browse/VSTOR-100092
> 
> Signed-off-by: Aleksei Oladko <aleksey.oladko at virtuozzo.com>
> ---
>   kernel/sched/cpuacct.c | 38 ++++++++++++++++++++++++++++++++++++++
>   1 file changed, 38 insertions(+)
> 
> diff --git a/kernel/sched/cpuacct.c b/kernel/sched/cpuacct.c
> index 65a331807e5d..4aa845afa9e7 100644
> --- a/kernel/sched/cpuacct.c
> +++ b/kernel/sched/cpuacct.c
> @@ -293,6 +293,43 @@ static int cpuacct_stats_show(struct seq_file *sf, void *v)
>   	return 0;
>   }
>   
> +static struct cftype cpuacct_files[] = {
> +	{
> +		.name = "usage",
> +		.read_u64 = cpuusage_read,
> +		.write_u64 = cpuusage_write,
> +	},
> +	{
> +		.name = "usage_user",
> +		.read_u64 = cpuusage_user_read,
> +	},
> +	{
> +		.name = "usage_sys",
> +		.read_u64 = cpuusage_sys_read,
> +	},
> +	{
> +		.name = "usage_percpu",
> +		.seq_show = cpuacct_percpu_seq_show,
> +	},
> +	{
> +		.name = "usage_percpu_user",
> +		.seq_show = cpuacct_percpu_user_seq_show,
> +	},
> +	{
> +		.name = "usage_percpu_sys",
> +		.seq_show = cpuacct_percpu_sys_seq_show,
> +	},
> +	{
> +		.name = "usage_all",
> +		.seq_show = cpuacct_all_seq_show,
> +	},
> +	{
> +		.name = "stat",
> +		.seq_show = cpuacct_stats_show,
> +	},
> +	{ }	/* terminate */
> +};
> +
>   static struct cftype files[] = {
>   	{
>   		.name = "usage",
> @@ -363,6 +400,7 @@ struct cgroup_subsys cpuacct_cgrp_subsys = {
>   	.css_alloc	= cpuacct_css_alloc,
>   	.css_free	= cpuacct_css_free,
>   	.legacy_cftypes	= files,
> +	.dfl_cftypes	= cpuacct_files,

May be just

      1 │ struct cgroup_subsys cpuacct_cgrp_subsys = {
      2 │    .css_alloc  = cpuacct_css_alloc,
      3 │    .css_free   = cpuacct_css_free,
      4 │    .legacy_cftypes = files,
      5 │+   .dfl_cftypes    = files,  /* Same files for v1 and v2 */
      6 │    .early_init = true,
      7 │
      8 │    .implicit_on_dfl = true,
      9 │    .threaded       = true,
     10 │ };

?

int __init cgroup_init(void)
{
...
                 if (ss->dfl_cftypes == ss->legacy_cftypes) {
                         WARN_ON(cgroup_add_cftypes(ss, ss->dfl_cftypes));
                 } else {
                         WARN_ON(cgroup_add_dfl_cftypes(ss, ss->dfl_cftypes));
                         WARN_ON(cgroup_add_legacy_cftypes(ss, ss->legacy_cftypes));
                 }


>   	.early_init	= true,
>   
>   	.implicit_on_dfl = true,



More information about the Devel mailing list