From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751919AbdIKNSd (ORCPT ); Mon, 11 Sep 2017 09:18:33 -0400 Received: from mx0a-00082601.pphosted.com ([67.231.145.42]:45826 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750903AbdIKNS1 (ORCPT ); Mon, 11 Sep 2017 09:18:27 -0400 From: Roman Gushchin To: CC: Roman Gushchin , Michal Hocko , "Vladimir Davydov" , Johannes Weiner , Tetsuo Handa , David Rientjes , Andrew Morton , Tejun Heo , , , , Subject: [v8 3/4] mm, oom: add cgroup v2 mount option for cgroup-aware OOM killer Date: Mon, 11 Sep 2017 14:17:41 +0100 Message-ID: <20170911131742.16482-4-guro@fb.com> X-Mailer: git-send-email 2.13.5 In-Reply-To: <20170911131742.16482-1-guro@fb.com> References: <20170911131742.16482-1-guro@fb.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [2620:10d:c092:180::1:db0b] X-ClientProxiedBy: DB6PR0501CA0003.eurprd05.prod.outlook.com (2603:10a6:4:8f::13) To SN2PR15MB1088.namprd15.prod.outlook.com (2603:10b6:804:22::10) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d1299f21-d98a-495c-78c6-08d4f917903e X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(2017052603199)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:SN2PR15MB1088; X-Microsoft-Exchange-Diagnostics: 1;SN2PR15MB1088;3:/HxQ2hwnGWnCMIgQf2Wp/lvNzVhMMWxuktSD4Om1W5Z/CNrMVwzS/0y5OI7RSUJJw1ZKjR+UhYk8NwMTYKNkag5MemE78dLThi9GDj1w+KcwJ2HwmGatBzhdl7A1i9zE1N8liPwmC9niES1cSGDshEF9rAst0u73kiZE6UJx8tz07T+wYs8J0K6b4ycCUCll6z0bIwnwyT9QKq+EIJTKNLYvH0r8a8V0uYi/VyqJOqjthVL4Z4wQpuIKCAj3CaS+;25:K3fVopYZdy6ZTtAup2QEmt8fBdFRQcCUQRsphnl+QiUN9nuu+4eSh3EO2NPAxyv8taM1zwKuLheQ8teTiMLt54oLRZYp7wskv+ZL1R6M41IjmScwAr3ZZucgddJeFm+QHpMSC+hAqDJvghb7mqAVO9qPzbnDSB6Q0G+j/tJHXt/SzDrYJ/pMPM0Wh5rIto1pUDuoxInYxUwZE+hes+hS31RJouNG59x6ng8jbwO9MGkDQpOXIl627YWItqxKe/wH7BX4AYuugKrZDeMBrHzpAukXoWYY0DYjAAUUL2LRMHE3D/+bz0RJCuRdSf7bAkWVkqAF9rC8swsGX0tIVGoT6w==;31:J4kMxjROBSQ8rKrDUpfLIZXDMk7zfyNpxTmm7pMmEThLBiTAvZgQzLh3HrwWZrJiuCwJ6bKTxxLtluTCiYqE8OPrTFAJq3kPVSXGpQCs2hObEnx8ufnx7F11wS9UOoRPAti6StElTXVLvNaMmdJlVl0zNDCebXEIBPV//Ih7cvGYDLB9mjTrgVH20MBqF4xEEoi2+OA+R3n56QN34PyQw1uIU/txrE5/nm0ZSaQOt20= X-MS-TrafficTypeDiagnostic: SN2PR15MB1088: X-Microsoft-Exchange-Diagnostics: 1;SN2PR15MB1088;20:YJBVJBCRIZSe7ICJeHvfzbpHuIFzhZDrl5s2AUOpfUKe5OL8Ksxb46MxpQ4Q9d3+mzqMBOlZWD9FPSao9/6ki69mhZreiAuIRETczTyt6asKsBYg4ykbXgQLr25VUR1UGVsxM655qmZc1YC8Nv99jUl07AVEFsmjV6gXcVHhxph1kFCRzktvtXGYLLaX6UU530cLB+aCICHXPnNKjhlKOVjx/LUQBohBztvATvJx4q6oPVi3H243ct9e8JE3lf2vb1c5xmU9nuzQ2xmytX6CBajteJAow+fwFYL02WXNrrJXdASYRezVKZXSoXWVBTWyhyFcD4jHQNLcWRSjjsXbhvAVlfLFUbO7JzvWYkttQx4OjrIdnFvHb7SN4IBKoL+sxOTr34mfGtXnUZRoz6i2VNxMKZOd0of1PIEBGXCNW3FLH0U6uMS1i8mkIlowSBNZP8EvRsg98xSW4tmEN+/5Efc353cCdFld/5V4l8k8rhzxvT1E7EWO1siOResJjQpM;4:d9qk7XCpYPg71RmANUszxHIuPPJEmDNzGXts+CrAUBCAg9D/UcJQJ3tjNK2/3y4rCo0c8U0x+RRDHXXwclox323gTQtVkM63zRsP+bj4Fho+25sAzVKmm24u+2311WZxSVrqNb6NzXuYeBNddbzVKiGPm6HPNlDf0ahsRd36vASYIM226ACdgBK3NVsE4l2GCnIUa3mJCX3EX/6BqOPJpdZHZsVLNERb0iCvQVQS3ntyHglQXREoEKRAc4/0ODhos31kbhJVDK1S95QkTVfCEsBrIAemO67HzlDX7USNeT9sFUfdqo0aePhczYlcdmHyurldjEnUZDDROyAxfsnTDBlQLZo/bvgIRmLOgBQ04XHSSxpA0Mb7XFeLlcXqQpY/3L7ATxSW3UVqSxdKlGQiKA== 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)(5005006)(8121501046)(10201501046)(100000703101)(100105400095)(93006095)(93001095)(3002001)(920507026)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123562025)(20161123555025)(20161123560025)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:SN2PR15MB1088;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:SN2PR15MB1088; X-Forefront-PRVS: 04270EF89C X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6009001)(199003)(189002)(101416001)(105586002)(48376002)(110136004)(36756003)(4326008)(50466002)(305945005)(34040400001)(7736002)(76176999)(189998001)(50986999)(8936002)(6506006)(39060400002)(47776003)(86362001)(6486002)(53416004)(81156014)(8676002)(6512007)(81166006)(42186005)(54906002)(50226002)(6116002)(53936002)(5660300001)(7416002)(25786009)(69596002)(2906002)(97736004)(6666003)(106356001)(68736007)(6916009)(2361001)(5003940100001)(2950100002)(2351001)(1076002)(33646002)(478600001)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:SN2PR15MB1088;H:castle.thefacebook.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;SN2PR15MB1088;23:F6uN/HVhSTGxjoQ1F0CR4tMqUEJDoeSggRJSvBo0r?= =?us-ascii?Q?GeVvd/NapszAW1kbHTZfpKz2NQ5ue4voOAfMhdGQE/90ORMV1VBeiUIxyLlQ?= =?us-ascii?Q?cA/q/u8m67qHR45JoDkkz3eBOaFAYgKzK9WcxjhEbhMdZU6Bk+NW4l1Gk6Jh?= =?us-ascii?Q?tmgnnbGqSUOgCZFrc0XURAtToAT/GqQg1F/KjdFSpNR8sZCydNyj918w+slt?= =?us-ascii?Q?Dvxu3Jtw5ZPnTY3CYKN6XKuscvsKv/Jt1kdrcKcahp164M0q+d4lscP43NLF?= =?us-ascii?Q?QRkCE4vBKPFmIyOCbdHGGCZVqxwovo6Lv2h6zIlB/3eIDatZaEQjx5/FL1Aq?= =?us-ascii?Q?mnu+jFmwc/93J9aaDTD0quEq4TmqlaYNOBWurFSxJJr+xWySocnuY2V5qJac?= =?us-ascii?Q?3n0HgeF8kXD0fTpS+OY6Oc9kcMFoZlBo8KURxXZWkO+CMr1MzCyVf+9qnz2J?= =?us-ascii?Q?waz8A4/dFFRCiDtHbNT1yezWmHX5j2xlH5OIqoQjsg4ksw/xiVmxEc6kzxF6?= =?us-ascii?Q?+K+VbB6VGU6oD4W2yK1UJOIMSHJYHsCuoEfNSt9/1PJ8b9MSGWeZjq4ih5Mz?= =?us-ascii?Q?+fKByw2yagbEDro0RLrKbSyD8GT4kY29DQUnoSk2ZGDVl/OIIrOPfiwL054M?= =?us-ascii?Q?bo5VZaXmdOmhwkUg3KbXWAGotIJCmWdXPiq8LXbW0I/7gnVMdpjGZi5s9Wwz?= =?us-ascii?Q?MVTm3GyeNhMdZ4rJZbtKKc6LWGb/+gzDsEHms0HxJ+z6flQLsq/HmSsa+4VO?= =?us-ascii?Q?/5FtRmHinSF8BpNOAyEc1yNg9poKc1+vrRTlzBzhlyKiMt8mxZCIhpMg1+7l?= =?us-ascii?Q?0yYXdD/RLAWJ3sh0LrvApAOcuJmiuof6K99h/GAqiu9bDLGmeTKjOyo/mfUS?= =?us-ascii?Q?9USjxYDkyfzlCliA7decvpPHECnHhE0Y+/VwT9fLQEb8TMP9VKz278U94khQ?= =?us-ascii?Q?0xamlINNlnTlOvo14lKlZAZvY/ZkKebFF+GzPTK7aDoEX4US89owqSCt65F2?= =?us-ascii?Q?qjmR0LrlWBVoVIrkfOOd5HnIAUibZ/nMFdRly+G8EHLqay09gxW4pNUX9XNl?= =?us-ascii?Q?b9+NEfyD0gRpjPp0ydsGzWUzFB7SkYLc82q/Xy5sOofioU7ewbZwiaKIqk9A?= =?us-ascii?Q?5wY0sw+0K4h5OsuJFWx6n5wEXerkp4Rtm7I+1vFjYNopcb/95VSM9QlvJNgN?= =?us-ascii?Q?+tPuUAOabFJgMc=3D?= X-Microsoft-Exchange-Diagnostics: 1;SN2PR15MB1088;6:3MDu5Rxoo50cCG9nUFS/Lyj6rMMdvdi9Ihmo/2D0mmu20q/v+xdwqJeBShYBY0YZTpeb9N9RZ+2y3juRnpj9p2Ki3XdsTOaV87bRzkRTGNoCFK/poL7TEmNzpjDwv+li9nCevBk9o5m5XuNj7hyPuiStar0Gd+xXL2LfKBJPodl5AkRyjq0UFGhX7fx9s/ElELqfMQn7q1qkhjleeInhYE9AhqDKZJ4NdPalC26LUcjU0MAV0xGPZdDRLVO2FNT1KBdigggCAa/vAJIpTcL7Zs/rBXxC+6hKDHhyxQ2e9t5TgtlF4tuwCbQAVDbW56n+6biKQir6VTpF3yHBUboZEQ==;5:qSHYE048+o8n0rpSj6hSntdrBQ/bytdzR4IcUM+c3BVF251njBxLoujrmKrQIgiCYvyrz7YWukWUexHvl3HBSpKXjhsmRvhuXsupYdtzJWrLJVeSXeCnltHof92OWA4HEt8jl/zbbY5ZoQucvlu94Q==;24:W3yQ6fbRaNyC6EwCWyZI846UNfk12EHiO44AR963/kmK/fWFu1dKBANFLnHXytAPsJ42r+9L4FIdkAdLxepyAiKrBAJ17U5Pf2B5jcWSqVU=;7:oA9bUKYP+THvUODRbUD+8bm18nqmPoi/q4V0vZZe0S9Ip6vwY75qOYjHOtFR4iDveoNbgaxgP+v9je4JGhBaYcjBZjPwSApymOczdS/vDf5bOYrUTXRJN2sIuQiqv9FWY8KE5zB8FPSfnLZPDd5645IRkQ2Jw47cbyFSsO9goQiWmxynJsl4LfnNzfz4q3PGgc7faGT4OKQq3KbunuB5xsAkE9QzDezgOVsD501j7ac= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;SN2PR15MB1088;20:K30bvMfW2FUMyhA64U10gzoNWDn2iufWSuSVfTk+MWRvl0Eu9HJYlXBnMLeg6kp+E6J7YoVNX2aow9QeijgHUJru+xF7Zg7+r8iLHzunDqaHHZsPw7l861Uz/v9s7e0uRkORq8+EV33tkitChdsTf6QXaJkfWuvNhtpqlEkJHDc= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Sep 2017 13:18:14.3315 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8ae927fe-1255-47a7-a2af-5f3a069daaa2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN2PR15MB1088 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-11_04:,, 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 ade4a78a54c2..db4ff3e233a9 100644 --- a/include/linux/cgroup-defs.h +++ b/include/linux/cgroup-defs.h @@ -79,6 +79,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 d6551cd45238..5f8a97a233bb 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -1699,6 +1699,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); @@ -1715,6 +1718,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; } } @@ -1722,6 +1730,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 da2b12ea4667..d645f70cb3a7 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2871,6 +2871,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 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-yw0-f200.google.com (mail-yw0-f200.google.com [209.85.161.200]) by kanga.kvack.org (Postfix) with ESMTP id 6BD276B02C7 for ; Mon, 11 Sep 2017 09:18:28 -0400 (EDT) Received: by mail-yw0-f200.google.com with SMTP id p2so4058711ywc.7 for ; Mon, 11 Sep 2017 06:18:28 -0700 (PDT) Received: from mx0a-00082601.pphosted.com (mx0a-00082601.pphosted.com. [67.231.145.42]) by mx.google.com with ESMTPS id j3si1955608ybm.471.2017.09.11.06.18.27 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 11 Sep 2017 06:18:27 -0700 (PDT) From: Roman Gushchin Subject: [v8 3/4] mm, oom: add cgroup v2 mount option for cgroup-aware OOM killer Date: Mon, 11 Sep 2017 14:17:41 +0100 Message-ID: <20170911131742.16482-4-guro@fb.com> In-Reply-To: <20170911131742.16482-1-guro@fb.com> References: <20170911131742.16482-1-guro@fb.com> MIME-Version: 1.0 Content-Type: text/plain Sender: owner-linux-mm@kvack.org List-ID: To: linux-mm@kvack.org Cc: Roman Gushchin , Michal Hocko , Vladimir Davydov , Johannes Weiner , Tetsuo Handa , David Rientjes , Andrew Morton , Tejun Heo , kernel-team@fb.com, cgroups@vger.kernel.org, linux-doc@vger.kernel.org, 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 ade4a78a54c2..db4ff3e233a9 100644 --- a/include/linux/cgroup-defs.h +++ b/include/linux/cgroup-defs.h @@ -79,6 +79,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 d6551cd45238..5f8a97a233bb 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -1699,6 +1699,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); @@ -1715,6 +1718,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; } } @@ -1722,6 +1730,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 da2b12ea4667..d645f70cb3a7 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2871,6 +2871,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 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roman Gushchin Subject: [v8 3/4] mm, oom: add cgroup v2 mount option for cgroup-aware OOM killer Date: Mon, 11 Sep 2017 14:17:41 +0100 Message-ID: <20170911131742.16482-4-guro@fb.com> References: <20170911131742.16482-1-guro@fb.com> Mime-Version: 1.0 Return-path: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=facebook; bh=2VFbBKM9g9ab3LYOcU37w8q84W9U2qj8ZjCMM73wHio=; b=RmreQKwy3srFM6VL85wrHov1X9Kzj7hRK/dkUGFn1afW7abzbHOg6uFj/I5FOk15KmwN jiV+yUGiRorHemXgwU/n6mrAxDU2waQg3NUFdJ9nD/SFvSokjJCbwgLh71vju1rQvbaf RrKOW12+pgc9BFt9hcoMcBG6PiRbuNGBScA= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.onmicrosoft.com; s=selector1-fb-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=2VFbBKM9g9ab3LYOcU37w8q84W9U2qj8ZjCMM73wHio=; b=agBSNHWdfwmnHpgKDHZknealfwB8as/nhVEYWn+IuwAnBIAgu1it50u6y7npqPPkY4T0q4f2TfdxfHsAaaaew5G4PP6hxcoM7m/P/Pc1awB8bcSTSa8gyxKslhrJzg+pCGYBlkWhafV25uYKAdvmqLozcPPJ94bA6n+TDfm4Z8I= In-Reply-To: <20170911131742.16482-1-guro@fb.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: linux-mm@kvack.org Cc: Roman Gushchin , Michal Hocko , Vladimir Davydov , Johannes Weiner , Tetsuo Handa , David Rientjes , Andrew Morton , Tejun Heo , kernel-team@fb.com, cgroups@vger.kernel.org, linux-doc@vger.kernel.org, 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 ade4a78a54c2..db4ff3e233a9 100644 --- a/include/linux/cgroup-defs.h +++ b/include/linux/cgroup-defs.h @@ -79,6 +79,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 d6551cd45238..5f8a97a233bb 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -1699,6 +1699,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); @@ -1715,6 +1718,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; } } @@ -1722,6 +1730,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 da2b12ea4667..d645f70cb3a7 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2871,6 +2871,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