From: Juri Lelli <juri.lelli@gmail.com>
To: peterz@infradead.org, tglx@linutronix.de
Cc: mingo@redhat.com, rostedt@goodmis.org, cfriesen@nortel.com,
oleg@redhat.com, fweisbec@gmail.com, darren@dvhart.com,
johan.eker@ericsson.com, p.faure@akatech.ch,
linux-kernel@vger.kernel.org, claudio@evidence.eu.com,
michael@amarulasolutions.com, fchecconi@gmail.com,
tommaso.cucinotta@sssup.it, juri.lelli@gmail.com,
nicola.manica@disi.unitn.it, luca.abeni@unitn.it,
dhaval.giani@gmail.com, hgu1972@gmail.com,
paulmck@linux.vnet.ibm.com, raistlin@linux.it,
insop.song@ericsson.com, liming.wang@windriver.com
Subject: [PATCH 16/16] sched: add sched_dl documentation.
Date: Fri, 6 Apr 2012 09:14:41 +0200 [thread overview]
Message-ID: <1333696481-3433-17-git-send-email-juri.lelli@gmail.com> (raw)
In-Reply-To: <1333696481-3433-1-git-send-email-juri.lelli@gmail.com>
From: Dario Faggioli <raistlin@linux.it>
Add in Documentation/scheduler/ some hints about the design
choices, the usage and the future possible developments of the
sched_dl scheduling class and of the SCHED_DEADLINE policy.
Signed-off-by: Dario Faggioli <raistlin@linux.it>
Signed-off-by: Juri Lelli <juri.lelli@gmail.com>
---
Documentation/scheduler/sched-deadline.txt | 147 ++++++++++++++++++++++++++++
1 files changed, 147 insertions(+), 0 deletions(-)
create mode 100644 Documentation/scheduler/sched-deadline.txt
diff --git a/Documentation/scheduler/sched-deadline.txt b/Documentation/scheduler/sched-deadline.txt
new file mode 100644
index 0000000..6c94194
--- /dev/null
+++ b/Documentation/scheduler/sched-deadline.txt
@@ -0,0 +1,147 @@
+ Deadline Task and Group Scheduling
+ ----------------------------------
+
+CONTENTS
+========
+
+0. WARNING
+1. Overview
+2. Task scheduling
+2. The Interface
+3. Bandwidth management
+ 3.1 System-wide settings
+ 2.2 Task interface
+ 2.4 Default behavior
+3. Future plans
+
+
+0. WARNING
+==========
+
+ Fiddling with these settings can result in an unpredictable or even unstable
+ system behavior. As for -rt (group) scheduling, it is assumed that root users
+ know what they're doing.
+
+
+1. Overview
+===========
+
+ The SCHED_DEADLINE policy contained inside the sched_dl scheduling class is
+ basically an implementation of the Earliest Deadline First (EDF) scheduling
+ algorithm, augmented with a mechanism (called Constant Bandwidth Server, CBS)
+ that makes it possible to isolate the behavior of tasks between each other.
+
+
+2. Task scheduling
+==================
+
+ The typical -deadline task will be made up of a computation phase (instance)
+ which is activated on a periodic or sporadic fashion. The expected (maximum)
+ duration of such computation is called the task's runtime; the time interval
+ by which each instance needs to be completed is called the task's relative
+ deadline. The task's absolute deadline is dynamically calculated as the
+ time instant a task (better, an instance) activates plus the relative
+ deadline.
+
+ The EDF algorithm selects the task with the smallest absolute deadline as
+ the one to be executed first, while the CBS ensures that each task runs for
+ at most its runtime every period, avoiding any interference between different
+ tasks (bandwidth isolation).
+ Thanks to this feature, also tasks that do not strictly comply with the
+ computational model described above can effectively use the new policy.
+ IOW, there are no limitations on what kind of task can exploit this new
+ scheduling discipline, even if it must be said that it is particularly
+ suited for periodic or sporadic tasks that need guarantees on their
+ timing behavior, e.g., multimedia, streaming, control applications, etc.
+
+
+3. Bandwidth management
+=======================
+
+ In order for the -deadline scheduling to be effective and useful, it is
+ important to have some method to keep the allocation of the available CPU
+ bandwidth to the tasks under control.
+ This is usually called "admission control" and if it is not performed at all,
+ no guarantee can be given on the actual scheduling of the -deadline tasks.
+
+ Since when RT-throttling has been introduced each task group has a bandwidth
+ associated, calculated as a certain amount of runtime over a period.
+ Moreover, to make it possible to manipulate such bandwidth, readable/writable
+ controls have been added to both procfs (for system wide settings) and cgroupfs
+ (for per-group settings).
+ Therefore, the same interface is being used for controlling the bandwidth
+ distrubution to -deadline tasks and task groups, i.e., new controls but with
+ similar names, equivalent meaning and with the same usage paradigm are added.
+
+ However, more discussion is needed in order to figure out how we want to manage
+ SCHED_DEADLINE bandwidth at the task group level. Therefore, SCHED_DEADLINE
+ uses (for now) a less sophisticated, but actually very sensible, mechanism to
+ ensure that a certain utilization cap is not overcome per each root_domain.
+
+ Another main difference between deadline bandwidth management and RT-throttling
+ is that -deadline tasks have bandwidth on their own (while -rt ones don't!),
+ and thus we don't need an higher level throttling mechanism to enforce the
+ desired bandwidth.
+
+3.1 System wide settings
+------------------------
+
+The system wide settings are configured under the /proc virtual file system:
+
+ The per-group controls that are added to the cgroupfs virtual file system are:
+ * /proc/sys/kernel/sched_dl_runtime_us,
+ * /proc/sys/kernel/sched_dl_period_us,
+
+ They accept (if written) and provides (if read) the new runtime and period,
+ respectively, for each CPU in each root_domain.
+
+ This means that, for a root_domain comprising M CPUs, -deadline tasks
+ can be created until the sum of their bandwidths stay below:
+
+ M * (sched_dl_runtime_us / sched_dl_period_us)
+
+ It is also possible to disable this bandwidth management logic, and
+ be thus free of oversubscribing the system up to any arbitrary level.
+ This is done by writing -1 in /proc/sys/kernel/sched_dl_runtime_us.
+
+
+2.2 Task interface
+------------------
+
+ Specifying a periodic/sporadic task that executes for a given amount of
+ runtime at each instance, and that is scheduled according to the urgency of
+ its own timing constraints needs, in general, a way of declaring:
+ - a (maximum/typical) instance execution time,
+ - a minimum interval between consecutive instances,
+ - a time constraint by which each instance must be completed.
+
+ Therefore:
+ * a new struct sched_param2, containing all the necessary fields is
+ provided;
+ * the new scheduling related syscalls that manipulate it, i.e.,
+ sched_setscheduler2(), sched_setparam2() and sched_getparam2()
+ are implemented.
+
+
+2.4 Default behavior
+---------------------
+
+The default values for SCHED_DEADLINE bandwidth is to have dl_runtime and
+dl_period equal to 500000 and 1000000, respectively. This means -deadline
+tasks can use at most 5%, multiplied by the number of CPUs that compose the
+root_domain, for each root_domain.
+
+When a -deadline task fork a child, its dl_runtime is set to 0, which means
+someone must call sched_setscheduler2() on it, or it won't even start.
+
+
+3. Future plans
+===============
+
+Still Missing:
+
+ - refinements to deadline inheritance, especially regarding the possibility
+ of retaining bandwidth isolation among non-interacting tasks. This is
+ being studied from both theoretical and practical point of views, and
+ hopefully we can have some demonstrative code soon.
+
--
1.7.5.4
next prev parent reply other threads:[~2012-04-06 7:15 UTC|newest]
Thread overview: 129+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-06 7:14 [RFC][PATCH 00/16] sched: SCHED_DEADLINE v4 Juri Lelli
2012-04-06 7:14 ` [PATCH 01/16] sched: add sched_class->task_dead Juri Lelli
2012-04-08 17:49 ` Oleg Nesterov
2012-04-08 18:09 ` Juri Lelli
2012-04-06 7:14 ` [PATCH 02/16] sched: add extended scheduling interface Juri Lelli
2012-04-06 7:14 ` [PATCH 03/16] sched: SCHED_DEADLINE data structures Juri Lelli
2012-04-23 9:08 ` Peter Zijlstra
2012-04-23 9:47 ` Juri Lelli
2012-04-23 9:49 ` Peter Zijlstra
2012-04-23 9:55 ` Juri Lelli
2012-04-23 10:12 ` Peter Zijlstra
2012-04-23 9:13 ` Peter Zijlstra
2012-04-23 9:28 ` Juri Lelli
2012-04-23 9:30 ` Peter Zijlstra
2012-04-23 9:36 ` Juri Lelli
2012-04-23 9:39 ` Peter Zijlstra
2012-04-23 9:34 ` Peter Zijlstra
2012-04-23 10:16 ` Juri Lelli
2012-04-23 10:28 ` Peter Zijlstra
2012-04-23 10:33 ` Juri Lelli
2012-04-06 7:14 ` [PATCH 04/16] sched: SCHED_DEADLINE SMP-related " Juri Lelli
2012-04-06 7:14 ` [PATCH 05/16] sched: SCHED_DEADLINE policy implementation Juri Lelli
2012-04-11 3:06 ` Steven Rostedt
2012-04-11 6:54 ` Juri Lelli
2012-04-11 13:41 ` Steven Rostedt
2012-04-11 13:55 ` Juri Lelli
2012-04-23 10:15 ` Peter Zijlstra
2012-04-23 10:18 ` Juri Lelli
2012-04-23 10:31 ` Peter Zijlstra
2012-04-23 10:37 ` Juri Lelli
2012-04-23 21:25 ` Tommaso Cucinotta
2012-04-23 21:45 ` Peter Zijlstra
2012-04-23 23:25 ` Tommaso Cucinotta
2012-04-24 6:29 ` Dario Faggioli
2012-04-24 6:52 ` Juri Lelli
2012-04-23 11:32 ` Peter Zijlstra
2012-04-23 12:13 ` Juri Lelli
2012-04-23 12:22 ` Peter Zijlstra
2012-04-23 13:37 ` Juri Lelli
2012-04-23 14:01 ` Peter Zijlstra
2012-04-23 11:34 ` Peter Zijlstra
2012-04-23 11:57 ` Juri Lelli
2012-04-23 11:55 ` Peter Zijlstra
2012-04-23 14:43 ` Juri Lelli
2012-04-23 15:11 ` Peter Zijlstra
2012-04-23 21:55 ` Tommaso Cucinotta
2012-04-23 21:58 ` Peter Zijlstra
2012-04-23 23:21 ` Tommaso Cucinotta
2012-04-24 9:50 ` Peter Zijlstra
2012-04-24 1:03 ` Steven Rostedt
2012-04-23 14:11 ` Peter Zijlstra
2012-04-23 14:25 ` Peter Zijlstra
2012-04-23 15:34 ` Juri Lelli
2012-04-23 14:35 ` Peter Zijlstra
2012-04-23 15:39 ` Juri Lelli
2012-04-23 15:43 ` Peter Zijlstra
2012-04-23 16:41 ` Juri Lelli
[not found] ` <4F95D41F.5060700@sssup.it>
2012-04-24 7:21 ` Juri Lelli
2012-04-24 9:00 ` Peter Zijlstra
2012-05-15 10:10 ` Juri Lelli
2012-04-23 15:15 ` Peter Zijlstra
2012-04-23 15:37 ` Juri Lelli
2012-04-06 7:14 ` [PATCH 06/16] sched: SCHED_DEADLINE push and pull logic Juri Lelli
2012-04-06 13:39 ` Hillf Danton
2012-04-06 17:31 ` Juri Lelli
2012-04-07 2:32 ` Hillf Danton
2012-04-07 7:46 ` Dario Faggioli
2012-04-08 20:20 ` Juri Lelli
2012-04-09 12:28 ` Hillf Danton
2012-04-10 8:11 ` Juri Lelli
2012-04-11 15:57 ` Steven Rostedt
2012-04-11 16:00 ` Steven Rostedt
2012-04-11 16:09 ` Juri Lelli
2012-04-11 14:10 ` Steven Rostedt
2012-04-12 12:28 ` Hillf Danton
2012-04-12 12:51 ` Steven Rostedt
2012-04-12 12:56 ` Hillf Danton
2012-04-12 13:35 ` Steven Rostedt
2012-04-12 13:41 ` Hillf Danton
2012-04-11 16:07 ` Steven Rostedt
2012-04-11 16:11 ` Juri Lelli
2012-04-11 16:14 ` Steven Rostedt
2012-04-19 13:44 ` Juri Lelli
2012-04-11 16:21 ` Steven Rostedt
2012-04-11 16:24 ` Juri Lelli
2012-04-11 16:33 ` Steven Rostedt
2012-04-24 13:15 ` Peter Zijlstra
2012-04-24 18:50 ` Steven Rostedt
2012-04-24 18:53 ` Peter Zijlstra
2012-04-24 19:01 ` Steven Rostedt
2012-04-11 17:25 ` Steven Rostedt
2012-04-11 17:48 ` Juri Lelli
2012-04-06 7:14 ` [PATCH 07/16] sched: SCHED_DEADLINE avg_update accounting Juri Lelli
2012-04-06 7:14 ` [PATCH 08/16] sched: add period support for -deadline tasks Juri Lelli
2012-04-11 20:32 ` Steven Rostedt
2012-04-11 21:56 ` Juri Lelli
2012-04-11 22:13 ` Tommaso Cucinotta
2012-04-12 0:19 ` Steven Rostedt
2012-04-12 6:39 ` Luca Abeni
2012-04-06 7:14 ` [PATCH 09/16] sched: add schedstats " Juri Lelli
2012-04-06 7:14 ` [PATCH 10/16] sched: add resource limits " Juri Lelli
2012-04-24 15:07 ` Peter Zijlstra
2012-04-24 15:22 ` Juri Lelli
2012-04-24 16:27 ` Peter Zijlstra
2012-04-24 17:14 ` Juri Lelli
2012-04-06 7:14 ` [PATCH 11/16] sched: add latency tracing " Juri Lelli
2012-04-11 21:03 ` Steven Rostedt
2012-04-12 7:16 ` Juri Lelli
2012-04-16 15:51 ` Daniel Vacek
2012-04-16 19:56 ` Steven Rostedt
2012-04-16 21:31 ` Daniel Vacek
2012-04-06 7:14 ` [PATCH 12/16] rtmutex: turn the plist into an rb-tree Juri Lelli
2012-04-11 21:11 ` Steven Rostedt
2012-04-22 14:28 ` Juri Lelli
2012-04-23 8:33 ` Peter Zijlstra
2012-04-23 11:37 ` Steven Rostedt
2012-04-06 7:14 ` [PATCH 13/16] sched: drafted deadline inheritance logic Juri Lelli
2012-04-12 2:42 ` Steven Rostedt
2012-04-22 14:04 ` Juri Lelli
2012-04-23 8:39 ` Peter Zijlstra
2012-04-06 7:14 ` [PATCH 14/16] sched: add bandwidth management for sched_dl Juri Lelli
2012-04-06 7:14 ` [PATCH 15/16] sched: speed up -dl pushes with a push-heap Juri Lelli
2012-04-06 7:14 ` Juri Lelli [this message]
2012-04-06 8:25 ` [RFC][PATCH 00/16] sched: SCHED_DEADLINE v4 Luca Abeni
2012-04-07 9:25 ` Tadeus Prastowo
2012-04-06 11:07 ` Dario Faggioli
2012-04-11 14:17 ` Steven Rostedt
2012-04-11 14:28 ` Juri Lelli
-- strict thread matches above, loose matches on Subject: below --
2012-10-24 21:53 [RFC][PATCH 00/16] sched: SCHED_DEADLINE v6 Juri Lelli
2012-10-24 21:53 ` [PATCH 16/16] sched: add sched_dl documentation Juri Lelli
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1333696481-3433-17-git-send-email-juri.lelli@gmail.com \
--to=juri.lelli@gmail.com \
--cc=cfriesen@nortel.com \
--cc=claudio@evidence.eu.com \
--cc=darren@dvhart.com \
--cc=dhaval.giani@gmail.com \
--cc=fchecconi@gmail.com \
--cc=fweisbec@gmail.com \
--cc=hgu1972@gmail.com \
--cc=insop.song@ericsson.com \
--cc=johan.eker@ericsson.com \
--cc=liming.wang@windriver.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luca.abeni@unitn.it \
--cc=michael@amarulasolutions.com \
--cc=mingo@redhat.com \
--cc=nicola.manica@disi.unitn.it \
--cc=oleg@redhat.com \
--cc=p.faure@akatech.ch \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--cc=raistlin@linux.it \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
--cc=tommaso.cucinotta@sssup.it \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).