[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