Skip to content

cgroups: Bindable cgroup subsystems

Li Zefan containers lkml 2 versions – New

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v2 Latest6 patches 0 repliesNew
  2. v17 patches 57 repliesSuperseded

Changes in v2 from the cover letter

- Fix some bugs.
- Spit can_bind flag to bindable and unbindable flags
- Provide a __css_tryget() so a bindable subsystem can pin a cgroup via it.
- ...

Patches in v2 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/6cgroups: Shrink struct cgroup_subsysinclude/linux/cgroup.h+6 -40 replies
2/6cgroups: Allow to bind a subsystem to a cgroup hierarchyinclude/linux/cgroup.h kernel/cgroup.c+221 -570 replies
3/6cgroups: Allow to unbind subsystem from a cgroup hierarchyinclude/linux/cgroup.h kernel/cgroup.c+138 -180 replies
4/6cgroups: Mark some subsystems bindable/unbindablekernel/cgroup.c kernel/cgroup_freezer.c kernel/sched.c +1 more+10 -10 replies
5/6cgroups: Triger BUG if a bindable subsystem calls css_get()include/linux/cgroup.h kernel/cgroup.c+10 -20 replies
6/6cgroups: Update documentation for bindable subsystemsDocumentation/cgroups/cgroups.txt+29 -80 replies

Reviews trailers per patch

1 of 6 patches has a Reviewed-by or Acked-by of their own; the series has one for all of them.

PatchPaul Menage
SeriesA-b
1/6A-b
2/6
3/6
4/6
5/6
6/6

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v2 thread

Cover letter [PATCH v2 0/6] cgroups: Bindable cgroup subsystems

Stephane posted a patchset to add perf_cgroup subsystem, so perf can be used to monitor all threads belonging to a cgroup.

But if you already mounted a cgroup hierarchy but without perf_cgroup and the hierarchy has sub-cgroups, you can't bind perf_cgroup to it, and thus you're not able to use per-cgroup perf feature.

This patchset alleviates the pain, and then a subsytem can be bound/unbound to/from a hierarchy which has sub-cgroups in it.

Some subsystems still can't take advantage of this patchset, memcgroup and cpuset for example.

For cpuset, if a hierarchy has a sub-cgroup and the cgroup has tasks, we can't decide sub-cgroup's cpuset.mems and cpuset.cpus automatically if we try to bind cpuset to this hierarchy.

For memcgroup, memcgroup uses css_get/put(), and due to some complexity, for now bindable subsystems should not use css_get/put().

Usage:

# mount -t cgroup -o cpuset xxx /mnt
# mkdir /mnt/tmp
# echo $$ > /mnt/tmp/tasks

(add cpuacct to the hierarchy)

# mount -o remount,cpuset,cpuacct xxx /mnt

(remove it from the hierarchy)

# mount -o remount,cpuset xxx /mnt

There's another limitation, cpuacct should not be bound to any mounted hierarchy before the above operation. But that's not a problem, as you can remove it from a hierarchy and bind it to another one.

Changelog v2:

- Fix some bugs.
- Spit can_bind flag to bindable and unbindable flags
- Provide a __css_tryget() so a bindable subsystem can pin a cgroup via it.
- ...

---
 Documentation/cgroups/cgroups.txt |   37 +++-
 include/linux/cgroup.h            |   39 +++-
 kernel/cgroup.c                   |  391 +++++++++++++++++++++++++++++++------
 kernel/cgroup_freezer.c           |    1 +
 kernel/sched.c                    |    2 +
 security/device_cgroup.c          |    2 +
 6 files changed, 398 insertions(+), 74 deletions(-)