Re: [PATCH 03/19] scheduler: implement workqueue scheduler class

Ingo Molnar
2009-10-01T18:49:06Z

* Linus Torvalds <torvalds@linux-foundation.org> wrote:

> On Thu, 1 Oct 2009, Tejun Heo wrote:
> >
> > Implement workqueue scheduler class. Workqueue sched_class inherits
> > fair sched_class and behaves exactly the same as sched_class except
> > that it has two callback functions which get called when a task is
> > put to sleep and wakes up and doesn't allow switching to different
> > scheduler class.
>
> So this looks odd to me.
>
> I agree completely with the callback functions, but what I don't agree
> with is that this is somehow workqueue-related. I bet that others
> could use this, and in fact, I suspect that it should not be tied to
> the scheduler class at all, but to the _thread_.
>
> Just as an example, I could imagine that we would do lock_kernel()
> releasing the kernel lock on scheduling (and re-taking it on wakeup)
> as a callback. Or async IO handling - both done independently of any
> "workqueue" logic.
>
> So tying this to the scheduler class seems a bit odd. But maybe I'm
> missing something?

We could do what Avi suggested: not use scheduler classes at all for
this (that brings in other limitations like lack of p->policy freedom),
but use the existing preempt-notifications callbacks.

They are per task - we would simply make preempt notifiers
unconditional, i.e. remove CONFIG_PREEMPT_NOTIFIERS and make it all
unconditional scheduler logic.

( Sidenote: we could even unify that logic with the perf event
sched-in/sched-out logic which is per task in a similar fashion and
which can have callback properties as well. That would mean a single,
well-defined callback facility for scheduler events. )

Ingo