Re: [RFC][PATCH] sched: fix GENTLE_FAIR_SLEEPERS dependency

Ingo Molnar
2009-12-04T09:54:14Z

* Suresh Jayaraman <sjayaraman@suse.de> wrote:

> The newly introduced GENTLE_FAIR_SLEEPERS does not seem to have any
> effect without FAIR_SLEEPERS. Fix sysctl.sched_features to reflect
> this. Without this change, a user who sets GENTLE_FAIR_SLEEPERS
> without FAIR_SLEEPERS would assume gentle sleeper fairness which
> is not guaranteed.
>
> Signed-off-by: Suresh Jayaraman <sjayaraman@suse.de>
> ---
>
> Index: linux-2.6/kernel/sched.c
> ===================================================================
> --- linux-2.6.orig/kernel/sched.c
> +++ linux-2.6/kernel/sched.c
> @@ -761,10 +761,22 @@ sched_feat_write(struct file *filp, cons
> int len = strlen(sched_feat_names[i]);
>
> if (strncmp(cmp, sched_feat_names[i], len) == 0) {
> - if (neg)
> + if (neg) {
> sysctl_sched_features &= ~(1UL << i);
> - else
> + /*
> + * GENTLE_FAIR_SLEEPERS have no effect without
> + * FAIR_SLEEPERS.
> + */
> + if (strncmp(cmp, "FAIR_SLEEPERS",
> + strlen("FAIR_SLEEPERS")) == 0)
> + sysctl_sched_features &= ~(1UL << i+1);
> + } else {
> sysctl_sched_features |= (1UL << i);
> + if (strncmp(cmp, "GENTLE_FAIR_SLEEPERS",
> + strlen("GENTLE_FAIR_SLEEPERS"))
> + == 0)
> + sysctl_sched_features |= (1UL << i-1);
> + }
> break;
> }
> }

There's a lot of other dependencies between scheduler features so it's
possible to change it without it having an effect on the scheduler.

sched_features is really a development/debugging facility, you have to
know what you are doing.

Might be worth adding a comment to the feature definition place itself
in the source - explain what it does and how it makes sense (and how it
doesnt).

Ingo