Re: [PATCH v10 2/5] sched: CGroup tagging interface for core scheduling

From: Peter Zijlstra
Date: Fri Feb 05 2021 - 06:59:59 EST


On Fri, Jan 22, 2021 at 08:17:01PM -0500, Joel Fernandes (Google) wrote:

> +/* All active sched_core_cookies */
> +static struct rb_root sched_core_cookies = RB_ROOT;
> +static DEFINE_RAW_SPINLOCK(sched_core_cookies_lock);

> +/*
> + * Returns the following:
> + * a < b => -1
> + * a == b => 0
> + * a > b => 1
> + */
> +static int sched_core_cookie_cmp(const struct sched_core_cookie *a,
> + const struct sched_core_cookie *b)
> +{
> +#define COOKIE_CMP_RETURN(field) do { \
> + if (a->field < b->field) \
> + return -1; \
> + else if (a->field > b->field) \
> + return 1; \
> +} while (0) \
> +
> + COOKIE_CMP_RETURN(task_cookie);
> + COOKIE_CMP_RETURN(group_cookie);
> +
> + /* all cookie fields match */
> + return 0;
> +
> +#undef COOKIE_CMP_RETURN
> +}

AFAICT all this madness exists because cgroup + task interaction, yet
none of that code is actually dependent on cgroups being on.

So this seems to implement semantics that will make two tasks that share
a cookie, but are then placed in different cgroups not actually share.

Is that desired? Can we justify these semantics and the resulting code
complexity.