[Devel] [PATCH RH8] ve/cgroup: hide ve and ub cgroups in CT
Pavel Tikhomirov
ptikhomirov at virtuozzo.com
Mon Apr 26 11:36:46 MSK 2021
The corresponding hunk in proc_cgroupstats_show is missing.
On 4/26/21 10:17 AM, Andrey Zhadchenko wrote:
> From: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
>
> Reasons:
> 1) We don't need to show these cgroups in CT, they are vz specific,
> and nobody should use them inside.
> 2) Docker from v17.11 checks that all cgroups are mounted, but we
> don't mount beancounter and ve, thus docker fails.
>
> Still show ve and ub for pseudosuper, so that these change does not
> influence criu. I checked that with these patch c/r of container works
> fine and values in ve cgroup files persist.
>
> Docker ct starts fine after these change.
>
> https://jira.sw.ru/browse/PSBM-80421
>
> Signed-off-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
> Reviewed-by: Cyrill Gorcunov <gorcunov at openvz.org>
>
> Rebased to vz8:
> - Deleted beancounter
> - Added #ifdef CONFIG_VE
>
> (cherry picked from d1580bf6a02ab7d2bedf4b6ecd506a2c6a44d59e)
> Signed-off-by: Andrey Zhadchenko <andrey.zhadchenko at virtuozzo.com>
> ---
> kernel/cgroup/cgroup.c | 20 ++++++++++++++++++++
> 1 file changed, 20 insertions(+)
>
> diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
> index 779a71b..bb04943 100644
> --- a/kernel/cgroup/cgroup.c
> +++ b/kernel/cgroup/cgroup.c
> @@ -5984,6 +5984,21 @@ void cgroup_path_from_kernfs_id(const union kernfs_node_id *id,
> kernfs_put(kn);
> }
>
> +#ifdef CONFIG_VE
> +static int ve_hide_cgroups(struct cgroup_root *root)
> +{
> + struct ve_struct *ve = get_exec_env();
> + unsigned long hidden_mask = (1UL << ve_cgrp_id);
> +
> + /*
> + * Hide ve cgroup in CT for docker,
> + * still showing it to pseudosuper (criu)
> + */
> + return !ve_is_super(ve) && !ve->is_pseudosuper
> + && (root->subsys_mask & hidden_mask);
> +}
> +#endif
> +
> /*
> * proc_cgroup_show()
> * - Print task's cgroup paths into seq_file, one line for each hierarchy
> @@ -6012,6 +6027,11 @@ int proc_cgroup_show(struct seq_file *m, struct pid_namespace *ns,
> if (root == &cgrp_dfl_root && !cgrp_dfl_visible)
> continue;
>
> +#ifdef CONFIG_VE
> + if (ve_hide_cgroups(root))
> + continue;
> +#endif
> +
> seq_printf(m, "%d:", root->hierarchy_id);
> if (root != &cgrp_dfl_root)
> for_each_subsys(ss, ssid)
>
--
Best regards, Tikhomirov Pavel
Software Developer, Virtuozzo.
More information about the Devel
mailing list