Skip to content

freezer for cgroup v2

Roman Gushchin cgroups linux-doc linux-kselftest lkml 10 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v10 Latest9 patches 19 repliesIn review
  2. v99 patches 3 repliesSuperseded
  3. v87 patches 13 repliesSuperseded
Earlier versions · 7
VersionPostedPatchesRepliesStatus
v77 patches1 replySuperseded
v67 patches9 repliesSuperseded
v57 patches8 repliesSuperseded
v47 patches7 repliesSuperseded
v37 patches11 repliesSuperseded
v26 patches15 repliesSuperseded
v15 patches0 repliesSuperseded

v10->v9 from the cover letter

- removed redundant fatal_signal_pending() check
- reworked vfork support
- minor cleanups
- rebase to cgroup/for-5.2

Patches in v10 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/9cgroup: rename freezer.c into legacy_freezer.ckernel/cgroup/Makefile kernel/cgroup/legacy_freezer.c+1 -10 replies
2/9cgroup: implement __cgroup_task_count() helperkernel/cgroup/cgroup-internal.h kernel/cgroup/cgroup-v1.c kernel/cgroup/cgroup.c+34 -160 replies
3/9cgroup: protect cgroup->nr_(dying_)descendants by css_set_lockinclude/linux/cgroup-defs.h kernel/cgroup/cgroup.c+11 -00 replies
4/9cgroup: cgroup v2 freezerinclude/linux/cgroup-defs.h include/linux/cgroup.h include/linux/sched.h +6 more+566 -1014 replies
5/9kselftests: cgroup: don't fail on cg_kill_all() error in cg_destroy()tools/testing/selftests/cgroup/cgroup_util.c+1 -30 replies
6/9kselftests: cgroup: add freezer controller self-teststools/testing/selftests/cgroup/.gitignore tools/testing/selftests/cgroup/Makefile tools/testing/selftests/cgroup/cgroup_util.c +2 more+912 -14 replies
7/9cgroup: make TRACE_CGROUP_PATH irq-safekernel/cgroup/cgroup-internal.h+5 -20 replies
8/9cgroup: add tracing points for cgroup v2 freezerinclude/trace/events/cgroup.h kernel/cgroup/cgroup.c kernel/cgroup/freezer.c+71 -10 replies
9/9cgroup: document cgroup v2 freezer interfaceDocumentation/admin-guide/cgroup-v2.rst+27 -00 replies

Reviews trailers per patch

1 of 9 patches has a Reviewed-by or Acked-by.

PatchMike Rapoport
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9R-b

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

Read the v10 thread

Cover letter [PATCH v10 0/9] freezer for cgroup v2

This patchset implements freezer for cgroup v2.

It provides similar functionality as v1 freezer, but the interface conforms to the cgroup v2 interface design principles, and it provides a better user experience: tasks can be killed, ptrace works, there is no separate controller, which has to be enabled, etc.

Patches (1), (2) and (3) are some preparational work, patch (4) contains the implementation, patch (5) is a small cgroup kselftest fix, patch (6) covers freezer adds 6 new kselftests to cover the freezer functionality. Patchse (7) and (8) adding tracing points to simplify the debugging process. Patch (9) adds corresponding docs.

v10->v9:
- removed redundant fatal_signal_pending() check
- reworked vfork support
- minor cleanups
- rebase to cgroup/for-5.2

v9->v8:
- added support for vfork
- added a kselftest test for vfork case
- several tests fixes/improvements
- renamed stopped* into frozen* across the patchset
- other minor fixes

v8->v7:
- reworked/simplified cgroup frozen task accounting by merging nr_stopped and nr_frozen and removing nr_tasks_to_freeze
- don't notify the parent process if the child is going from the stopped to the frozen state

v7->v6:
- handle properly the case, when a task is both stopped and frozen
- check for CGRP_FREEZE instead of CGRP_FROZEN in cgroup_exit()
- minor cosmetic changes and rebase

v6->v5:
- reverted to clear TIF_SIGPENDING with additional checks before schedule(), as proposed by Oleg Nesterov
- made cgroup v2 freezer working with the system freezer (by using freezable_schedule())
- make freezer working with SIGSTOPped and PTRACEd tasks
- added tests to cover freezing a cgroup with SIGSTOPped and PTRACEd tasks

v5->v4:
- rewored cgroup state transition code (suggested by Tejun Heo)
- look at JOBCTL_TRAP_FREEZE instead of task->frozen in recalc_sigpending(), check for task->frozen and JOBCTL_TRAP_FREEZE in signal_pending_state() (suggested by Oleg Nesterov)
- some cosmetic changes in signal.c (suggested by Oleg Nesterov)
- cleaned up comments

v4->v3:
- reading nr_descendants doesn't require taking css_set_lock anymore
- fixed docs based on Mike Rapoport's feedback
- fixed double irq lock found by Dan Carpenter

v3->v2:
- dropped TASK_FROZEN for now, frozen tasks are put into TASK_INTERRUPTIBLE state; it's probably not the final version, but the API question can be discussed separately
- don't clear TIF_SIGPENDING before going to sleep, instead add task->frozen check in signal_pending_state() and recalc_sigpending()
- cgroup-level counter are now synchronized using css_set_lock, which simplified the whole code (e.g. per-cgroup works were removed)
- the amount of comments increased significantly
- many other improvements incorporating feedback from Tejun and Oleg

v2->v1:
- fixed locking aroung calling cgroup_freezer_leave()
- added docs

Roman Gushchin (9):
cgroup: rename freezer.c into legacy_freezer.c
cgroup: implement __cgroup_task_count() helper
cgroup: protect cgroup->nr_(dying_)descendants by css_set_lock
cgroup: cgroup v2 freezer
kselftests: cgroup: don't fail on cg_kill_all() error in cg_destroy()
kselftests: cgroup: add freezer controller self-tests
cgroup: make TRACE_CGROUP_PATH irq-safe
cgroup: add tracing points for cgroup v2 freezer
cgroup: document cgroup v2 freezer interface

 Documentation/admin-guide/cgroup-v2.rst       |  27 +
 include/linux/cgroup-defs.h                   |  33 +
 include/linux/cgroup.h                        |  43 +
 include/linux/sched.h                         |   2 +
 include/linux/sched/jobctl.h                  |   2 +
 include/trace/events/cgroup.h                 |  55 ++
 kernel/cgroup/Makefile                        |   4 +-
 kernel/cgroup/cgroup-internal.h               |   8 +-
 kernel/cgroup/cgroup-v1.c                     |  16 -
 kernel/cgroup/cgroup.c                        | 151 +++-
 kernel/cgroup/freezer.c                       | 647 +++++--------
 kernel/cgroup/legacy_freezer.c                | 481 ++++++++++
 kernel/fork.c                                 |   2 +
 kernel/signal.c                               |  70 +-
 tools/testing/selftests/cgroup/.gitignore     |   1 +
 tools/testing/selftests/cgroup/Makefile       |   2 +
 tools/testing/selftests/cgroup/cgroup_util.c  |  58 +-
 tools/testing/selftests/cgroup/cgroup_util.h  |   5 +
 tools/testing/selftests/cgroup/test_freezer.c | 851 ++++++++++++++++++
 19 files changed, 2026 insertions(+), 432 deletions(-)
 create mode 100644 kernel/cgroup/legacy_freezer.c
 create mode 100644 tools/testing/selftests/cgroup/test_freezer.c
Signature · 1 line
2.20.1