Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2526455imu; Sun, 23 Dec 2018 01:38:23 -0800 (PST) X-Google-Smtp-Source: ALg8bN480PE3lea8eU7QQKe7TFrSP2cYqWpHESjkvcrHFvtnnuH9w8e7HGwwkaiTMn36qLX0A2cF X-Received: by 2002:a17:902:4c85:: with SMTP id b5mr8760862ple.226.1545557903252; Sun, 23 Dec 2018 01:38:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1545557903; cv=none; d=google.com; s=arc-20160816; b=nYLi7Udk18me6J7PWIO6GhuNsyVt6SDH0AxCnm8PuJDh4zWjyxd/YKbueu0XMpJ9gJ hvsZywdgJ9roqancDe/rt27l0bkJtM5ivxrN6h9LuzmVwWetqOTt+g8n6fkAlRpkFNWE 2MxeoTFhufrOtRcbcXlgxFCcKZfL4vOp9KPm7U0ejFWqUWzV/JhsN3TACUSzPVES95gD FejddQdHfZKdkdMd6GK3UTI8pIlvTAeWj7upsQFirp32DEqXsdsnzQSFFAikWVwx9ID0 +K87VVL0Zz2nVjsWFIe4WOcqbGO3OUiJ4fZgPcwGzzYoCq4L4PSiT0xRAfDQxV2Rfy1K W1qQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=sutVbmkRcHShCG3l/1vJqsHf/W2WwWTpZmygJ/DciHs=; b=O/KwOVf4CZgSXfkhcfh88rjlSJV6CCcumVJxI2hrrCdwHvruFaxKDX/hyNCBKaO+4g vYbQ5NyehBZVsYvWPTGn4W+rqH+NlfDrdRXe5gIaT6UAy8lDhiBTRvGJbtsPlT0EjeNW UK/H6fjOqyA6gUHUzpdLlDjbYxX0bNi8JG+lLmNai5cuzAVyZ+0XxweodOdgxLDEaOTb lY2/h0U1vY2llcHRRKTfA7wOqCkVXrjCq1nGSVsyijZkXHVk6WxIgRUmnyjmywexq6ww K1K/H0CWJ6zbMqYk9ZbpgDUVNGkMK3ZMt3zL0vwe4mGTxePvm3+zbX975apo66d1/WmG r4gQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=gVhwF7dp; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t5si5955848pgm.79.2018.12.23.01.38.08; Sun, 23 Dec 2018 01:38:23 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=gVhwF7dp; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404097AbeLVADL (ORCPT + 99 others); Fri, 21 Dec 2018 19:03:11 -0500 Received: from mail-pg1-f195.google.com ([209.85.215.195]:36432 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727652AbeLVADK (ORCPT ); Fri, 21 Dec 2018 19:03:10 -0500 Received: by mail-pg1-f195.google.com with SMTP id n2so3175271pgm.3; Fri, 21 Dec 2018 16:03:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=sutVbmkRcHShCG3l/1vJqsHf/W2WwWTpZmygJ/DciHs=; b=gVhwF7dpNHrrapRzS9yIMgz2IprGlO/0UIeyAA0yk45Hx5KkkRLlweg/bTaCjgrJ4/ lsSFqEK8Q56HZS/YhSukTOkAceSAn8gQ1F2ZMSViZ4sIYUIT38rA5/BVyi/sbY5O3ymB hC3vHSvreLagRTCLKLfra/zqN6Nj8kt8yeArYqT97YqzyYZVXHyIkl9hkIVIYkR8I7I3 pAjdPuGXGG08yZnxwfAQymcLyjOmOkOZ3r+Yrc0Pma1y0s1ohhgkgXpKC9g8qKnbPjYF Ped7fzyyKRb51NabBfQUd8gyL7ckRGCMIiXj1egALoHqw6Way4X1LYVa3BpYAWRWSCW6 KhJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=sutVbmkRcHShCG3l/1vJqsHf/W2WwWTpZmygJ/DciHs=; b=fQoSRZc5KOYVi/HIgT5JuPqHyyltjb3h9Otlo2rCmGsPfl+0h4DvkUnk4RXTUJhZQS EXzjKK41ftjeEt6/WeMIrYcxJerprMtkXcManF/xL15AooTqo+wA3xXuuOES9rfmkBVA Iq/ZdFszmcylND0SHZN2nOw0woHsMSwmYBa397wbyBl8MJ+MaEMBrwYq2CNogD0ktKkH izvQ5dsnkxRmocNnV1pqEoYM++wluWa6vo9pgH/jsGSCc/gyO1dzZz3U51usWLJfeHiR tssjh7BTM/wULMeDgMszWEyWAtbn8l8wgrDy1PCpEQ7bENrngh4clRnu9xmLh72FntMp 73xQ== X-Gm-Message-State: AJcUukctabfkF0p4ny6C2lCOCfZ+FXz3d+lRlIy7uo+d2v2GbjAXh0fd 6WUKaJv0/Pb9SI3S0nSz0soKeMDUb3k= X-Received: by 2002:a65:55ca:: with SMTP id k10mr4289357pgs.448.1545436989693; Fri, 21 Dec 2018 16:03:09 -0800 (PST) Received: from tower.thefacebook.com ([2620:10d:c090:200::7:608f]) by smtp.gmail.com with ESMTPSA id 83sm36659266pgf.57.2018.12.21.16.03.08 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 21 Dec 2018 16:03:08 -0800 (PST) From: Roman Gushchin X-Google-Original-From: Roman Gushchin To: Tejun Heo , Oleg Nesterov Cc: kernel-team@fb.com, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, Roman Gushchin Subject: [PATCH v6 0/7] freezer for cgroup v2 Date: Fri, 21 Dec 2018 16:03:00 -0800 Message-Id: <20181222000307.28231-1-guro@fb.com> X-Mailer: git-send-email 2.19.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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. Patch (7) adds corresponding docs. 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 (7): 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: document cgroup v2 freezer interface Documentation/admin-guide/cgroup-v2.rst | 27 + include/linux/cgroup-defs.h | 39 + include/linux/cgroup.h | 46 + include/linux/sched.h | 4 + include/linux/sched/jobctl.h | 2 + kernel/cgroup/Makefile | 4 +- kernel/cgroup/cgroup-internal.h | 1 + kernel/cgroup/cgroup-v1.c | 16 - kernel/cgroup/cgroup.c | 145 +++- kernel/cgroup/freezer.c | 650 ++++++-------- kernel/cgroup/legacy_freezer.c | 481 ++++++++++ kernel/signal.c | 93 +- tools/testing/selftests/cgroup/.gitignore | 1 + tools/testing/selftests/cgroup/Makefile | 2 + tools/testing/selftests/cgroup/cgroup_util.c | 85 +- tools/testing/selftests/cgroup/cgroup_util.h | 7 + tools/testing/selftests/cgroup/test_freezer.c | 821 ++++++++++++++++++ 17 files changed, 1993 insertions(+), 431 deletions(-) create mode 100644 kernel/cgroup/legacy_freezer.c create mode 100644 tools/testing/selftests/cgroup/test_freezer.c -- 2.19.2