Re: [Announce] [patch] Modular Scheduler Core and Completely Fair Scheduler [CFS]

Davide Libenzi
2007-04-18T23:30:18Z

On Wed, 18 Apr 2007, Ingo Molnar wrote:

> That's one reason why i dont think it's necessarily a good idea to
> group-schedule threads, we dont really want to do a per thread group
> percpu_alloc().

I still do not have clear how much overhead this will bring into the
table, but I think (like Linus was pointing out) the hierarchy should look
like:

Top (VCPU maybe?)
User
Process
Thread

The "run_queue" concept (and data) that now is bound to a CPU, need to be
replicated in:

ROOT <- VCPUs add themselves here
VCPU <- USERs add themselves here
USER <- PROCs add themselves here
PROC <- THREADs add themselves here
THREAD (ultimate fine grained scheduling unit)

So ROOT, VCPU, USER and PROC will have their own "run_queue". Picking up a
new task would mean:

VCPU = ROOT->lookup();
USER = VCPU->lookup();
PROC = USER->lookup();
THREAD = PROC->lookup();

Run-time statistics should propagate back the other way around.

> In fact for threads the _reverse_ problem exists, threaded apps tend to
> _strive_ for more performance - hence their desperation of using the
> threaded programming model to begin with ;) (just think of media
> playback apps which are typically multithreaded)

The same user nicing two different multi-threaded processes would expect a
predictable CPU distribution too. Doing that efficently (the old per-cpu
run-queue is pretty nice from many POVs) is the real challenge.

- Davide