cgroup: trivial fixes for Documentation/cgroups/cgroups.txt

While reading through Documentation/cgroups/cgroups.txt, I found a
number of minor wordos and typos. The patch below is a conservative
handling of some of these: it provides just a number of "obviously
correct" fixes to the English that improve the readability
of the document somewhat. Obviously some more significant
fixes could be made to the document, but some of those
may not be in the "obviously correct" category.

Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
Michael Kerrisk 2012-09-11 13:20:20 +02:00 committed by Tejun Heo
parent b9d6cfdeaf
commit 83b061fc09

View file

@ -63,9 +63,9 @@ an instance of the cgroup virtual filesystem associated with it.
At any one time there may be multiple active hierarchies of task At any one time there may be multiple active hierarchies of task
cgroups. Each hierarchy is a partition of all tasks in the system. cgroups. Each hierarchy is a partition of all tasks in the system.
User level code may create and destroy cgroups by name in an User-level code may create and destroy cgroups by name in an
instance of the cgroup virtual file system, specify and query to instance of the cgroup virtual file system, specify and query to
which cgroup a task is assigned, and list the task pids assigned to which cgroup a task is assigned, and list the task PIDs assigned to
a cgroup. Those creations and assignments only affect the hierarchy a cgroup. Those creations and assignments only affect the hierarchy
associated with that instance of the cgroup file system. associated with that instance of the cgroup file system.
@ -73,7 +73,7 @@ On their own, the only use for cgroups is for simple job
tracking. The intention is that other subsystems hook into the generic tracking. The intention is that other subsystems hook into the generic
cgroup support to provide new attributes for cgroups, such as cgroup support to provide new attributes for cgroups, such as
accounting/limiting the resources which processes in a cgroup can accounting/limiting the resources which processes in a cgroup can
access. For example, cpusets (see Documentation/cgroups/cpusets.txt) allows access. For example, cpusets (see Documentation/cgroups/cpusets.txt) allow
you to associate a set of CPUs and a set of memory nodes with the you to associate a set of CPUs and a set of memory nodes with the
tasks in each cgroup. tasks in each cgroup.
@ -81,11 +81,11 @@ tasks in each cgroup.
---------------------------- ----------------------------
There are multiple efforts to provide process aggregations in the There are multiple efforts to provide process aggregations in the
Linux kernel, mainly for resource tracking purposes. Such efforts Linux kernel, mainly for resource-tracking purposes. Such efforts
include cpusets, CKRM/ResGroups, UserBeanCounters, and virtual server include cpusets, CKRM/ResGroups, UserBeanCounters, and virtual server
namespaces. These all require the basic notion of a namespaces. These all require the basic notion of a
grouping/partitioning of processes, with newly forked processes ending grouping/partitioning of processes, with newly forked processes ending
in the same group (cgroup) as their parent process. up in the same group (cgroup) as their parent process.
The kernel cgroup patch provides the minimum essential kernel The kernel cgroup patch provides the minimum essential kernel
mechanisms required to efficiently implement such groups. It has mechanisms required to efficiently implement such groups. It has
@ -128,14 +128,14 @@ following lines:
/ \ / \
Professors (15%) students (5%) Professors (15%) students (5%)
Browsers like Firefox/Lynx go into the WWW network class, while (k)nfsd go Browsers like Firefox/Lynx go into the WWW network class, while (k)nfsd goes
into NFS network class. into the NFS network class.
At the same time Firefox/Lynx will share an appropriate CPU/Memory class At the same time Firefox/Lynx will share an appropriate CPU/Memory class
depending on who launched it (prof/student). depending on who launched it (prof/student).
With the ability to classify tasks differently for different resources With the ability to classify tasks differently for different resources
(by putting those resource subsystems in different hierarchies) then (by putting those resource subsystems in different hierarchies),
the admin can easily set up a script which receives exec notifications the admin can easily set up a script which receives exec notifications
and depending on who is launching the browser he can and depending on who is launching the browser he can
@ -146,19 +146,19 @@ a separate cgroup for every browser launched and associate it with
appropriate network and other resource class. This may lead to appropriate network and other resource class. This may lead to
proliferation of such cgroups. proliferation of such cgroups.
Also lets say that the administrator would like to give enhanced network Also let's say that the administrator would like to give enhanced network
access temporarily to a student's browser (since it is night and the user access temporarily to a student's browser (since it is night and the user
wants to do online gaming :)) OR give one of the students simulation wants to do online gaming :)) OR give one of the student's simulation
apps enhanced CPU power, apps enhanced CPU power.
With ability to write pids directly to resource classes, it's just a With ability to write PIDs directly to resource classes, it's just a
matter of : matter of:
# echo pid > /sys/fs/cgroup/network/<new_class>/tasks # echo pid > /sys/fs/cgroup/network/<new_class>/tasks
(after some time) (after some time)
# echo pid > /sys/fs/cgroup/network/<orig_class>/tasks # echo pid > /sys/fs/cgroup/network/<orig_class>/tasks
Without this ability, he would have to split the cgroup into Without this ability, the administrator would have to split the cgroup into
multiple separate ones and then associate the new cgroups with the multiple separate ones and then associate the new cgroups with the
new resource classes. new resource classes.
@ -185,20 +185,20 @@ Control Groups extends the kernel as follows:
field of each task_struct using the css_set, anchored at field of each task_struct using the css_set, anchored at
css_set->tasks. css_set->tasks.
- A cgroup hierarchy filesystem can be mounted for browsing and - A cgroup hierarchy filesystem can be mounted for browsing and
manipulation from user space. manipulation from user space.
- You can list all the tasks (by pid) attached to any cgroup. - You can list all the tasks (by PID) attached to any cgroup.
The implementation of cgroups requires a few, simple hooks The implementation of cgroups requires a few, simple hooks
into the rest of the kernel, none in performance critical paths: into the rest of the kernel, none in performance-critical paths:
- in init/main.c, to initialize the root cgroups and initial - in init/main.c, to initialize the root cgroups and initial
css_set at system boot. css_set at system boot.
- in fork and exit, to attach and detach a task from its css_set. - in fork and exit, to attach and detach a task from its css_set.
In addition a new file system, of type "cgroup" may be mounted, to In addition, a new file system of type "cgroup" may be mounted, to
enable browsing and modifying the cgroups presently known to the enable browsing and modifying the cgroups presently known to the
kernel. When mounting a cgroup hierarchy, you may specify a kernel. When mounting a cgroup hierarchy, you may specify a
comma-separated list of subsystems to mount as the filesystem mount comma-separated list of subsystems to mount as the filesystem mount
@ -231,13 +231,13 @@ as the path relative to the root of the cgroup file system.
Each cgroup is represented by a directory in the cgroup file system Each cgroup is represented by a directory in the cgroup file system
containing the following files describing that cgroup: containing the following files describing that cgroup:
- tasks: list of tasks (by pid) attached to that cgroup. This list - tasks: list of tasks (by PID) attached to that cgroup. This list
is not guaranteed to be sorted. Writing a thread id into this file is not guaranteed to be sorted. Writing a thread ID into this file
moves the thread into this cgroup. moves the thread into this cgroup.
- cgroup.procs: list of tgids in the cgroup. This list is not - cgroup.procs: list of thread group IDs in the cgroup. This list is
guaranteed to be sorted or free of duplicate tgids, and userspace not guaranteed to be sorted or free of duplicate TGIDs, and userspace
should sort/uniquify the list if this property is required. should sort/uniquify the list if this property is required.
Writing a thread group id into this file moves all threads in that Writing a thread group ID into this file moves all threads in that
group into this cgroup. group into this cgroup.
- notify_on_release flag: run the release agent on exit? - notify_on_release flag: run the release agent on exit?
- release_agent: the path to use for release notifications (this file - release_agent: the path to use for release notifications (this file
@ -262,7 +262,7 @@ cgroup file system directories.
When a task is moved from one cgroup to another, it gets a new When a task is moved from one cgroup to another, it gets a new
css_set pointer - if there's an already existing css_set with the css_set pointer - if there's an already existing css_set with the
desired collection of cgroups then that group is reused, else a new desired collection of cgroups then that group is reused, otherwise a new
css_set is allocated. The appropriate existing css_set is located by css_set is allocated. The appropriate existing css_set is located by
looking into a hash table. looking into a hash table.
@ -293,7 +293,7 @@ file system) of the abandoned cgroup. This enables automatic
removal of abandoned cgroups. The default value of removal of abandoned cgroups. The default value of
notify_on_release in the root cgroup at system boot is disabled notify_on_release in the root cgroup at system boot is disabled
(0). The default value of other cgroups at creation is the current (0). The default value of other cgroups at creation is the current
value of their parents notify_on_release setting. The default value of value of their parents' notify_on_release settings. The default value of
a cgroup hierarchy's release_agent path is empty. a cgroup hierarchy's release_agent path is empty.
1.5 What does clone_children do ? 1.5 What does clone_children do ?
@ -317,7 +317,7 @@ the "cpuset" cgroup subsystem, the steps are something like:
4) Create the new cgroup by doing mkdir's and write's (or echo's) in 4) Create the new cgroup by doing mkdir's and write's (or echo's) in
the /sys/fs/cgroup virtual file system. the /sys/fs/cgroup virtual file system.
5) Start a task that will be the "founding father" of the new job. 5) Start a task that will be the "founding father" of the new job.
6) Attach that task to the new cgroup by writing its pid to the 6) Attach that task to the new cgroup by writing its PID to the
/sys/fs/cgroup/cpuset/tasks file for that cgroup. /sys/fs/cgroup/cpuset/tasks file for that cgroup.
7) fork, exec or clone the job tasks from this founding father task. 7) fork, exec or clone the job tasks from this founding father task.
@ -345,7 +345,7 @@ and then start a subshell 'sh' in that cgroup:
2.1 Basic Usage 2.1 Basic Usage
--------------- ---------------
Creating, modifying, using the cgroups can be done through the cgroup Creating, modifying, using cgroups can be done through the cgroup
virtual filesystem. virtual filesystem.
To mount a cgroup hierarchy with all available subsystems, type: To mount a cgroup hierarchy with all available subsystems, type:
@ -442,7 +442,7 @@ You can attach the current shell task by echoing 0:
# echo 0 > tasks # echo 0 > tasks
You can use the cgroup.procs file instead of the tasks file to move all You can use the cgroup.procs file instead of the tasks file to move all
threads in a threadgroup at once. Echoing the pid of any task in a threads in a threadgroup at once. Echoing the PID of any task in a
threadgroup to cgroup.procs causes all tasks in that threadgroup to be threadgroup to cgroup.procs causes all tasks in that threadgroup to be
be attached to the cgroup. Writing 0 to cgroup.procs moves all tasks be attached to the cgroup. Writing 0 to cgroup.procs moves all tasks
in the writing task's threadgroup. in the writing task's threadgroup.
@ -480,7 +480,7 @@ in /proc/mounts and /proc/<pid>/cgroups.
There is mechanism which allows to get notifications about changing There is mechanism which allows to get notifications about changing
status of a cgroup. status of a cgroup.
To register new notification handler you need: To register a new notification handler you need to:
- create a file descriptor for event notification using eventfd(2); - create a file descriptor for event notification using eventfd(2);
- open a control file to be monitored (e.g. memory.usage_in_bytes); - open a control file to be monitored (e.g. memory.usage_in_bytes);
- write "<event_fd> <control_fd> <args>" to cgroup.event_control. - write "<event_fd> <control_fd> <args>" to cgroup.event_control.
@ -489,7 +489,7 @@ To register new notification handler you need:
eventfd will be woken up by control file implementation or when the eventfd will be woken up by control file implementation or when the
cgroup is removed. cgroup is removed.
To unregister notification handler just close eventfd. To unregister a notification handler just close eventfd.
NOTE: Support of notifications should be implemented for the control NOTE: Support of notifications should be implemented for the control
file. See documentation for the subsystem. file. See documentation for the subsystem.
@ -503,7 +503,7 @@ file. See documentation for the subsystem.
Each kernel subsystem that wants to hook into the generic cgroup Each kernel subsystem that wants to hook into the generic cgroup
system needs to create a cgroup_subsys object. This contains system needs to create a cgroup_subsys object. This contains
various methods, which are callbacks from the cgroup system, along various methods, which are callbacks from the cgroup system, along
with a subsystem id which will be assigned by the cgroup system. with a subsystem ID which will be assigned by the cgroup system.
Other fields in the cgroup_subsys object include: Other fields in the cgroup_subsys object include:
@ -517,7 +517,7 @@ Other fields in the cgroup_subsys object include:
at system boot. at system boot.
Each cgroup object created by the system has an array of pointers, Each cgroup object created by the system has an array of pointers,
indexed by subsystem id; this pointer is entirely managed by the indexed by subsystem ID; this pointer is entirely managed by the
subsystem; the generic cgroup code will never touch this pointer. subsystem; the generic cgroup code will never touch this pointer.
3.2 Synchronization 3.2 Synchronization
@ -640,7 +640,7 @@ void post_clone(struct cgroup *cgrp)
Called during cgroup_create() to do any parameter Called during cgroup_create() to do any parameter
initialization which might be required before a task could attach. For initialization which might be required before a task could attach. For
example in cpusets, no task may attach before 'cpus' and 'mems' are set example, in cpusets, no task may attach before 'cpus' and 'mems' are set
up. up.
void bind(struct cgroup *root) void bind(struct cgroup *root)
@ -680,5 +680,5 @@ A: bash's builtin 'echo' command does not check calls to write() against
Q: When I attach processes, only the first of the line gets really attached ! Q: When I attach processes, only the first of the line gets really attached !
A: We can only return one error code per call to write(). So you should also A: We can only return one error code per call to write(). So you should also
put only ONE pid. put only ONE PID.