Re: RFC for a new Scheduling policy/class in the Linux-kernel

Peter Zijlstra
2009-07-16T09:12:09Z

On Thu, 2009-07-16 at 10:58 +0200, Peter Zijlstra wrote:
> On Wed, 2009-07-15 at 19:16 -0400, Ted Baker wrote:
> > > > 1) The priority of a group seemed to be defined by the priority of
> > > > the highest-priority thread in the group's run-queue, which means
> > > > it varies dynamically according to which threads in the group are
> > > > contending.
> > > >
> > >
> > > This is true, but it also ensures that the time allocated to the group
> > > is also consumed by group if it wants to.
> >
> > I don't see how schedulability analysis can be done with this model,
> > since a single budget is being expended at varying priorities/deadlines.
> >
> > > > 4) On an SMP, more than one thread could be running against
> > > > the same budget at the same time, resulting in budget over-charges.
> > > >
> > >
> > > The rt group scheduler does split the budget per cpu. On expiring the
> > > budget, it tries to borrow from other CPUs if possible.
> >
> > First, how is the splitting of the budget between CPU's controlled
> > by the application?
> >
> > Second, I don't see how schedulabiliyt analysis could be done if
> > CPU's can "borrow" budget from other CPUs, unless there is some
> > mechanism in place to "pay it back". How do you do the analysis?
>
> Right so control-groups (cgroups for short) are a form of
> virtualization. Each controller is specific to a resource. We have
> memory controllers, namespace controllers and also a scheduler
> controller.
>
> If you would apply all controllers to the same task groups you get a
> result like chroot on steroids, or jails etc. But you can also use them
> individually to control resources in creative ways.

To add to this, it is by no means a way of introducing deadline
scheduling to tasks, for that you're quite right in that we should
extend sched_setscheduler() and struct sched_param.

Somewhere before RTLWS we'll add:

struct sched_param2;

sys_sched_setscheduler2(pid_t pid, int policy, struct sched_param2 *param);
sys_sched_setparam2(pid_t pid, struct sched_param2 *param);
sys_sched_getparam2(pid_t pid, struct sched_param2 *param);

SCHED_SOFT_DEADLINE (bounded tardiness)
SCHED_DEADLINE (no tardiness)

and hopefully enough hooks to make people happy :-)

The intention is to add these to -rt only for now, so that we can still
poke at the interfaces and only move then to mainline once the dust
settles down.