Features Download
From: Fabio Checconi <fchecconi <at> gmail.com>
Subject: [PATCH 0/3] sched: use EDF to throttle RT task groups v2
Newsgroups: gmane.linux.kernel
Date: Tuesday 23rd February 2010 18:56:32 UTC (over 6 years ago)
This patchset introduces a group level EDF scheduler extending the
throttling mechanism, in order to make it support generic period
assignments.  With this patch, the runtime and period parameters
can be used to specify arbitrary CPU reservations for RT tasks.

>From the previous post [1] I've integrated Peter's suggestions, using
a multi-level hierarchy to do admission control, but a one-level only
equivalent hierarchy for scheduling, and I've not removed the bandwidth
migration mechanism, trying to adapt it to EDF scheduling.  In this
version tasks are still inserted into priority arrays and only groups
are kept in a per-rq edf tree.

The main design issues involved:

  - Since it is not easy to mix tasks and groups on the same scheduler
    queue (tasks have no deadlines), the bandwidth reserved to the tasks
    in a group is controlled with two additional cgroup attributes:
    rt_task_runtime_us and rt_task_period_us.  These attributes control,
    within a cgroup, how much bandwidth is reserved to the tasks it
    contains.  The old attributes, rt_runtime_us and rt_period_us, are
    still there, and control the bandwidth assigned to the cgroup.  They
    are used only for admission control.

  - Shared resources are still handled using boosting.  When a group
    contains a task inside a critical section it is scheduled according
    the highest priority among the ones of the tasks it contains.
    In this way, the same group has two modes: when it is not boosted
    it is scheduled according to its deadline; when it is boosted, it
    is scheduled according its priority.  Boosted groups are always
    favored over non-boosted ones.

  - Given that the various rt_rq's belonging to the same task group
    are activated independently, there is the need of a timer per
    each rt_rq.

  - While balancing the bandwidth assigned to a cgroup on various cpus
    we have to make sure that utilization for the rt_rq's on each cpu
    does not exceed the global utilization limit for RT tasks.  

Please note that these patches target a completely different usage
scenario from Dario's work on SCHED_DEADLINE.  SCHED_DEADLINE is about
deadline scheduling for tasks, introducing a new user-visible scheduling
policy; this patchset is about using throttling to provide real-time
guarantees to SCHED_RR and SCHED_FIFO tasks on a per-group basis.  The
two patchsets do not overlap in functionality, both aim at improving
the predictability of the system; we'll want to work on sharing parts of
the code, but now, after discussing with Dario, we think it's too early
to do that.

The patchset is against tip, it should compile (and hopefully work) on
all the combinations of CONFIG_{SMP/RT_GROUP_SCHED}, but the work was
focused on the SMP & RT_GROUP_SCHED case, I've  only compile- or boot-
tested the other configs.

As usual, feedback welcome.

[1] http://lkml.org/lkml/2009/6/15/510

Fabio Checconi (3):
  sched: use EDF to schedule groups
  sched: enforce per-cpu utilization limits on runtime balancing
  sched: make runtime balancing code more EDF-friendly

 include/linux/sched.h |    8 +-
 kernel/sched.c        |  467 +++++++++++---------
 kernel/sched_rt.c     | 1159
 3 files changed, 1161 insertions(+), 473 deletions(-)
CD: 3ms