aboutsummaryrefslogtreecommitdiffstats
path: root/man7/sched.7
diff options
context:
space:
mode:
authorMichael Kerrisk <mtk.manpages@gmail.com>2016-11-24 21:20:03 +0100
committerMichael Kerrisk <mtk.manpages@gmail.com>2016-11-29 21:50:15 +0100
commitee1f3c18a2ce4cee4abfbff7c20e6a102ade81c1 (patch)
tree204fc8d83c03dfe3b70454a84fe7240c78f3c587 /man7/sched.7
parent576b74eec2e9d0243e3169b95efef8ce6425083d (diff)
downloadman-pages-ee1f3c18a2ce4cee4abfbff7c20e6a102ade81c1.tar.gz
sched.7: Rework discussion of autogroups
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
Diffstat (limited to 'man7/sched.7')
-rw-r--r--man7/sched.771
1 files changed, 45 insertions, 26 deletions
diff --git a/man7/sched.7 b/man7/sched.7
index f372638baf..4787d752f7 100644
--- a/man7/sched.7
+++ b/man7/sched.7
@@ -683,7 +683,7 @@ or
.\" commit 5091faa449ee0b7d73bc296a93bca9540fc51d0a
Since Linux 2.6.38,
the kernel provides a feature known as autogrouping to improve interactive
-desktop performance in the face of multiprocess CPU-intensive
+desktop performance in the face of multiprocess, CPU-intensive
workloads such as building the Linux kernel with large numbers of
parallel build processes (i.e., the
.BR make (1)
@@ -700,25 +700,39 @@ The default value in this file is 1, unless the kernel was booted with the
.IR noautogroup
parameter.
-When autogrouping is enabled, processes are automatically placed
-into "task groups" for the purposes of scheduling.
-In the current implementation,
-a new task group is created when a new session is created via
-.BR setsid (2),
-as happens, for example, when a new terminal window is created.
-A task group is automatically destroyed when the last process
+A new autogroup is created created when a new session is created via
+.BR setsid (2);
+this happens, for example, when a new terminal window is started.
+A new process created by
+.BR fork (2)
+inherits its parent's autogroup membership.
+Thus, all of the processes in a session are members of the same autogroup.
+An autogroup is automatically destroyed when the last process
in the group terminates.
-.\" FIXME The following is a little vague. Does it need to be
-.\" made more precise?
-The CFS scheduler employs an algorithm that distributes the CPU
-across task groups.
-As a result of this algorithm,
-the processes in task groups that contain multiple CPU-intensive
-processes are in effect disfavored by the scheduler.
-
-A process's autogroup (task group) membership can be viewed via
-the file
+When autogrouping is enabled, all of the members of an autogroup
+are placed in the same kernel scheduler "task group".
+The CFS scheduler employs an algorithm that equalizes the
+distribution of CPU cycles across task groups.
+The benefits of this for interactive desktop performance
+can be described via the following example.
+
+Suppose that there are two autogroups competing for the same CPU.
+The first group contains ten CPU-bound processes from
+a kernel build started with
+.IR "make\ \-j10" .
+The other contains a single CPU-bound process: a video player.
+The effect of autogrouping is that the two groups will
+each receive half of the CPU cycles.
+That is, the video player will receive 50% of the CPU cycles,
+rather just 9% of the cycles,
+which would likely lead to degraded video playback.
+Or to put things another way:
+an autogroup that contains a large number of CPU-bound processes
+does not end up overwhelming the CPU at the expense of the other
+jobs on the system.
+
+A process's autogroup (task group) membership can be viewed via the file
.IR /proc/[pid]/autogroup :
.nf
@@ -729,13 +743,15 @@ $ \fBcat /proc/1/autogroup\fP
.fi
This file can also be used to modify the CPU bandwidth allocated
-to a task group.
+to an autogroup.
This is done by writing a number in the "nice" range to the file
-to set the task group's nice value.
+to set the autogroup's nice value.
+The allowed range is from +19 (low priority) to \-20 (high priority),
+and the setting has the same effect as modifying the nice level via
+.BR getpriority (2).
(For a discussion of the nice value, see
.BR getpriority (2).)
-The allowed range is from +19 (low priority) to \-20 (high priority).
-.\" FIXME
+.\" FIXME .
.\" Because of a bug introduced in Linux 4.7
.\" (commit 2159197d66770ec01f75c93fb11dc66df81fd45b made changes
.\" that exposed the fact that autogroup didn't call scale_load()),
@@ -747,14 +763,17 @@ The allowed range is from +19 (low priority) to \-20 (high priority).
.\" A patch was posted on 23 Nov 2016
.\" ("sched/autogroup: Fix 64bit kernel nice adjustment";
.\" check later to see in which kernel version it lands.
+.\"
+.\" FIXME How do the nice value of a process and the nice value of
+.\" an autogroup interact? Which has priority?
-.\" FIXME Is the following correct? Does the statement need to
-.\" be more precise? (E.g., in precisely which circumstances does
-.\" the use of cgroups override autogroup?)
The use of the
.BR cgroups (7)
CPU controller overrides the effect of autogrouping.
-.\" FIXME What needs to be said about autogroup and real-time tasks?
+
+The autogroup feature does not group processes
+that are scheduled under a real-time and deadline policies.
+Those processes are scheduled according to the rules described earlier.
.SH NOTES
The
.BR cgroups (7)