From: Lord Glauber Costa of Sealand <glommer@parallels.com>
To: <linux-kernel@vger.kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Tejun Heo <tj@kernel.org>,
ccross@google.com, Peter Zijlstra <a.p.zijlstra@chello.nl>,
Paul Turner <pjt@google.com>,
Glauber Costa <glommer@parallels.com>
Subject: [PATCH v6 07/12] sched: document the cpu cgroup.
Date: Thu, 24 Jan 2013 19:17:37 +0400 [thread overview]
Message-ID: <1359040662-8055-8-git-send-email-glommer@parallels.com> (raw)
In-Reply-To: <1359040662-8055-1-git-send-email-glommer@parallels.com>
From: Glauber Costa <glommer@parallels.com>
The CPU cgroup is so far, undocumented. Although data exists in the
Documentation directory about its functioning, it is usually spread,
and/or presented in the context of something else. This file
consolidates all cgroup-related information about it.
Signed-off-by: Glauber Costa <glommer@parallels.com>
---
Documentation/cgroups/cpu.txt | 82 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 82 insertions(+)
create mode 100644 Documentation/cgroups/cpu.txt
diff --git a/Documentation/cgroups/cpu.txt b/Documentation/cgroups/cpu.txt
new file mode 100644
index 0000000..e0ea075
--- /dev/null
+++ b/Documentation/cgroups/cpu.txt
@@ -0,0 +1,82 @@
+CPU Controller
+--------------
+
+The CPU controller is responsible for grouping tasks together that will be
+viewed by the scheduler as a single unit. The CFS scheduler will first divide
+CPU time equally between all entities in the same level, and then proceed by
+doing the same in the next level. Basic use cases for that are described in the
+main cgroup documentation file, cgroups.txt.
+
+Users of this functionality should be aware that deep hierarchies will of
+course impose scheduler overhead, since the scheduler will have to take extra
+steps and look up additional data structures to make its final decision.
+
+Through the CPU controller, the scheduler is also able to cap the CPU
+utilization of a particular group. This is particularly useful in environments
+in which CPU is paid for by the hour, and one values predictability over
+performance.
+
+CPU Accounting
+--------------
+
+The CPU cgroup will also provide additional files under the prefix "cpuacct".
+Those files provide accounting statistics and were previously provided by the
+separate cpuacct controller. Although the cpuacct controller will still be kept
+around for compatibility reasons, its usage is discouraged. If both the CPU and
+cpuacct controllers are present in the system, distributors are encouraged to
+always mount them together.
+
+Files
+-----
+
+The CPU controller exposes the following files to the user:
+
+ - cpu.shares: The weight of each group living in the same hierarchy, that
+ translates into the amount of CPU it is expected to get. Upon cgroup creation,
+ each group gets assigned a default of 1024. The percentage of CPU assigned to
+ the cgroup is the value of shares divided by the sum of all shares in all
+ cgroups in the same level.
+
+ - cpu.cfs_period_us: The duration in microseconds of each scheduler period, for
+ bandwidth decisions. This defaults to 100000us or 100ms. Larger periods will
+ improve throughput at the expense of latency, since the scheduler will be able
+ to sustain a cpu-bound workload for longer. The opposite of true for smaller
+ periods. Note that this only affects non-RT tasks that are scheduled by the
+ CFS scheduler.
+
+- cpu.cfs_quota_us: The maximum time in microseconds during each cfs_period_us
+ in for the current group will be allowed to run. For instance, if it is set to
+ half of cpu_period_us, the cgroup will only be able to peak run for 50 % of
+ the time. One should note that this represents aggregate time over all CPUs
+ in the system. Therefore, in order to allow full usage of two CPUs, for
+ instance, one should set this value to twice the value of cfs_period_us.
+
+- cpu.stat: statistics about the bandwidth controls. No data will be presented
+ if cpu.cfs_quota_us is not set. The file presents three
+ numbers:
+ nr_periods: how many full periods have been elapsed.
+ nr_throttled: number of times we exausted the full allowed bandwidth
+ throttled_time: total time the tasks were not run due to being overquota
+
+ - cpu.rt_runtime_us and cpu.rt_period_us: Those files are the RT-tasks
+ analogous to the CFS files cfs_quota_us and cfs_period_us. One important
+ difference, though, is that while the cfs quotas are upper bounds that
+ won't necessarily be met, the rt runtimes form a stricter guarantee.
+ Therefore, no overlap is allowed. Implications of that are that given a
+ hierarchy with multiple children, the sum of all rt_runtime_us may not exceed
+ the runtime of the parent. Also, a rt_runtime_us of 0, means that no rt tasks
+ can ever be run in this cgroup. For more information about rt tasks runtime
+ assignments, see scheduler/sched-rt-group.txt
+
+ - cpuacct.usage: The aggregate CPU time, in nanoseconds, consumed by all tasks
+ in this group.
+
+ - cpuacct.usage_percpu: The CPU time, in nanoseconds, consumed by all tasks in
+ this group, separated by CPU. The format is an space-separated array of time
+ values, one for each present CPU.
+
+ - cpuacct.stat: aggregate user and system time consumed by tasks in this group.
+ The format is
+ user: x
+ system: y
+
--
1.8.1
next prev parent reply other threads:[~2013-01-24 15:18 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-24 15:17 [PATCH v6 00/12] per-cgroup cpu-stat Lord Glauber Costa of Sealand
2013-01-24 15:17 ` [PATCH v6 01/12] don't call cpuacct_charge in stop_task.c Lord Glauber Costa of Sealand
2013-01-24 15:17 ` [PATCH v6 02/12] cgroup: implement CFTYPE_NO_PREFIX Lord Glauber Costa of Sealand
2013-01-24 15:17 ` [PATCH v6 03/12] cgroup, sched: let cpu serve the same files as cpuacct Lord Glauber Costa of Sealand
2013-01-24 15:17 ` [PATCH v6 04/12] cgroup, sched: deprecate cpuacct Lord Glauber Costa of Sealand
2013-01-24 15:17 ` [PATCH v6 05/12] sched: adjust exec_clock to use it as cpu usage metric Lord Glauber Costa of Sealand
2013-01-24 15:17 ` [PATCH v6 06/12] cpuacct: don't actually do anything Lord Glauber Costa of Sealand
2013-01-24 15:17 ` Lord Glauber Costa of Sealand [this message]
2013-01-24 15:17 ` [PATCH v6 08/12] sched: account guest time per-cgroup as well Lord Glauber Costa of Sealand
2013-01-24 15:17 ` [PATCH v6 09/12] sched: Push put_prev_task() into pick_next_task() Lord Glauber Costa of Sealand
2013-01-24 15:17 ` [PATCH v6 10/12] sched: record per-cgroup number of context switches Lord Glauber Costa of Sealand
2013-01-24 15:17 ` [PATCH v6 11/12] sched: change nr_context_switches calculation Lord Glauber Costa of Sealand
2013-01-24 15:17 ` [PATCH v6 12/12] sched: introduce cgroup file stat_percpu Lord Glauber Costa of Sealand
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=1359040662-8055-8-git-send-email-glommer@parallels.com \
--to=glommer@parallels.com \
--cc=a.p.zijlstra@chello.nl \
--cc=akpm@linux-foundation.org \
--cc=ccross@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=pjt@google.com \
--cc=tj@kernel.org \
/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
all inboxes | Powered by JetHome®