cgroup: implement the PIDs subsystem
authorAleksa Sarai <cyphar@cyphar.com>
Tue, 9 Jun 2015 11:32:10 +0000 (21:32 +1000)
committerTejun Heo <tj@kernel.org>
Tue, 14 Jul 2015 21:29:23 +0000 (17:29 -0400)
commit49b786ea146f69c371df18e81ce0a2d5839f865c
tree8e7abdd61fb2a8e5d3b7ffbf263fc36d8f9969f5
parent7e47682ea555e7c1edef1d8fd96e2aa4c12abe59
cgroup: implement the PIDs subsystem

Adds a new single-purpose PIDs subsystem to limit the number of
tasks that can be forked inside a cgroup. Essentially this is an
implementation of RLIMIT_NPROC that applies to a cgroup rather than a
process tree.

However, it should be noted that organisational operations (adding and
removing tasks from a PIDs hierarchy) will *not* be prevented. Rather,
the number of tasks in the hierarchy cannot exceed the limit through
forking. This is due to the fact that, in the unified hierarchy, attach
cannot fail (and it is not possible for a task to overcome its PIDs
cgroup policy limit by attaching to a child cgroup -- even if migrating
mid-fork it must be able to fork in the parent first).

PIDs are fundamentally a global resource, and it is possible to reach
PID exhaustion inside a cgroup without hitting any reasonable kmemcg
policy. Once you've hit PID exhaustion, you're only in a marginally
better state than OOM. This subsystem allows PID exhaustion inside a
cgroup to be prevented.

Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
CREDITS
include/linux/cgroup_subsys.h
init/Kconfig
kernel/Makefile
kernel/cgroup_pids.c [new file with mode: 0644]