From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752973AbdI0NME (ORCPT ); Wed, 27 Sep 2017 09:12:04 -0400 Received: from mx0a-00082601.pphosted.com ([67.231.145.42]:50438 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753035AbdI0NLD (ORCPT ); Wed, 27 Sep 2017 09:11:03 -0400 From: Roman Gushchin To: CC: Roman Gushchin , Michal Hocko , "Vladimir Davydov" , Johannes Weiner , Tetsuo Handa , David Rientjes , Andrew Morton , Tejun Heo , , , , Subject: [v9 4/5] mm, oom: add cgroup v2 mount option for cgroup-aware OOM killer Date: Wed, 27 Sep 2017 14:09:35 +0100 Message-ID: <20170927130936.8601-5-guro@fb.com> X-Mailer: git-send-email 2.13.5 In-Reply-To: <20170927130936.8601-1-guro@fb.com> References: <20170927130936.8601-1-guro@fb.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [2620:10d:c092:200::1:d3cc] X-ClientProxiedBy: AM4PR0202CA0017.eurprd02.prod.outlook.com (2603:10a6:200:89::27) To CO1PR15MB1079.namprd15.prod.outlook.com (2a01:111:e400:7b66::9) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b87d6d61-4dd1-451f-b0c0-08d505a92af0 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075);SRVR:CO1PR15MB1079; X-Microsoft-Exchange-Diagnostics: 1;CO1PR15MB1079;3:NatDgwpXujnMmqk/70RToyixEbwKoytEcpG0/tpAf/lfJZl0FNUSqh/lPP6pefTXhZlwMMqwYjwP/ZzczunnSErfVGq3bnhNFb2IQSXxRoB3KfK+0G3Byw/MsOF8t1k4/n8bFGnT7ugHZxqaHvG2HgtF1cxgNdChJEB4IOz2kWvgLfwhWbwSTSj9ztjLWCP4dt0lpb9f5LPZQAH9ymEde0enA4dGIHQc21JOG4tzhVMmZZvtWpEpKyCc9EsZIjZk;25:1KssAjhhooJztg881SCIyWgvmxf+j6mTBap1ULwSCzZEBUC5PR/eYC3pZUxMzhyTY+dYqQvXvqZt8yiB2DOk4XIFB+HaahRiIO8tsVfO3DCTuSbBOxI8mvOgk99IlpO9D7LLz+FxDHfYeh3iD2BDo595F9Ffem8abm+43P609/rFq3+TcSpCOdF6JErhen7wwzIFyVL0Wj3VBfq3NlXxYmIdbHywt8qZ1uXvxfsKs439ZAaqj/A/rMGqEmUGZdktcgV6zfp1FM9q1Z+5+C1JXEUhYYT8xsH2RpkFzzVYFhHehCKLXH1J9N69lP+CoqLUJZFOuxB/+78QIRnB0txF8g==;31:nZ3p3r8Diudp86QUa0v4JE1r5vncQHtB9ycuiGv/+W7aPS1wFNMpPYnGXft1iJiG75DmKDbO4A2i+veusiKqogMWIhyA/hj9segV1cTwe4x1gOWDqa+2+/VHgYs+10S4wu1BMnlSYTAsfkwwx4ZnHT0Vsrb//J4KSqwtvWraaSubiE/4d4XzasgxbfIr6ZR2u4fOrPhcmVXkNmtlnj57M7vQu7A+4B2uXN1qzsOzBm4= X-MS-TrafficTypeDiagnostic: CO1PR15MB1079: X-Microsoft-Exchange-Diagnostics: 1;CO1PR15MB1079;20:PK8O2HBeFH+haLLNWhWnGmhw0sfXH22fl/sXfAxqcv26H3bZRzIo836DEUyOpDob4YSvdq7MO39l09uYBWClk6NPOduXUNnpcAMtMCExfCVDS9tGND1/wrtmo2QjHayNBQzvqPIpPKfdvbTYavEAWoPkQ1S2JYy9/uR0PD6ToRZPHr3cLF428BVFFW08vI8VJneI9Kh6GFdBHFEAQtB92RAXaKEH9lGd/UkclUBn+zN2QPXNxWdmOWHYhy8zAVwzkZR9AgHCD6HntAfXR/8YodY7prYR4crWwMAhMKrLnsMcEy6EDsuefknc/9DcuE+T/nxGFj3migJG8TdVlXYwLwnKc9vyqOA660ogsCstWN0IrWooj14Mc6vrW/4IRcTF4TVg/S7ktBbHv1XEhUBwE7ng+ENKEI+MViiLqzf7Ns8F0/NWkSDJDqnr/2GDivP9QfSmnNPqaQZS5/ux3SjG9/U07jqJrS8WnXamJf+qHzPw7oaiVCSTgMOq+cPqACsu;4:/pastfn9Dt1RGbGlMMy1DU73XbflIU/NKo5ztSLxf8U+urXnDEvz4CH9jyGPEq9MxZaBRrAGKYghQBexSEw1K5U6L29zSV2TZhoXueNo7MwolserG2SJMW/pz3y1FL6igI2n1EIXnW1v12bT/VsWMcO68qQyh0Sc1CUM2zUwiC1s9tqqFPuJTYxXavihdlqDwLnu5rwrB1zZfYGTcpOqdjcZTEpscCLjW0G6Dt4xwoMahOkLeD/Di58m/TguwCBm6r6wMOvnfewcPnZhexyguegIdF5ksdFHsqn+P19Bc9ZKUfU7yvCTFTiH3TM7rtnsdLMOqSwnOfsFrbME7TilU9Uo4T7od1Gi2uXinLgVLQmw4nkjyZyaRlHisSgcSmQvyLQ7B6qhkfbWxL2m2k2StQ== X-Exchange-Antispam-Report-Test: UriScan:(9452136761055)(67672495146484)(211936372134217)(153496737603132); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(100000703101)(100105400095)(93006095)(93001095)(3002001)(10201501046)(920507026)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123560025)(20161123558100)(20161123562025)(20161123555025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:CO1PR15MB1079;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:CO1PR15MB1079; X-Forefront-PRVS: 04433051BF X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6009001)(376002)(346002)(189002)(199003)(106356001)(5660300001)(6506006)(105586002)(50466002)(6116002)(6486002)(1076002)(4326008)(101416001)(33646002)(305945005)(2361001)(7736002)(2906002)(76176999)(5003940100001)(6512007)(34040400001)(53416004)(2351001)(50986999)(36756003)(81166006)(16586007)(81156014)(2950100002)(189998001)(6916009)(7416002)(54906003)(48376002)(25786009)(69596002)(39060400002)(316002)(575784001)(86362001)(97736004)(47776003)(53936002)(478600001)(68736007)(50226002)(8936002)(6666003)(8676002)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:CO1PR15MB1079;H:castle.thefacebook.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CO1PR15MB1079;23:eSvfh7sZPqDKFDJTEv4O/fvF23+U3r8T8FzEeB4tr?= =?us-ascii?Q?FBq/VFZlxgWoZ98nltSEpddQuMi9bi/2KnOUIAkylFPeXRc5uX5YHG07KKFW?= =?us-ascii?Q?y5xrdZ+AZDXDoZMKGq01XNmKs+AEV/nBqShRU8QLUabofqNZrxUWe4E9I+Hi?= =?us-ascii?Q?GpCZIfGgGFPbQ+lEFJ6GEzhVQI0iOC66TtjifvymNqjZJ/m0B4DUbNW5HJRr?= =?us-ascii?Q?J6eo+MUryB+fwRnWP3P5HbQIGQ7eSI640ZjxToopltW3qmVWwraF/J9/PvNd?= =?us-ascii?Q?Qqk+IJ7hRUVtHzEEoEW9+GMSb2BAFmS0f90t1vShFg/QDxTztwItYlgEpkoA?= =?us-ascii?Q?nFvjvLEeHMToQ1d64MSv5gBMcupKFp3fSYO8lzhfVTGMLyCeKGH7daBYyhYD?= =?us-ascii?Q?bUMTsEHgS+UUoRdKV6nwDhyGzUhTub8+nl9NDFhznfLVIG9xXcl0RrvKEkuZ?= =?us-ascii?Q?sN+glpoc7A7LkLSmkJ4ioV64g+UJDSLYRoXfD/BD5rVxmySPQPCtQ2AJ10qB?= =?us-ascii?Q?LwVdEyIT7mUayDeQUfJ6DFpFkXt595xFFYtexeo/WH/JUSad3qqZb50wvqjI?= =?us-ascii?Q?inJZgbZ2a8fDRbWXXb4bKHhZnwJ9FXm6h7xxNsVOueFqZpukLp3mcEA6ok6Z?= =?us-ascii?Q?UCxB5SGVez4lTN/K2wNw4Ibdpz/OBphEZ/xQSeBw0uhQV8FQ9OP2OU+Cibal?= =?us-ascii?Q?IzDg+f/jcRy/EByLrL/hMONCALvTiKq/Gc4Ne/CjM88XjJ4tPo6+/P7k+HAO?= =?us-ascii?Q?TYDYTMzu3FIWy96tDp2mhZZTmSvRUDG5S/C9zCwo/VXoQ0eKNqzhjABjrOAF?= =?us-ascii?Q?TL/+IIu5plQ7BV17XVrcIRig+7uc/pOHdNTvw0p1ZyhO1XbcwMzCsOQCe5q0?= =?us-ascii?Q?cE5sPntpJ4MrTguAknTKYdKd4wOYYcZcBzQ5AOCuwoLkK7aOX0FLkdiRfK4B?= =?us-ascii?Q?SNUPg171aJOXlNwBtf4P/et2CDfknbBBZ+avhALm8uu2eEQic5/WiWXn9JMh?= =?us-ascii?Q?TkHsDqXckH7CtSbML9++deY5NzADcgzLn/Nn+zUTRJqMnjHs4BDM6NG0LDub?= =?us-ascii?Q?I0boPcx5gALMw+h6RhJso57i1M8r/Cq2+/NmWQNms4t3R34zC4uQf5VjbnhT?= =?us-ascii?Q?600tPstkJYJtS/5j2fWi8OE1fn28c1PIXfsj5hafiMhgRNWvAsLzCB6H/6/y?= =?us-ascii?Q?rdUohSTemX9+X5qIbEqilMdarBjOtUzvwLUBBJ3SNMV+EpFrpF2B1fwjNTpI?= =?us-ascii?Q?LgvQLjm1wOVIgGJtNA=3D?= X-Microsoft-Exchange-Diagnostics: 1;CO1PR15MB1079;6:XOfv+K0G6frWYJWzMfUIMIX+e3FoitSgavtsU2p6DGDQFDx99X0PIYQ/JnLX7Gqvn3b1UuZoqTGPndPA5HcVnFpX/g106SZpaNVaowKzndel1Se20hmx5oKKWTg/Vmmnx+/KdF4BRWwLB4KJ9Yglh9+PkpCuDZarM7h1j9LVjGAlguQKtW7LlzSdoO5323olTpSbXuu8lWMl7XsJxxfymiki2D8q+4X3H4uiX6hTwRxOAj9acUkDBg7DLBMVvBfaWg0ezL0Kij0izSQ7C7SXKFY3jdLBx2Oa6RlP9B8O6keJsL4D9qg2eJxJ3aw2BGj1K0773kFt9L1YvoyVULgJgA==;5:socmatyICtmE3cxWL9nqfvjbQg8HEoR8G6HgdRTpZq1fWXp5GjAMxRTM/rFahEBt2f8vD7mk8MgvCXCQAP058LbbjjBECmiLD2XyzGIZHGOMwq4Nz0nAzRXqoJivUI01AzJ8x9EsP3myimBtZ7ecxw==;24:ndpzCdXPvyYjNsp1MVZdLJSE61jZjpxBVHMV6PrK2HW+EE8JkGjsyOBDHjZ+nOFgJfYS/LGIS195r/iPQLOst5vlVXzYv7HjAGK4louWPiI=;7:df/Q4+mwjcmX3xpLkkKeNVzWyC4c1LMlcaRbVdSMEUwBylOZCjD4eBH9pdBKUTwTyGy0K9lq434mBY8faT6oXBI7gWGkqb2UXFT8bNdHiwy+KAA/LQTWvft6gDR8hhnyxvEQC/FoJ5xiFwviLyszv/7R9+9AIJQOUyd0rgOJ5STfMT61S4BqzEN0x8ZVPM+c0x0QFQbnn1wgtz1L8WjhIR9T86eOZeHBv6LGf6ahMm4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CO1PR15MB1079;20:n9FenTcRNNn3vfvJEJg8xTADKxX3ADu6Qsek0HaHgYWspn2qkiTGFoF0LQGxBQVDrHfvbtYRnG6dJl7mBiAZOARmmbyUsOYHT9kjhrlqs/HeIImbd+Cg2FJzJ6QG/fpvGvaYd4Rl9CXJat5tyFWq+TA1RskhMStM5I7A8HnGAkc= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Sep 2017 13:10:43.3633 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8ae927fe-1255-47a7-a2af-5f3a069daaa2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR15MB1079 X-OriginatorOrg: fb.com X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-09-27_03:,, signatures=0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add a "groupoom" cgroup v2 mount option to enable the cgroup-aware OOM killer. If not set, the OOM selection is performed in a "traditional" per-process way. The behavior can be changed dynamically by remounting the cgroupfs. Signed-off-by: Roman Gushchin Cc: Michal Hocko Cc: Vladimir Davydov Cc: Johannes Weiner Cc: Tetsuo Handa Cc: David Rientjes Cc: Andrew Morton Cc: Tejun Heo Cc: kernel-team@fb.com Cc: cgroups@vger.kernel.org Cc: linux-doc@vger.kernel.org Cc: linux-kernel@vger.kernel.org Cc: linux-mm@kvack.org --- include/linux/cgroup-defs.h | 5 +++++ kernel/cgroup/cgroup.c | 10 ++++++++++ mm/memcontrol.c | 3 +++ 3 files changed, 18 insertions(+) diff --git a/include/linux/cgroup-defs.h b/include/linux/cgroup-defs.h index 3e55bbd31ad1..cae5343a8b21 100644 --- a/include/linux/cgroup-defs.h +++ b/include/linux/cgroup-defs.h @@ -80,6 +80,11 @@ enum { * Enable cpuset controller in v1 cgroup to use v2 behavior. */ CGRP_ROOT_CPUSET_V2_MODE = (1 << 4), + + /* + * Enable cgroup-aware OOM killer. + */ + CGRP_GROUP_OOM = (1 << 5), }; /* cftype->flags */ diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c index c3421ee0d230..8d8aa46ff930 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -1709,6 +1709,9 @@ static int parse_cgroup_root_flags(char *data, unsigned int *root_flags) if (!strcmp(token, "nsdelegate")) { *root_flags |= CGRP_ROOT_NS_DELEGATE; continue; + } else if (!strcmp(token, "groupoom")) { + *root_flags |= CGRP_GROUP_OOM; + continue; } pr_err("cgroup2: unknown option \"%s\"\n", token); @@ -1725,6 +1728,11 @@ static void apply_cgroup_root_flags(unsigned int root_flags) cgrp_dfl_root.flags |= CGRP_ROOT_NS_DELEGATE; else cgrp_dfl_root.flags &= ~CGRP_ROOT_NS_DELEGATE; + + if (root_flags & CGRP_GROUP_OOM) + cgrp_dfl_root.flags |= CGRP_GROUP_OOM; + else + cgrp_dfl_root.flags &= ~CGRP_GROUP_OOM; } } @@ -1732,6 +1740,8 @@ static int cgroup_show_options(struct seq_file *seq, struct kernfs_root *kf_root { if (cgrp_dfl_root.flags & CGRP_ROOT_NS_DELEGATE) seq_puts(seq, ",nsdelegate"); + if (cgrp_dfl_root.flags & CGRP_GROUP_OOM) + seq_puts(seq, ",groupoom"); return 0; } diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 353bb590713e..3f82b6f22d63 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2852,6 +2852,9 @@ bool mem_cgroup_select_oom_victim(struct oom_control *oc) if (!cgroup_subsys_on_dfl(memory_cgrp_subsys)) return false; + if (!(cgrp_dfl_root.flags & CGRP_GROUP_OOM)) + return false; + if (oc->memcg) root = oc->memcg; else -- 2.13.5