[Devel] [PATCH vz10] cgroup-v2: Optimize loop in cgroup_controllers_hidden_write

Pavel Tikhomirov ptikhomirov at virtuozzo.com
Fri Dec 12 16:53:57 MSK 2025


It makes our interface different to mainstream cgroup_subtree_control_write() interface. Switching to do_each_subsys_mask saves 16 empty loop iterations maximum, I'd prefer been close to mainstream to been a bit faster here.

On 12/12/25 21:44, Konstantin Khorenko wrote:
> Replace for_each_subsys with do_each_subsys_mask to iterate only
> over subsystems in hide | show mask instead of all subsystems.
> This improves performance by skipping unnecessary iterations.
> 
> https://virtuozzo.atlassian.net/browse/VSTOR-119803
> Signed-off-by: Konstantin Khorenko <khorenko at virtuozzo.com>
> ---
>  kernel/cgroup/cgroup.c | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
> index 5ab96088eee31..4274097b65f9c 100644
> --- a/kernel/cgroup/cgroup.c
> +++ b/kernel/cgroup/cgroup.c
> @@ -3962,6 +3962,7 @@ static ssize_t cgroup_controllers_hidden_write(struct kernfs_open_file *of,
>  	u16 old_hidden_ss_mask;
>  	u16 change_mask = 0;
>  	u16 applied_mask = 0;
> +	u16 process_mask;
>  	int ssid, ret;
>  	char *tok;
>  
> @@ -3997,7 +3998,9 @@ static ssize_t cgroup_controllers_hidden_write(struct kernfs_open_file *of,
>  	if (!cgrp)
>  		return -ENODEV;
>  
> -	for_each_subsys(ss, ssid) {
> +	/* Iterate only over subsystems in hide | show mask for efficiency */
> +	process_mask = hide | show;
> +	do_each_subsys_mask(ss, ssid, process_mask) {
>  		if (hide & (1 << ssid)) {
>  			if (cgrp->hidden_ss_mask & (1 << ssid)) {
>  				hide &= ~(1 << ssid);
> @@ -4019,7 +4022,7 @@ static ssize_t cgroup_controllers_hidden_write(struct kernfs_open_file *of,
>  				goto out_unlock;
>  			}
>  		}
> -	}
> +	} while_each_subsys_mask();
>  
>  	if (!hide && !show) {
>  		ret = 0;

-- 
Best regards, Pavel Tikhomirov
Senior Software Developer, Virtuozzo.



More information about the Devel mailing list