vcs.4: tfix
[man-pages.git] / man7 / cgroups.7
blob4e6833965aba95ebdb42d925fbd7c66fd8e05646
1 .\" Copyright (C) 2015 Serge Hallyn <serge@hallyn.com>
2 .\" and Copyright (C) 2016, 2017 Michael Kerrisk <mtk.manpages@gmail.com>
3 .\"
4 .\" %%%LICENSE_START(VERBATIM)
5 .\" Permission is granted to make and distribute verbatim copies of this
6 .\" manual provided the copyright notice and this permission notice are
7 .\" preserved on all copies.
8 .\"
9 .\" Permission is granted to copy and distribute modified versions of this
10 .\" manual under the conditions for verbatim copying, provided that the
11 .\" entire resulting derived work is distributed under the terms of a
12 .\" permission notice identical to this one.
13 .\"
14 .\" Since the Linux kernel and libraries are constantly changing, this
15 .\" manual page may be incorrect or out-of-date.  The author(s) assume no
16 .\" responsibility for errors or omissions, or for damages resulting from
17 .\" the use of the information contained herein.  The author(s) may not
18 .\" have taken the same level of care in the production of this manual,
19 .\" which is licensed free of charge, as they might when working
20 .\" professionally.
21 .\"
22 .\" Formatted or processed versions of this manual, if unaccompanied by
23 .\" the source, must acknowledge the copyright and authors of this work.
24 .\" %%%LICENSE_END
25 .\"
26 .TH CGROUPS 7 2019-03-06 "Linux" "Linux Programmer's Manual"
27 .SH NAME
28 cgroups \- Linux control groups
29 .SH DESCRIPTION
30 Control groups, usually referred to as cgroups,
31 are a Linux kernel feature which allow processes to
32 be organized into hierarchical groups whose usage of
33 various types of resources can then be limited and monitored.
34 The kernel's cgroup interface is provided through
35 a pseudo-filesystem called cgroupfs.
36 Grouping is implemented in the core cgroup kernel code,
37 while resource tracking and limits are implemented in
38 a set of per-resource-type subsystems (memory, CPU, and so on).
39 .\"
40 .SS Terminology
42 .I cgroup
43 is a collection of processes that are bound to a set of
44 limits or parameters defined via the cgroup filesystem.
45 .PP
47 .I subsystem
48 is a kernel component that modifies the behavior of
49 the processes in a cgroup.
50 Various subsystems have been implemented, making it possible to do things
51 such as limiting the amount of CPU time and memory available to a cgroup,
52 accounting for the CPU time used by a cgroup,
53 and freezing and resuming execution of the processes in a cgroup.
54 Subsystems are sometimes also known as
55 .IR "resource controllers"
56 (or simply, controllers).
57 .PP
58 The cgroups for a controller are arranged in a
59 .IR hierarchy .
60 This hierarchy is defined by creating, removing, and
61 renaming subdirectories within the cgroup filesystem.
62 At each level of the hierarchy, attributes (e.g., limits) can be defined.
63 The limits, control, and accounting provided by cgroups generally have
64 effect throughout the subhierarchy underneath the cgroup where the
65 attributes are defined.
66 Thus, for example, the limits placed on
67 a cgroup at a higher level in the hierarchy cannot be exceeded
68 by descendant cgroups.
69 .\"
70 .SS Cgroups version 1 and version 2
71 The initial release of the cgroups implementation was in Linux 2.6.24.
72 Over time, various cgroup controllers have been added
73 to allow the management of various types of resources.
74 However, the development of these controllers was largely uncoordinated,
75 with the result that many inconsistencies arose between controllers
76 and management of the cgroup hierarchies became rather complex.
77 (A longer description of these problems can be found in
78 the kernel source file
79 .IR Documentation/cgroup\-v2.txt .)
80 .PP
81 Because of the problems with the initial cgroups implementation
82 (cgroups version 1),
83 starting in Linux 3.10, work began on a new,
84 orthogonal implementation to remedy these problems.
85 Initially marked experimental, and hidden behind the
86 .I "\-o\ __DEVEL__sane_behavior"
87 mount option, the new version (cgroups version 2)
88 was eventually made official with the release of Linux 4.5.
89 Differences between the two versions are described in the text below.
90 .PP
91 Although cgroups v2 is intended as a replacement for cgroups v1,
92 the older system continues to exist
93 (and for compatibility reasons is unlikely to be removed).
94 Currently, cgroups v2 implements only a subset of the controllers
95 available in cgroups v1.
96 The two systems are implemented so that both v1 controllers and
97 v2 controllers can be mounted on the same system.
98 Thus, for example, it is possible to use those controllers
99 that are supported under version 2,
100 while also using version 1 controllers
101 where version 2 does not yet support those controllers.
102 The only restriction here is that a controller can't be simultaneously
103 employed in both a cgroups v1 hierarchy and in the cgroups v2 hierarchy.
105 .SH CGROUPS VERSION 1
106 Under cgroups v1, each controller may be mounted against a separate
107 cgroup filesystem that provides its own hierarchical organization of the
108 processes on the system.
109 It is also possible to comount multiple (or even all) cgroups v1 controllers
110 against the same cgroup filesystem, meaning that the comounted controllers
111 manage the same hierarchical organization of processes.
113 For each mounted hierarchy,
114 the directory tree mirrors the control group hierarchy.
115 Each control group is represented by a directory, with each of its child
116 control cgroups represented as a child directory.
117 For instance,
118 .IR /user/joe/1.session
119 represents control group
120 .IR 1.session ,
121 which is a child of cgroup
122 .IR joe ,
123 which is a child of
124 .IR /user .
125 Under each cgroup directory is a set of files which can be read or
126 written to, reflecting resource limits and a few general cgroup
127 properties.
129 .SS Tasks (threads) versus processes
130 In cgroups v1, a distinction is drawn between
131 .I processes
133 .IR tasks .
134 In this view, a process can consist of multiple tasks
135 (more commonly called threads, from a user-space perspective,
136 and called such in the remainder of this man page).
137 In cgroups v1, it is possible to independently manipulate
138 the cgroup memberships of the threads in a process.
140 The cgroups v1 ability to split threads across different cgroups
141 caused problems in some cases.
142 For example, it made no sense for the
143 .I memory
144 controller,
145 since all of the threads of a process share a single address space.
146 Because of these problems,
147 the ability to independently manipulate the cgroup memberships
148 of the threads in a process was removed in the initial cgroups v2
149 implementation, and subsequently restored in a more limited form
150 (see the discussion of "thread mode" below).
152 .SS Mounting v1 controllers
153 The use of cgroups requires a kernel built with the
154 .BR CONFIG_CGROUP
155 option.
156 In addition, each of the v1 controllers has an associated
157 configuration option that must be set in order to employ that controller.
159 In order to use a v1 controller,
160 it must be mounted against a cgroup filesystem.
161 The usual place for such mounts is under a
162 .BR tmpfs (5)
163 filesystem mounted at
164 .IR /sys/fs/cgroup .
165 Thus, one might mount the
166 .I cpu
167 controller as follows:
169 .in +4n
171 mount \-t cgroup \-o cpu none /sys/fs/cgroup/cpu
175 It is possible to comount multiple controllers against the same hierarchy.
176 For example, here the
177 .IR cpu
179 .IR cpuacct
180 controllers are comounted against a single hierarchy:
182 .in +4n
184 mount \-t cgroup \-o cpu,cpuacct none /sys/fs/cgroup/cpu,cpuacct
188 Comounting controllers has the effect that a process is in the same cgroup for
189 all of the comounted controllers.
190 Separately mounting controllers allows a process to
191 be in cgroup
192 .I /foo1
193 for one controller while being in
194 .I /foo2/foo3
195 for another.
197 It is possible to comount all v1 controllers against the same hierarchy:
199 .in +4n
201 mount \-t cgroup \-o all cgroup /sys/fs/cgroup
205 (One can achieve the same result by omitting
206 .IR "\-o all" ,
207 since it is the default if no controllers are explicitly specified.)
209 It is not possible to mount the same controller
210 against multiple cgroup hierarchies.
211 For example, it is not possible to mount both the
212 .I cpu
214 .I cpuacct
215 controllers against one hierarchy, and to mount the
216 .I cpu
217 controller alone against another hierarchy.
218 It is possible to create multiple mount points with exactly
219 the same set of comounted controllers.
220 However, in this case all that results is multiple mount points
221 providing a view of the same hierarchy.
223 Note that on many systems, the v1 controllers are automatically mounted under
224 .IR /sys/fs/cgroup ;
225 in particular,
226 .BR systemd (1)
227 automatically creates such mount points.
229 .SS Unmounting v1 controllers
230 A mounted cgroup filesystem can be unmounted using the
231 .BR umount (8)
232 command, as in the following example:
234 .in +4n
236 umount /sys/fs/cgroup/pids
240 .IR "But note well" :
241 a cgroup filesystem is unmounted only if it is not busy,
242 that is, it has no child cgroups.
243 If this is not the case, then the only effect of the
244 .BR umount (8)
245 is to make the mount invisible.
246 Thus, to ensure that the mount point is really removed,
247 one must first remove all child cgroups,
248 which in turn can be done only after all member processes
249 have been moved from those cgroups to the root cgroup.
251 .SS Cgroups version 1 controllers
252 Each of the cgroups version 1 controllers is governed
253 by a kernel configuration option (listed below).
254 Additionally, the availability of the cgroups feature is governed by the
255 .BR CONFIG_CGROUPS
256 kernel configuration option.
258 .IR cpu " (since Linux 2.6.24; " \fBCONFIG_CGROUP_SCHED\fP )
259 Cgroups can be guaranteed a minimum number of "CPU shares"
260 when a system is busy.
261 This does not limit a cgroup's CPU usage if the CPUs are not busy.
262 For further information, see
263 .IR Documentation/scheduler/sched-design-CFS.txt .
265 In Linux 3.2,
266 this controller was extended to provide CPU "bandwidth" control.
267 If the kernel is configured with
268 .BR CONFIG_CFS_BANDWIDTH ,
269 then within each scheduling period
270 (defined via a file in the cgroup directory), it is possible to define
271 an upper limit on the CPU time allocated to the processes in a cgroup.
272 This upper limit applies even if there is no other competition for the CPU.
273 Further information can be found in the kernel source file
274 .IR Documentation/scheduler/sched\-bwc.txt .
276 .IR cpuacct " (since Linux 2.6.24; " \fBCONFIG_CGROUP_CPUACCT\fP )
277 This provides accounting for CPU usage by groups of processes.
279 Further information can be found in the kernel source file
280 .IR Documentation/cgroup\-v1/cpuacct.txt .
282 .IR cpuset " (since Linux 2.6.24; " \fBCONFIG_CPUSETS\fP )
283 This cgroup can be used to bind the processes in a cgroup to
284 a specified set of CPUs and NUMA nodes.
286 Further information can be found in the kernel source file
287 .IR Documentation/cgroup\-v1/cpusets.txt .
289 .IR memory " (since Linux 2.6.25; " \fBCONFIG_MEMCG\fP )
290 The memory controller supports reporting and limiting of process memory, kernel
291 memory, and swap used by cgroups.
293 Further information can be found in the kernel source file
294 .IR Documentation/cgroup\-v1/memory.txt .
296 .IR devices " (since Linux 2.6.26; " \fBCONFIG_CGROUP_DEVICE\fP )
297 This supports controlling which processes may create (mknod) devices as
298 well as open them for reading or writing.
299 The policies may be specified as whitelists and blacklists.
300 Hierarchy is enforced, so new rules must not
301 violate existing rules for the target or ancestor cgroups.
303 Further information can be found in the kernel source file
304 .IR Documentation/cgroup-v1/devices.txt .
306 .IR freezer " (since Linux 2.6.28; " \fBCONFIG_CGROUP_FREEZER\fP )
308 .IR freezer
309 cgroup can suspend and restore (resume) all processes in a cgroup.
310 Freezing a cgroup
311 .I /A
312 also causes its children, for example, processes in
313 .IR /A/B ,
314 to be frozen.
316 Further information can be found in the kernel source file
317 .IR Documentation/cgroup-v1/freezer-subsystem.txt .
319 .IR net_cls " (since Linux 2.6.29; " \fBCONFIG_CGROUP_NET_CLASSID\fP )
320 This places a classid, specified for the cgroup, on network packets
321 created by a cgroup.
322 These classids can then be used in firewall rules,
323 as well as used to shape traffic using
324 .BR tc (8).
325 This applies only to packets
326 leaving the cgroup, not to traffic arriving at the cgroup.
328 Further information can be found in the kernel source file
329 .IR Documentation/cgroup-v1/net_cls.txt .
331 .IR blkio " (since Linux 2.6.33; " \fBCONFIG_BLK_CGROUP\fP )
333 .I blkio
334 cgroup controls and limits access to specified block devices by
335 applying IO control in the form of throttling and upper limits against leaf
336 nodes and intermediate nodes in the storage hierarchy.
338 Two policies are available.
339 The first is a proportional-weight time-based division
340 of disk implemented with CFQ.
341 This is in effect for leaf nodes using CFQ.
342 The second is a throttling policy which specifies
343 upper I/O rate limits on a device.
345 Further information can be found in the kernel source file
346 .IR Documentation/cgroup-v1/blkio-controller.txt .
348 .IR perf_event " (since Linux 2.6.39; " \fBCONFIG_CGROUP_PERF\fP )
349 This controller allows
350 .I perf
351 monitoring of the set of processes grouped in a cgroup.
353 Further information can be found in the kernel source file
354 .IR tools/perf/Documentation/perf-record.txt .
356 .IR net_prio " (since Linux 3.3; " \fBCONFIG_CGROUP_NET_PRIO\fP )
357 This allows priorities to be specified, per network interface, for cgroups.
359 Further information can be found in the kernel source file
360 .IR Documentation/cgroup-v1/net_prio.txt .
362 .IR hugetlb " (since Linux 3.5; " \fBCONFIG_CGROUP_HUGETLB\fP )
363 This supports limiting the use of huge pages by cgroups.
365 Further information can be found in the kernel source file
366 .IR Documentation/cgroup-v1/hugetlb.txt .
368 .IR pids " (since Linux 4.3; " \fBCONFIG_CGROUP_PIDS\fP )
369 This controller permits limiting the number of process that may be created
370 in a cgroup (and its descendants).
372 Further information can be found in the kernel source file
373 .IR Documentation/cgroup-v1/pids.txt .
375 .IR rdma " (since Linux 4.11; " \fBCONFIG_CGROUP_RDMA\fP )
376 The RDMA controller permits limiting the use of
377 RDMA/IB-specific resources per cgroup.
379 Further information can be found in the kernel source file
380 .IR Documentation/cgroup-v1/rdma.txt .
382 .SS Creating cgroups and moving processes
383 A cgroup filesystem initially contains a single root cgroup, '/',
384 which all processes belong to.
385 A new cgroup is created by creating a directory in the cgroup filesystem:
387 .in +4n
389 mkdir /sys/fs/cgroup/cpu/cg1
393 This creates a new empty cgroup.
395 A process may be moved to this cgroup by writing its PID into the cgroup's
396 .I cgroup.procs
397 file:
399 .in +4n
401 echo $$ > /sys/fs/cgroup/cpu/cg1/cgroup.procs
405 Only one PID at a time should be written to this file.
407 Writing the value 0 to a
408 .IR cgroup.procs
409 file causes the writing process to be moved to the corresponding cgroup.
411 When writing a PID into the
412 .IR cgroup.procs ,
413 all threads in the process are moved into the new cgroup at once.
415 Within a hierarchy, a process can be a member of exactly one cgroup.
416 Writing a process's PID to a
417 .IR cgroup.procs
418 file automatically removes it from the cgroup of
419 which it was previously a member.
422 .I cgroup.procs
423 file can be read to obtain a list of the processes that are
424 members of a cgroup.
425 The returned list of PIDs is not guaranteed to be in order.
426 Nor is it guaranteed to be free of duplicates.
427 (For example, a PID may be recycled while reading from the list.)
429 In cgroups v1, an individual thread can be moved to
430 another cgroup by writing its thread ID
431 (i.e., the kernel thread ID returned by
432 .BR clone (2)
434 .BR gettid (2))
435 to the
436 .IR tasks
437 file in a cgroup directory.
438 This file can be read to discover the set of threads
439 that are members of the cgroup.
441 .SS Removing cgroups
442 To remove a cgroup,
443 it must first have no child cgroups and contain no (nonzombie) processes.
444 So long as that is the case, one can simply
445 remove the corresponding directory pathname.
446 Note that files in a cgroup directory cannot and need not be
447 removed.
449 .SS Cgroups v1 release notification
450 Two files can be used to determine whether the kernel provides
451 notifications when a cgroup becomes empty.
452 A cgroup is considered to be empty when it contains no child
453 cgroups and no member processes.
455 A special file in the root directory of each cgroup hierarchy,
456 .IR release_agent ,
457 can be used to register the pathname of a program that may be invoked when
458 a cgroup in the hierarchy becomes empty.
459 The pathname of the newly empty cgroup (relative to the cgroup mount point)
460 is provided as the sole command-line argument when the
461 .IR release_agent
462 program is invoked.
464 .IR release_agent
465 program might remove the cgroup directory,
466 or perhaps repopulate it with a process.
468 The default value of the
469 .IR release_agent
470 file is empty, meaning that no release agent is invoked.
472 The content of the
473 .I release_agent
474 file can also be specified via a mount option when the
475 cgroup filesystem is mounted:
477 .in +4n
479 mount -o release_agent=pathname ...
483 Whether or not the
484 .IR release_agent
485 program is invoked when a particular cgroup becomes empty is determined
486 by the value in the
487 .IR notify_on_release
488 file in the corresponding cgroup directory.
489 If this file contains the value 0, then the
490 .IR release_agent
491 program is not invoked.
492 If it contains the value 1, the
493 .IR release_agent
494 program is invoked.
495 The default value for this file in the root cgroup is 0.
496 At the time when a new cgroup is created,
497 the value in this file is inherited from the corresponding file
498 in the parent cgroup.
500 .SS Cgroup v1 named hierarchies
501 In cgroups v1,
502 it is possible to mount a cgroup hierarchy that has no attached controllers:
504 .in +4n
506 mount -t cgroup -o none,name=somename none /some/mount/point
510 Multiple instances of such hierarchies can be mounted;
511 each hierarchy must have a unique name.
512 The only purpose of such hierarchies is to track processes.
513 (See the discussion of release notification below.)
514 An example of this is the
515 .I name=systemd
516 cgroup hierarchy that is used by
517 .BR systemd (1)
518 to track services and user sessions.
520 Since Linux 5.0, the
521 .I cgroup_no_v1
522 kernel boot option (described below) can be used to disable cgroup v1
523 named hierarchies, by specifying
524 .IR cgroup_no_v1=named .
527 .SH CGROUPS VERSION 2
528 In cgroups v2,
529 all mounted controllers reside in a single unified hierarchy.
530 While (different) controllers may be simultaneously
531 mounted under the v1 and v2 hierarchies,
532 it is not possible to mount the same controller simultaneously
533 under both the v1 and the v2 hierarchies.
535 The new behaviors in cgroups v2 are summarized here,
536 and in some cases elaborated in the following subsections.
537 .IP 1. 3
538 Cgroups v2 provides a unified hierarchy against
539 which all controllers are mounted.
540 .IP 2.
541 "Internal" processes are not permitted.
542 With the exception of the root cgroup, processes may reside
543 only in leaf nodes (cgroups that do not themselves contain child cgroups).
544 The details are somewhat more subtle than this, and are described below.
545 .IP 3.
546 Active cgroups must be specified via the files
547 .IR cgroup.controllers
549 .IR cgroup.subtree_control .
550 .IP 4.
552 .I tasks
553 file has been removed.
554 In addition, the
555 .I cgroup.clone_children
556 file that is employed by the
557 .I cpuset
558 controller has been removed.
559 .IP 5.
560 An improved mechanism for notification of empty cgroups is provided by the
561 .IR cgroup.events
562 file.
564 For more changes, see the
565 .I Documentation/cgroup-v2.txt
566 file in the kernel source.
568 Some of the new behaviors listed above saw subsequent modification with
569 the addition in Linux 4.14 of "thread mode" (described below).
571 .SS Cgroups v2 unified hierarchy
572 In cgroups v1, the ability to mount different controllers
573 against different hierarchies was intended to allow great flexibility
574 for application design.
575 In practice, though, the flexibility turned out to less useful than expected,
576 and in many cases added complexity.
577 Therefore, in cgroups v2,
578 all available controllers are mounted against a single hierarchy.
579 The available controllers are automatically mounted,
580 meaning that it is not necessary (or possible) to specify the controllers
581 when mounting the cgroup v2 filesystem using a command such as the following:
583 .in +4n
585 mount -t cgroup2 none /mnt/cgroup2
589 A cgroup v2 controller is available only if it is not currently in use
590 via a mount against a cgroup v1 hierarchy.
591 Or, to put things another way, it is not possible to employ
592 the same controller against both a v1 hierarchy and the unified v2 hierarchy.
593 This means that it may be necessary first to unmount a v1 controller
594 (as described above) before that controller is available in v2.
595 Since
596 .BR systemd (1)
597 makes heavy use of some v1 controllers by default,
598 it can in some cases be simpler to boot the system with
599 selected v1 controllers disabled.
600 To do this, specify the
601 .IR cgroup_no_v1=list
602 option on the kernel boot command line;
603 .I list
604 is a comma-separated list of the names of the controllers to disable,
605 or the word
606 .I all
607 to disable all v1 controllers.
608 (This situation is correctly handled by
609 .BR systemd (1),
610 which falls back to operating without the specified controllers.)
612 Note that on many modern systems,
613 .BR systemd (1)
614 automatically mounts the
615 .I cgroup2
616 filesystem at
617 .I /sys/fs/cgroup/unified
618 during the boot process.
620 .SS Cgroups v2 controllers
621 The following controllers, documented in the kernel source file
622 .IR Documentation/cgroup-v2.txt ,
623 are supported in cgroups version 2:
625 .IR io " (since Linux 4.5)"
626 This is the successor of the version 1
627 .I blkio
628 controller.
630 .IR memory " (since Linux 4.5)"
631 This is the successor of the version 1
632 .I memory
633 controller.
635 .IR pids " (since Linux 4.5)"
636 This is the same as the version 1
637 .I pids
638 controller.
640 .IR perf_event " (since Linux 4.11)"
641 This is the same as the version 1
642 .I perf_event
643 controller.
645 .IR rdma " (since Linux 4.11)"
646 This is the same as the version 1
647 .I rdma
648 controller.
650 .IR cpu " (since Linux 4.15)"
651 This is the successor to the version 1
652 .I cpu
654 .I cpuacct
655 controllers.
657 .SS Cgroups v2 subtree control
658 Each cgroup in the v2 hierarchy contains the following two files:
660 .IR cgroup.controllers
661 This read-only file exposes a list of the controllers that are
662 .I available
663 in this cgroup.
664 The contents of this file match the contents of the
665 .I cgroup.subtree_control
666 file in the parent cgroup.
668 .I cgroup.subtree_control
669 This is a list of controllers that are
670 .IR active
671 .RI ( enabled )
672 in the cgroup.
673 The set of controllers in this file is a subset of the set in the
674 .IR cgroup.controllers
675 of this cgroup.
676 The set of active controllers is modified by writing strings to this file
677 containing space-delimited controller names,
678 each preceded by '+' (to enable a controller)
679 or '\-' (to disable a controller), as in the following example:
681 .in +4n
683 echo '+pids -memory' > x/y/cgroup.subtree_control
687 An attempt to enable a controller
688 that is not present in
689 .I cgroup.controllers
690 leads to an
691 .B ENOENT
692 error when writing to the
693 .I cgroup.subtree_control
694 file.
696 Because the list of controllers in
697 .I cgroup.subtree_control
698 is a subset of those
699 .IR cgroup.controllers ,
700 a controller that has been disabled in one cgroup in the hierarchy
701 can never be re-enabled in the subtree below that cgroup.
703 A cgroup's
704 .I cgroup.subtree_control
705 file determines the set of controllers that are exercised in the
706 .I child
707 cgroups.
708 When a controller (e.g.,
709 .IR pids )
710 is present in the
711 .I cgroup.subtree_control
712 file of a parent cgroup,
713 then the corresponding controller-interface files (e.g.,
714 .IR pids.max )
715 are automatically created in the children of that cgroup
716 and can be used to exert resource control in the child cgroups.
718 .SS Cgroups v2 """no internal processes""" rule
719 Cgroups v2 enforces a so-called "no internal processes" rule.
720 Roughly speaking, this rule means that,
721 with the exception of the root cgroup, processes may reside
722 only in leaf nodes (cgroups that do not themselves contain child cgroups).
723 This avoids the need to decide how to partition resources between
724 processes which are members of cgroup A and processes in child cgroups of A.
726 For instance, if cgroup
727 .I /cg1/cg2
728 exists, then a process may reside in
729 .IR /cg1/cg2 ,
730 but not in
731 .IR /cg1 .
732 This is to avoid an ambiguity in cgroups v1
733 with respect to the delegation of resources between processes in
734 .I /cg1
735 and its child cgroups.
736 The recommended approach in cgroups v2 is to create a subdirectory called
737 .I leaf
738 for any nonleaf cgroup which should contain processes, but no child cgroups.
739 Thus, processes which previously would have gone into
740 .I /cg1
741 would now go into
742 .IR /cg1/leaf .
743 This has the advantage of making explicit
744 the relationship between processes in
745 .I /cg1/leaf
747 .IR /cg1 's
748 other children.
750 The "no internal processes" rule is in fact more subtle than stated above.
751 More precisely, the rule is that a (nonroot) cgroup can't both
752 (1) have member processes, and
753 (2) distribute resources into child cgroups\(emthat is, have a nonempty
754 .I cgroup.subtree_control
755 file.
756 Thus, it
757 .I is
758 possible for a cgroup to have both member processes and child cgroups,
759 but before controllers can be enabled for that cgroup,
760 the member processes must be moved out of the cgroup
761 (e.g., perhaps into the child cgroups).
763 With the Linux 4.14 addition of "thread mode" (described below),
764 the "no internal processes" rule has been relaxed in some cases.
766 .SS Cgroups v2 cgroup.events file
767 With cgroups v2, a new mechanism is provided to obtain notification
768 about when a cgroup becomes empty.
769 The cgroups v1
770 .IR release_agent
772 .IR notify_on_release
773 files are removed, and replaced by a new, more general-purpose file,
774 .IR cgroup.events .
775 This read-only file contains key-value pairs
776 (delimited by newline characters, with the key and value separated by spaces)
777 that identify events or state for a cgroup.
778 Currently, only one key appears in this file,
779 .IR populated ,
780 which has either the value 0,
781 meaning that the cgroup (and its descendants)
782 contain no (nonzombie) processes,
783 or 1, meaning that the cgroup contains member processes.
786 .IR cgroup.events
787 file can be monitored, in order to receive notification when a cgroup
788 transitions between the populated and unpopulated states (or vice versa).
789 When monitoring this file using
790 .BR inotify (7),
791 transitions generate
792 .BR IN_MODIFY
793 events, and when monitoring the file using
794 .BR poll (2),
795 transitions cause the bits
796 .B POLLPRI
798 .B POLLERR
799 to be returned in the
800 .IR revents
801 field.
803 The cgroups v2 release-notification mechanism provided by the
804 .I populated
805 field of the
806 .I cgroup.events
807 file offers at least two advantages over the cgroups v1
808 .IR release_agent
809 mechanism.
810 First, it allows for cheaper notification,
811 since a single process can monitor multiple
812 .IR cgroup.events
813 files.
814 By contrast, the cgroups v1 mechanism requires the creation
815 of a process for each notification.
816 Second, notification can be delegated to a process that lives inside
817 a container associated with the newly empty cgroup.
819 .SS Cgroups v2 cgroup.stat file
820 .\" commit ec39225cca42c05ac36853d11d28f877fde5c42e
821 Each cgroup in the v2 hierarchy contains a read-only
822 .IR cgroup.stat
823 file (first introduced in Linux 4.14)
824 that consists of lines containing key-value pairs.
825 The following keys currently appear in this file:
827 .I nr_descendants
828 This is the total number of visible (i.e., living) descendant cgroups
829 underneath this cgroup.
831 .I nr_dying_descendants
832 This is the total number of dying descendant cgroups
833 underneath this cgroup.
834 A cgroup enters the dying state after being deleted.
835 It remains in that state for an undefined period
836 (which will depend on system load)
837 while resources are freed before the cgroup is destroyed.
838 Note that the presence of some cgroups in the dying state is normal,
839 and is not indicative of any problem.
841 A process can't be made a member of a dying cgroup,
842 and a dying cgroup can't be brought back to life.
844 .SS Limiting the number of descendant cgroups
845 Each cgroup in the v2 hierarchy contains the following files,
846 which can be used to view and set limits on the number
847 of descendant cgroups under that cgroup:
849 .IR cgroup.max.depth " (since Linux 4.14)"
850 .\" commit 1a926e0bbab83bae8207d05a533173425e0496d1
851 This file defines a limit on the depth of nesting of descendant cgroups.
852 A value of 0 in this file means that no descendant cgroups can be created.
853 An attempt to create a descendant whose nesting level exceeds
854 the limit fails
855 .RI ( mkdir (2)
856 fails with the error
857 .BR EAGAIN ).
859 Writing the string
860 .IR """max"""
861 to this file means that no limit is imposed.
862 The default value in this file is
863 .IR """max""" .
865 .IR cgroup.max.descendants " (since Linux 4.14)"
866 .\" commit 1a926e0bbab83bae8207d05a533173425e0496d1
867 This file defines a limit on the number of live descendant cgroups that
868 this cgroup may have.
869 An attempt to create more descendants than allowed by the limit fails
870 .RI ( mkdir (2)
871 fails with the error
872 .BR EAGAIN ).
874 Writing the string
875 .IR """max"""
876 to this file means that no limit is imposed.
877 The default value in this file is
878 .IR """max""" .
880 .SH CGROUPS DELEGATION: DELEGATING A HIERARCHY TO A LESS PRIVILEGED USER
881 In the context of cgroups,
882 delegation means passing management of some subtree
883 of the cgroup hierarchy to a nonprivileged user.
884 Cgroups v1 provides support for delegation based on file permissions
885 in the cgroup hierarchy but with less strict containment rules than v2
886 (as noted below).
887 Cgroups v2 supports delegation with containment by explicit design.
888 The focus of the discussion in this section is on delegation in cgroups v2,
889 with some differences for cgroups v1 noted along the way.
891 Some terminology is required in order to describe delegation.
893 .I delegater
894 is a privileged user (i.e., root) who owns a parent cgroup.
896 .I delegatee
897 is a nonprivileged user who will be granted the permissions needed
898 to manage some subhierarchy under that parent cgroup,
899 known as the
900 .IR "delegated subtree" .
902 To perform delegation,
903 the delegater makes certain directories and files writable by the delegatee,
904 typically by changing the ownership of the objects to be the user ID
905 of the delegatee.
906 Assuming that we want to delegate the hierarchy rooted at (say)
907 .I /dlgt_grp
908 and that there are not yet any child cgroups under that cgroup,
909 the ownership of the following is changed to the user ID of the delegatee:
911 .IR /dlgt_grp
912 Changing the ownership of the root of the subtree means that any new
913 cgroups created under the subtree (and the files they contain)
914 will also be owned by the delegatee.
916 .IR /dlgt_grp/cgroup.procs
917 Changing the ownership of this file means that the delegatee
918 can move processes into the root of the delegated subtree.
920 .IR /dlgt_grp/cgroup.subtree_control " (cgroups v2 only)"
921 Changing the ownership of this file means that that the delegatee
922 can enable controllers (that are present in
923 .IR /dlgt_grp/cgroup.controllers )
924 in order to further redistribute resources at lower levels in the subtree.
925 (As an alternative to changing the ownership of this file,
926 the delegater might instead add selected controllers to this file.)
928 .IR /dlgt_grp/cgroup.threads " (cgroups v2 only)"
929 Changing the ownership of this file is necessary if a threaded subtree
930 is being delegated (see the description of "thread mode", below).
931 This permits the delegatee to write thread IDs to the file.
932 (The ownership of this file can also be changed when delegating
933 a domain subtree, but currently this serves no purpose,
934 since, as described below, it is not possible to move a thread between
935 domain cgroups by writing its thread ID to the
936 .IR cgroup.threads
937 file.)
939 In cgroups v1, the corresponding file that should instead be delegated is the
940 .I tasks
941 file.
943 The delegater should
944 .I not
945 change the ownership of any of the controller interfaces files (e.g.,
946 .IR pids.max ,
947 .IR memory.high )
949 .IR dlgt_grp .
950 Those files are used from the next level above the delegated subtree
951 in order to distribute resources into the subtree,
952 and the delegatee should not have permission to change
953 the resources that are distributed into the delegated subtree.
955 See also the discussion of the
956 .IR /sys/kernel/cgroup/delegate
957 file in NOTES for information about further delegatable files in cgroups v2.
959 After the aforementioned steps have been performed,
960 the delegatee can create child cgroups within the delegated subtree
961 (the cgroup subdirectories and the files they contain
962 will be owned by the delegatee)
963 and move processes between cgroups in the subtree.
964 If some controllers are present in
965 .IR dlgt_grp/cgroup.subtree_control ,
966 or the ownership of that file was passed to the delegatee,
967 the delegatee can also control the further redistribution
968 of the corresponding resources into the delegated subtree.
970 .SS Cgroups v2 delegation: nsdelegate and cgroup namespaces
971 Starting with Linux 4.13,
972 .\" commit 5136f6365ce3eace5a926e10f16ed2a233db5ba9
973 there is a second way to perform cgroup delegation in the cgroups v2 hierarchy.
974 This is done by mounting or remounting the cgroup v2 filesystem with the
975 .I nsdelegate
976 mount option.
977 For example, if the cgroup v2 filesystem has already been mounted,
978 we can remount it with the
979 .I nsdelegate
980 option as follows:
982 .in +4n
984 mount -t cgroup2 -o remount,nsdelegate \e
985                  none /sys/fs/cgroup/unified
989 .\" ALternatively, we could boot the kernel with the options:
991 .\"    cgroup_no_v1=all systemd.legacy_systemd_cgroup_controller
993 .\" The effect of the latter option is to prevent systemd from employing
994 .\" its "hybrid" cgroup mode, where it tries to make use of cgroups v2.
996 The effect of this mount option is to cause cgroup namespaces
997 to automatically become delegation boundaries.
998 More specifically,
999 the following restrictions apply for processes inside the cgroup namespace:
1000 .IP * 3
1001 Writes to controller interface files in the root directory of the namespace
1002 will fail with the error
1003 .BR EPERM .
1004 Processes inside the cgroup namespace can still write to delegatable
1005 files in the root directory of the cgroup namespace such as
1006 .IR cgroup.procs
1008 .IR cgroup.subtree_control ,
1009 and can create subhierarchy underneath the root directory.
1010 .IP *
1011 Attempts to migrate processes across the namespace boundary are denied
1012 (with the error
1013 .BR ENOENT ).
1014 Processes inside the cgroup namespace can still
1015 (subject to the containment rules described below)
1016 move processes between cgroups
1017 .I within
1018 the subhierarchy under the namespace root.
1020 The ability to define cgroup namespaces as delegation boundaries
1021 makes cgroup namespaces more useful.
1022 To understand why, suppose that we already have one cgroup hierarchy
1023 that has been delegated to a nonprivileged user,
1024 .IR cecilia ,
1025 using the older delegation technique described above.
1026 Suppose further that
1027 .I cecilia
1028 wanted to further delegate a subhierarchy
1029 under the existing delegated hierarchy.
1030 (For example, the delegated hierarchy might be associated with
1031 an unprivileged container run by
1032 .IR cecilia .)
1033 Even if a cgroup namespace was employed,
1034 because both hierarchies are owned by the unprivileged user
1035 .IR cecilia ,
1036 the following illegitimate actions could be performed:
1037 .IP * 3
1038 A process in the inferior hierarchy could change the
1039 resource controller settings in the root directory of that hierarchy.
1040 (These resource controller settings are intended to allow control to
1041 be exercised from the
1042 .I parent
1043 cgroup;
1044 a process inside the child cgroup should not be allowed to modify them.)
1045 .IP *
1046 A process inside the inferior hierarchy could move processes
1047 into and out of the inferior hierarchy if the cgroups in the
1048 superior hierarchy were somehow visible.
1050 Employing the
1051 .I nsdelegate
1052 mount option prevents both of these possibilities.
1055 .I nsdelegate
1056 mount option only has an effect when performed in
1057 the initial mount namespace;
1058 in other mount namespaces, the option is silently ignored.
1060 .IR Note :
1061 On some systems,
1062 .BR systemd (1)
1063 automatically mounts the cgroup v2 filesystem.
1064 In order to experiment with the
1065 .I nsdelegate
1066 operation, it may be useful to boot the kernel with
1067 the following command-line options:
1069 .in +4n
1071 cgroup_no_v1=all systemd.legacy_systemd_cgroup_controller
1075 These options cause the kernel to boot with the cgroups v1 controllers
1076 disabled (meaning that the controllers are available in the v2 hierarchy),
1077 and tells
1078 .BR systemd (1)
1079 not to mount and use the cgroup v2 hierarchy,
1080 so that the v2 hierarchy can be manually mounted
1081 with the desired options after boot-up.
1083 .SS Cgroup delegation containment rules
1084 Some delegation
1085 .IR "containment rules"
1086 ensure that the delegatee can move processes between cgroups within the
1087 delegated subtree,
1088 but can't move processes from outside the delegated subtree into
1089 the subtree or vice versa.
1090 A nonprivileged process (i.e., the delegatee) can write the PID of
1091 a "target" process into a
1092 .IR cgroup.procs
1093 file only if all of the following are true:
1094 .IP * 3
1095 The writer has write permission on the
1096 .I cgroup.procs
1097 file in the destination cgroup.
1098 .IP *
1099 The writer has write permission on the
1100 .I cgroup.procs
1101 file in the nearest common ancestor of the source and destination cgroups.
1102 Note that in some cases,
1103 the nearest common ancestor may be the source or destination cgroup itself.
1104 This requirement is not enforced for cgroups v1 hierarchies,
1105 with the consequence that containment in v1 is less strict than in v2.
1106 (For example, in cgroups v1 the user that owns two distinct
1107 delegated subhierarchies can move a process between the hierarchies.)
1108 .IP *
1109 If the cgroup v2 filesystem was mounted with the
1110 .I nsdelegate
1111 option, the writer must be able to see the source and destination cgroups
1112 from its cgroup namespace.
1113 .IP *
1114 In cgroups v1:
1115 the effective UID of the writer (i.e., the delegatee) matches the
1116 real user ID or the saved set-user-ID of the target process.
1117 Before Linux 4.11,
1118 .\" commit 576dd464505fc53d501bb94569db76f220104d28
1119 this requirement also applied in cgroups v2
1120 (This was a historical requirement inherited from cgroups v1
1121 that was later deemed unnecessary,
1122 since the other rules suffice for containment in cgroups v2.)
1124 .IR Note :
1125 one consequence of these delegation containment rules is that the
1126 unprivileged delegatee can't place the first process into
1127 the delegated subtree;
1128 instead, the delegater must place the first process
1129 (a process owned by the delegatee) into the delegated subtree.
1131 .SH CGROUPS VERSION 2 THREAD MODE
1132 Among the restrictions imposed by cgroups v2 that were not present
1133 in cgroups v1 are the following:
1134 .IP * 3
1135 .IR "No thread-granularity control" :
1136 all of the threads of a process must be in the same cgroup.
1137 .IP *
1138 .IR "No internal processes" :
1139 a cgroup can't both have member processes and
1140 exercise controllers on child cgroups.
1142 Both of these restrictions were added because
1143 the lack of these restrictions had caused problems
1144 in cgroups v1.
1145 In particular, the cgroups v1 ability to allow thread-level granularity
1146 for cgroup membership made no sense for some controllers.
1147 (A notable example was the
1148 .I memory
1149 controller: since threads share an address space,
1150 it made no sense to split threads across different
1151 .I memory
1152 cgroups.)
1154 Notwithstanding the initial design decision in cgroups v2,
1155 there were use cases for certain controllers, notably the
1156 .IR cpu
1157 controller,
1158 for which thread-level granularity of control was meaningful and useful.
1159 To accommodate such use cases, Linux 4.14 added
1160 .I "thread mode"
1161 for cgroups v2.
1163 Thread mode allows the following:
1164 .IP * 3
1165 The creation of
1166 .IR "threaded subtrees"
1167 in which the threads of a process may
1168 be spread across cgroups inside the tree.
1169 (A threaded subtree may contain multiple multithreaded processes.)
1170 .IP *
1171 The concept of
1172 .IR "threaded controllers",
1173 which can distribute resources across the cgroups in a threaded subtree.
1174 .IP *
1175 A relaxation of the "no internal processes rule",
1176 so that, within a threaded subtree,
1177 a cgroup can both contain member threads and
1178 exercise resource control over child cgroups.
1180 With the addition of thread mode,
1181 each nonroot cgroup now contains a new file,
1182 .IR cgroup.type ,
1183 that exposes, and in some circumstances can be used to change,
1184 the "type" of a cgroup.
1185 This file contains one of the following type values:
1187 .I "domain"
1188 This is a normal v2 cgroup that provides process-granularity control.
1189 If a process is a member of this cgroup,
1190 then all threads of the process are (by definition) in the same cgroup.
1191 This is the default cgroup type,
1192 and provides the same behavior that was provided for
1193 cgroups in the initial cgroups v2 implementation.
1195 .I "threaded"
1196 This cgroup is a member of a threaded subtree.
1197 Threads can be added to this cgroup,
1198 and controllers can be enabled for the cgroup.
1200 .I "domain threaded"
1201 This is a domain cgroup that serves as the root of a threaded subtree.
1202 This cgroup type is also known as "threaded root".
1204 .I "domain invalid"
1205 This is a cgroup inside a threaded subtree
1206 that is in an "invalid" state.
1207 Processes can't be added to the cgroup,
1208 and controllers can't be enabled for the cgroup.
1209 The only thing that can be done with this cgroup (other than deleting it)
1210 is to convert it to a
1211 .IR threaded
1212 cgroup by writing the string
1213 .IR """threaded"""
1214 to the
1215 .I cgroup.type
1216 file.
1218 The rationale for the existence of this "interim" type
1219 during the creation of a threaded subtree
1220 (rather than the kernel simply immediately converting all cgroups
1221 under the threaded root to the type
1222 .IR threaded )
1223 is to allow for
1224 possible future extensions to the thread mode model
1226 .SS Threaded versus domain controllers
1227 With the addition of threads mode,
1228 cgroups v2 now distinguishes two types of resource controllers:
1229 .IP * 3
1230 .I Threaded
1231 .\" In the kernel source, look for ".threaded[ \t]*= true" in
1232 .\" initializations of struct cgroup_subsys
1233 controllers: these controllers support thread-granularity for
1234 resource control and can be enabled inside threaded subtrees,
1235 with the result that the corresponding controller-interface files
1236 appear inside the cgroups in the threaded subtree.
1237 As at Linux 4.19, the following controllers are threaded:
1238 .IR cpu ,
1239 .IR perf_event ,
1241 .IR pids .
1242 .IP *
1243 .I Domain
1244 controllers: these controllers support only process granularity
1245 for resource control.
1246 From the perspective of a domain controller,
1247 all threads of a process are always in the same cgroup.
1248 Domain controllers can't be enabled inside a threaded subtree.
1250 .SS Creating a threaded subtree
1251 There are two pathways that lead to the creation of a threaded subtree.
1252 The first pathway proceeds as follows:
1253 .IP 1. 3
1254 We write the string
1255 .IR """threaded"""
1256 to the
1257 .I cgroup.type
1258 file of a cgroup
1259 .IR y/z
1260 that currently has the type
1261 .IR domain .
1262 This has the following effects:
1264 .IP * 3
1265 The type of the cgroup
1266 .IR y/z
1267 becomes
1268 .IR threaded .
1269 .IP *
1270 The type of the parent cgroup,
1271 .IR y ,
1272 becomes
1273 .IR "domain threaded" .
1274 The parent cgroup is the root of a threaded subtree
1275 (also known as the "threaded root").
1276 .IP *
1277 All other cgroups under
1278 .IR y
1279 that were not already of type
1280 .IR threaded
1281 (because they were inside already existing threaded subtrees
1282 under the new threaded root)
1283 are converted to type
1284 .IR "domain invalid" .
1285 Any subsequently created cgroups under
1286 .I y
1287 will also have the type
1288 .IR "domain invalid" .
1290 .IP 2.
1291 We write the string
1292 .IR """threaded"""
1293 to each of the
1294 .IR "domain invalid"
1295 cgroups under
1296 .IR y ,
1297 in order to convert them to the type
1298 .IR threaded .
1299 As a consequence of this step, all threads under the threaded root
1300 now have the type
1301 .IR threaded
1302 and the threaded subtree is now fully usable.
1303 The requirement to write
1304 .IR """threaded"""
1305 to each of these cgroups is somewhat cumbersome,
1306 but allows for possible future extensions to the thread-mode model.
1308 The second way of creating a threaded subtree is as follows:
1309 .IP 1. 3
1310 In an existing cgroup,
1311 .IR z ,
1312 that currently has the type
1313 .IR domain ,
1314 we (1) enable one or more threaded controllers and
1315 (2) make a process a member of
1316 .IR z .
1317 (These two steps can be done in either order.)
1318 This has the following consequences:
1320 .IP * 3
1321 The type of
1322 .I z
1323 becomes
1324 .IR "domain threaded" .
1325 .IP *
1326 All of the descendant cgroups of
1327 .I x
1328 that were not already of type
1329 .IR threaded
1330 are converted to type
1331 .IR "domain invalid" .
1333 .IP 2.
1334 As before, we make the threaded subtree usable by writing the string
1335 .IR """threaded"""
1336 to each of the
1337 .IR "domain invalid"
1338 cgroups under
1339 .IR y ,
1340 in order to convert them to the type
1341 .IR threaded .
1343 One of the consequences of the above pathways to creating a threaded subtree
1344 is that the threaded root cgroup can be a parent only to
1345 .I threaded
1346 (and
1347 .IR "domain invalid" )
1348 cgroups.
1349 The threaded root cgroup can't be a parent of a
1350 .I domain
1351 cgroups, and a
1352 .I threaded
1353 cgroup
1354 can't have a sibling that is a
1355 .I domain
1356 cgroup.
1358 .SS Using a threaded subtree
1359 Within a threaded subtree, threaded controllers can be enabled
1360 in each subgroup whose type has been changed to
1361 .IR threaded ;
1362 upon doing so, the corresponding controller interface files
1363 appear in the children of that cgroup.
1365 A process can be moved into a threaded subtree by writing its PID to the
1366 .I cgroup.procs
1367 file in one of the cgroups inside the tree.
1368 This has the effect of making all of the threads
1369 in the process members of the corresponding cgroup
1370 and makes the process a member of the threaded subtree.
1371 The threads of the process can then be spread across
1372 the threaded subtree by writing their thread IDs (see
1373 .BR gettid (2))
1374 to the
1375 .I cgroup.threads
1376 files in different cgroups inside the subtree.
1377 The threads of a process must all reside in the same threaded subtree.
1379 As with writing to
1380 .IR cgroup.procs ,
1381 some containment rules apply when writing to the
1382 .I cgroup.threads
1383 file:
1384 .IP * 3
1385 The writer must have write permission on the
1386 cgroup.threads
1387 file in the destination cgroup.
1388 .IP *
1389 The writer must have write permission on the
1390 .I cgroup.procs
1391 file in the common ancestor of the source and destination cgroups.
1392 (In some cases,
1393 the common ancestor may be the source or destination cgroup itself.)
1394 .IP *
1395 The source and destination cgroups must be in the same threaded subtree.
1396 (Outside a threaded subtree, an attempt to move a thread by writing
1397 its thread ID to the
1398 .I cgroup.threads
1399 file in a different
1400 .I domain
1401 cgroup fails with the error
1402 .BR EOPNOTSUPP .)
1405 .I cgroup.threads
1406 file is present in each cgroup (including
1407 .I domain
1408 cgroups) and can be read in order to discover the set of threads
1409 that is present in the cgroup.
1410 The set of thread IDs obtained when reading this file
1411 is not guaranteed to be ordered or free of duplicates.
1414 .I cgroup.procs
1415 file in the threaded root shows the PIDs of all processes
1416 that are members of the threaded subtree.
1418 .I cgroup.procs
1419 files in the other cgroups in the subtree are not readable.
1421 Domain controllers can't be enabled in a threaded subtree;
1422 no controller-interface files appear inside the cgroups underneath the
1423 threaded root.
1424 From the point of view of a domain controller,
1425 threaded subtrees are invisible:
1426 a multithreaded process inside a threaded subtree appears to a domain
1427 controller as a process that resides in the threaded root cgroup.
1429 Within a threaded subtree, the "no internal processes" rule does not apply:
1430 a cgroup can both contain member processes (or thread)
1431 and exercise controllers on child cgroups.
1433 .SS Rules for writing to cgroup.type and creating threaded subtrees
1434 A number of rules apply when writing to the
1435 .I cgroup.type
1436 file:
1437 .IP * 3
1438 Only the string
1439 .IR """threaded"""
1440 may be written.
1441 In other words, the only explicit transition that is possible is to convert a
1442 .I domain
1443 cgroup to type
1444 .IR threaded .
1445 .IP *
1446 The effect of writing
1447 .IR """threaded"""
1448 depends on the current value in
1449 .IR cgroup.type ,
1450 as follows:
1452 .IP \(bu 3
1453 .IR domain
1455 .IR "domain threaded" :
1456 start the creation of a threaded subtree
1457 (whose root is the parent of this cgroup) via
1458 the first of the pathways described above;
1459 .IP \(bu
1460 .IR "domain\ invalid" :
1461 convert this cgroup (which is inside a threaded subtree) to a usable (i.e.,
1462 .IR threaded )
1463 state;
1464 .IP \(bu
1465 .IR threaded :
1466 no effect (a "no-op").
1468 .IP *
1469 We can't write to a
1470 .I cgroup.type
1471 file if the parent's type is
1472 .IR "domain invalid" .
1473 In other words, the cgroups of a threaded subtree must be converted to the
1474 .I threaded
1475 state in a top-down manner.
1477 There are also some constraints that must be satisfied
1478 in order to create a threaded subtree rooted at the cgroup
1479 .IR x :
1480 .IP * 3
1481 There can be no member processes in the descendant cgroups of
1482 .IR x .
1483 (The cgroup
1484 .I x
1485 can itself have member processes.)
1486 .IP *
1487 No domain controllers may be enabled in
1488 .IR x 's
1489 .IR cgroup.subtree_control
1490 file.
1492 If any of the above constraints is violated, then an attempt to write
1493 .IR """threaded"""
1494 to a
1495 .IR cgroup.type
1496 file fails with the error
1497 .BR ENOTSUP .
1499 .SS The """domain threaded""" cgroup type
1500 According to the pathways described above,
1501 the type of a cgroup can change to
1502 .IR "domain threaded"
1503 in either of the following cases:
1504 .IP * 3
1505 The string
1506 .IR """threaded"""
1507 is written to a child cgroup.
1508 .IP *
1509 A threaded controller is enabled inside the cgroup and
1510 a process is made a member of the cgroup.
1513 .IR "domain threaded"
1514 cgroup,
1515 .IR x ,
1516 can revert to the type
1517 .IR domain
1518 if the above conditions no longer hold true\(emthat is, if all
1519 .I threaded
1520 child cgroups of
1521 .I x
1522 are removed and either
1523 .I x
1524 no longer has threaded controllers enabled or
1525 no longer has member processes.
1527 When a
1528 .IR "domain threaded"
1529 cgroup
1530 .IR x
1531 reverts to the type
1532 .IR domain :
1533 .IP * 3
1535 .IR "domain invalid"
1536 descendants of
1537 .I x
1538 that are not in lower-level threaded subtrees revert to the type
1539 .IR domain .
1540 .IP *
1541 The root cgroups in any lower-level threaded subtrees revert to the type
1542 .IR "domain threaded" .
1544 .SS Exceptions for the root cgroup
1545 The root cgroup of the v2 hierarchy is treated exceptionally:
1546 it can be the parent of both
1547 .I domain
1549 .I threaded
1550 cgroups.
1551 If the string
1552 .I """threaded"""
1553 is written to the
1554 .I cgroup.type
1555 file of one of the children of the root cgroup, then
1556 .IP * 3
1557 The type of that cgroup becomes
1558 .IR threaded .
1559 .IP *
1560 The type of any descendants of that cgroup that
1561 are not part of lower-level threaded subtrees changes to
1562 .IR "domain invalid" .
1564 Note that in this case, there is no cgroup whose type becomes
1565 .IR "domain threaded" .
1566 (Notionally, the root cgroup can be considered as the threaded root
1567 for the cgroup whose type was changed to
1568 .IR threaded .)
1570 The aim of this exceptional treatment for the root cgroup is to
1571 allow a threaded cgroup that employs the
1572 .I cpu
1573 controller to be placed as high as possible in the hierarchy,
1574 so as to minimize the (small) cost of traversing the cgroup hierarchy.
1576 .SS The cgroups v2 """cpu""" controller and realtime threads
1577 As at Linux 4.19, the cgroups v2
1578 .I cpu
1579 controller does not support control of realtime threads
1580 (specifically threads scheduled under any of the policies
1581 .BR SCHED_FIFO ,
1582 .BR SCHED_RR ,
1583 described
1584 .BR SCHED_DEADLINE ;
1586 .BR sched (7)).
1587 Therefore, the
1588 .I cpu
1589 controller can be enabled in the root cgroup only
1590 if all realtime threads are in the root cgroup.
1591 (If there are realtime threads in nonroot cgroups, then a
1592 .BR write (2)
1593 of the string
1594 .IR """+cpu"""
1595 to the
1596 .I cgroup.subtree_control
1597 file fails with the error
1598 .BR EINVAL .)
1600 On some systems,
1601 .BR systemd (1)
1602 places certain realtime threads in nonroot cgroups in the v2 hierarchy.
1603 On such systems,
1604 these threads must first be moved to the root cgroup before the
1605 .I cpu
1606 controller can be enabled.
1608 .SH ERRORS
1609 The following errors can occur for
1610 .BR mount (2):
1612 .B EBUSY
1613 An attempt to mount a cgroup version 1 filesystem specified neither the
1614 .I name=
1615 option (to mount a named hierarchy) nor a controller name (or
1616 .IR all ).
1617 .SH NOTES
1618 A child process created via
1619 .BR fork (2)
1620 inherits its parent's cgroup memberships.
1621 A process's cgroup memberships are preserved across
1622 .BR execve (2).
1624 .SS /proc files
1626 .IR /proc/cgroups " (since Linux 2.6.24)"
1627 This file contains information about the controllers
1628 that are compiled into the kernel.
1629 An example of the contents of this file (reformatted for readability)
1630 is the following:
1632 .in +4n
1634 #subsys_name    hierarchy      num_cgroups    enabled
1635 cpuset          4              1              1
1636 cpu             8              1              1
1637 cpuacct         8              1              1
1638 blkio           6              1              1
1639 memory          3              1              1
1640 devices         10             84             1
1641 freezer         7              1              1
1642 net_cls         9              1              1
1643 perf_event      5              1              1
1644 net_prio        9              1              1
1645 hugetlb         0              1              0
1646 pids            2              1              1
1650 The fields in this file are, from left to right:
1652 .IP 1. 3
1653 The name of the controller.
1654 .IP 2.
1655 The unique ID of the cgroup hierarchy on which this controller is mounted.
1656 If multiple cgroups v1 controllers are bound to the same hierarchy,
1657 then each will show the same hierarchy ID in this field.
1658 The value in this field will be 0 if:
1659 .RS 5
1660 .IP a) 3
1661 the controller is not mounted on a cgroups v1 hierarchy;
1662 .IP b)
1663 the controller is bound to the cgroups v2 single unified hierarchy; or
1664 .IP c)
1665 the controller is disabled (see below).
1667 .IP 3.
1668 The number of control groups in this hierarchy using this controller.
1669 .IP 4.
1670 This field contains the value 1 if this controller is enabled,
1671 or 0 if it has been disabled (via the
1672 .IR cgroup_disable
1673 kernel command-line boot parameter).
1676 .IR /proc/[pid]/cgroup " (since Linux 2.6.24)"
1677 This file describes control groups to which the process
1678 with the corresponding PID belongs.
1679 The displayed information differs for
1680 cgroups version 1 and version 2 hierarchies.
1682 For each cgroup hierarchy of which the process is a member,
1683 there is one entry containing three colon-separated fields:
1685 .in +4n
1687 hierarchy-ID:controller-list:cgroup-path
1691 For example:
1693 .in +4n
1695 5:cpuacct,cpu,cpuset:/daemons
1699 The colon-separated fields are, from left to right:
1701 .IP 1. 3
1702 For cgroups version 1 hierarchies,
1703 this field contains a unique hierarchy ID number
1704 that can be matched to a hierarchy ID in
1705 .IR /proc/cgroups .
1706 For the cgroups version 2 hierarchy, this field contains the value 0.
1707 .IP 2.
1708 For cgroups version 1 hierarchies,
1709 this field contains a comma-separated list of the controllers
1710 bound to the hierarchy.
1711 For the cgroups version 2 hierarchy, this field is empty.
1712 .IP 3.
1713 This field contains the pathname of the control group in the hierarchy
1714 to which the process belongs.
1715 This pathname is relative to the mount point of the hierarchy.
1718 .SS /sys/kernel/cgroup files
1720 .IR /sys/kernel/cgroup/delegate " (since Linux 4.15)"
1721 .\" commit 01ee6cfb1483fe57c9cbd8e73817dfbf9bacffd3
1722 This file exports a list of the cgroups v2 files
1723 (one per line) that are delegatable
1724 (i.e., whose ownership should be changed to the user ID of the delegatee).
1725 In the future, the set of delegatable files may change or grow,
1726 and this file provides a way for the kernel to inform
1727 user-space applications of which files must be delegated.
1728 As at Linux 4.15, one sees the following when inspecting this file:
1731 .in +4n
1732 $ \fBcat /sys/kernel/cgroup/delegate\fP
1733 cgroup.procs
1734 cgroup.subtree_control
1735 cgroup.threads
1739 .IR /sys/kernel/cgroup/features " (since Linux 4.15)"
1740 .\" commit 5f2e673405b742be64e7c3604ed4ed3ac14f35ce
1741 Over time, the set of cgroups v2 features that are provided by the
1742 kernel may change or grow,
1743 or some features may not be enabled by default.
1744 This file provides a way for user-space applications to discover what
1745 features the running kernel supports and has enabled.
1746 Features are listed one per line:
1748 .in +4n
1750 $ \fBcat /sys/kernel/cgroup/features\fP
1751 nsdelegate
1755 The entries that can appear in this file are:
1758 .IR nsdelegate " (since Linux 4.15)"
1759 The kernel supports the
1760 .I nsdelegate
1761 mount option.
1763 .SH SEE ALSO
1764 .BR prlimit (1),
1765 .BR systemd (1),
1766 .BR systemd-cgls (1),
1767 .BR systemd-cgtop (1),
1768 .BR clone (2),
1769 .BR ioprio_set (2),
1770 .BR perf_event_open (2),
1771 .BR setrlimit (2),
1772 .BR cgroup_namespaces (7),
1773 .BR cpuset (7),
1774 .BR namespaces (7),
1775 .BR sched (7),
1776 .BR user_namespaces (7)