From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932450AbdHWQxC (ORCPT ); Wed, 23 Aug 2017 12:53:02 -0400 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:48050 "EHLO mx0b-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932260AbdHWQw4 (ORCPT ); Wed, 23 Aug 2017 12:52:56 -0400 From: Roman Gushchin To: CC: Roman Gushchin , Michal Hocko , Vladimir Davydov , Johannes Weiner , Tetsuo Handa , David Rientjes , Tejun Heo , , , , Subject: [v6 3/4] mm, oom: introduce oom_priority for memory cgroups Date: Wed, 23 Aug 2017 17:52:00 +0100 Message-ID: <20170823165201.24086-4-guro@fb.com> X-Mailer: git-send-email 2.13.5 In-Reply-To: <20170823165201.24086-1-guro@fb.com> References: <20170823165201.24086-1-guro@fb.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [2620:10d:c092:200::1:6660] X-ClientProxiedBy: HE1PR0802CA0018.eurprd08.prod.outlook.com (2603:10a6:3:bd::28) To DM3PR15MB1084.namprd15.prod.outlook.com (2603:10b6:0:12::10) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c7e12ac7-93e0-4211-16eb-08d4ea475cdb X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:DM3PR15MB1084; X-Microsoft-Exchange-Diagnostics: 1;DM3PR15MB1084;3:AlE8BYBeoSMaJYRlrfyX5WLbALBsSgmAkEPtjSKIsnEmg2kAMQblKWMR3B0I1Fx1sfy/HF5c9PNQkiUhR2xfDYMGIAOzyWKWiQA3rIyALB/p8kxu9UNgFyspMMaYrO6ZucFeJWVtBfBrZA4HvOoQ8bZutAPO/kIGCQ52ubdt6lPK07OL6DCcT/xheGmAZ2nyxsT0/5cCGL/Y1USO2X5wa/PeD6VdzNABwjSnj0O5Ecyx7XvmbrVp81ckUiVlAWM9;25:Xb2F/Hih5KBehSyFjO7w+BUe812/fiI5VLubhE38ydQcTMrNNCWqpNn/uZdyd9KRxwz6mCFuJIDM9oaicfWIWX2SoANNIVpFDfhxV7C+CgnoO6Gbe8xZXakh5pwKQfEHA1Epv3iCStJBGtRdgOkGgOKQoUHJ3sugjYVfysvmVsjy5VA4nu7hXrOiZscFU+3U6SmE0NeqYRfzQTm2Fan+rCROiur6mF0/5wiozP7Akho69G4iMkkqtDzz8JtHwFoC2p8rxja+Ccsx5bE6/wG8w+8W56g2oF8R9LMH9ug/FIvwggFO8x1PGjS5wPkOi//UgYd4HIBN84SItCL8uZ1xXg==;31:TLcMfrv8lSwl13YgI58YiLmJELXPlIUvn72EqGW2cE2n7UOVO/mSmJYutO4iI0Zx9RH+U/b6poBcaSKDejmiVvQATXRwI+4mbF5tFB3O666CP4hzjvAVceW5Fq3QDcXO90f9Rvevn22bxFalE09nK3eSqqIWdkBbtSaMQeNO8FqSXQZe58BpjT8Fw+p3kpnid8zZiApuXZMilFskruEYrdcLV4q+eDBwoPH08QK8Gvw= X-MS-TrafficTypeDiagnostic: DM3PR15MB1084: X-Microsoft-Exchange-Diagnostics: 1;DM3PR15MB1084;20:dFdDwLrPs5mQFqlxqD0yGO96H8gZvx5mdXFsVTiX0Hz3skfxMMsYswE0XFYIMY75RAGlFEDxHdG+SkwTWJzzgyC9+lYXJJPzErFtrPtl0UkYQSK1J4u8A9T7Gf0vEBemX1BF8JCxiaivi9er+A9ncNp58W9OWiyOx2T3qo4A6XRZZxRmLbXRY0ZdKL4OKeOfpOj1LO2MU9gpW2+fQBuU/GrbJ/FeXxMxHciK+O3MZRgCcxwMsS49A6ooVYbc4vgodYBcF7ue/ItT7e1rs7jYDkZSb6YUDUjMzi3h2iNX/i2aMRhhGz4PITVBjK2Gl/8fqhesS6z5IxwtPPbtMFLLoj7FyJXDd14ruEOPjgV9cOSi9jYAAbc9VwJhsgP8Fo2zWaQSLCJGlVx30vL3Ze/lRfzKemYpuT+0uCkALVfRZVDhwaKA+xvMZNhvfuIeOLeVZ7khXTF0x59oKnQsGwf88Q07GqZ26YpTc2MkBwqhD/1zmyJe2OSnbnmKntGr5UfF;4:n7ajCaogsKNldr9Oo1KnKHCInvGUZFGmmhbuHM8hqQWp6QswdFTA+xjXT1wL9quAe/CwTdBBlsxGQuithBQ74leNjzzYxDBq1cBbaCcln4ZJH0MubfiSwYfCV9OGYkBMzoDX9t2eUSXe0mF0oJnbuKnstnKp3Gpg0asWHO6eTBkBcLD1bPDe+R5ff4YlQrM6JL31/C7c/fPptCg/mRZlMWz9oMemgop0+5Ja32hFxQj7lbyGRn+EOgfg0/wHJNV+Pep+meBn9prsuoFbnabLE7OKfKOPF0XmIwrWVx8RzaUOT4/JHYzYB0qm0E9bbAnbPTNsc928kU+a7GHdW0l54k+bfZCQMMSGk09dKFpS7cWwkf/oJYj8aPDT17NhNcDnZ8hpsl0nkvpDwMrlXScmFw== 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)(601004)(2401047)(8121501046)(5005006)(10201501046)(100000703101)(100105400095)(93006095)(93001095)(3002001)(920507026)(6041248)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(20161123562025)(20161123558100)(20161123564025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:DM3PR15MB1084;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:DM3PR15MB1084; X-Forefront-PRVS: 040866B734 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(7370300001)(4630300001)(6009001)(199003)(189002)(76176999)(68736007)(305945005)(33646002)(105586002)(8676002)(7736002)(53416004)(4326008)(81166006)(2351001)(69596002)(50226002)(81156014)(2361001)(34040400001)(36756003)(106356001)(101416001)(42186005)(6116002)(7416002)(25786009)(6666003)(6512007)(189998001)(6916009)(50466002)(6506006)(5003940100001)(5660300001)(478600001)(50986999)(48376002)(47776003)(6486002)(575784001)(97736004)(7350300001)(1076002)(2950100002)(54906002)(110136004)(86362001)(53936002)(2906002)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:DM3PR15MB1084;H:castle.thefacebook.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM3PR15MB1084;23:u4PVHIEv0djSdOsiPIaNwp9V/wUkkB+k3NHCMM1Lk?= =?us-ascii?Q?G2whw05n7K/+1bP1bm01W8LPPCxsz1amAUeFhtngxjkN6IxoczvPLsI9T7d0?= =?us-ascii?Q?97XQB+K2x5KBA1TTkNxLWonScN7e1GzUCyTEqImmrsWNuKbOkpa00H35sHlT?= =?us-ascii?Q?oasL55oNY6vaaaDNWtH57qYysMC0K8S8oWLq8wWjJrG09/20QWO4DI5f9slk?= =?us-ascii?Q?Z7mHxj8SwT6ic/5Sr5Z0tOQ5tadaMkWiANEz7ZbkLGtv6zOPYv623sh+ut7n?= =?us-ascii?Q?4WppBJsQC/XaBuxkKAkuzrYulDEhOclDvHNHTUXxnFQEWfDNZ4Gtyj+aBOJV?= =?us-ascii?Q?P/NVhlKoZAV92QCEW7ClpvNh+RyAiVoXpGem6pESgGVQ/ArojgS9nsiR07QP?= =?us-ascii?Q?zu6DB04LGk5M0QKxaH3t2jjqeDfXtmNdbqDntMh7dCNu/1mumNyaLm+r/GKV?= =?us-ascii?Q?ONQ+VEnAv9ISoIGeVZ4/ghbm34SJYarzOOLCBKYq/Tt/I07BaXbZ3IC1bPV/?= =?us-ascii?Q?Tbi8HFY89BPANUrp3IDEePfJZ6GkkEZ3F3dz5oM6lYTrb7fSk17P8NzcrNCv?= =?us-ascii?Q?1LBBZZyU6ORLLZ8JyBpaeewsGpqIkExEkEjLC2K6h4p7RkHjtoO7JYmpRlLh?= =?us-ascii?Q?oPJ110oHhSCVrxWQp8h7DFTeKd9nr1hr7DDSYAcAfxlrigsKi8dDaxrTAG/g?= =?us-ascii?Q?9W3ULmiet5/OWCQObW07h/PXQQIbLj+ulr1LIz4If1sC9vNxuyKcl0k0nL9m?= =?us-ascii?Q?Xa7OUAbpSpIKcvNkjYb2TdPIW5ILxWlzN5ufppc81Mo2SnGquGSJi/gQID+9?= =?us-ascii?Q?7W8Sbj2Tn4xEyGf9h12foIvkbThRm6AJuNLE3qfKnAaega+zObzGh+pkahAg?= =?us-ascii?Q?rq6669iQa6j4kxdengVTwDqYmLZqF/0ZCcd0SYP6XZ1mlxF4/q+1Y1F0RFjD?= =?us-ascii?Q?ai6yhP+qkxE/958Mnmkm4XG0wjLyqE1fKQa7UfPysN1MqjiPFA/0OaqzJVSZ?= =?us-ascii?Q?/HfS+kCapOOtxR+kNdZjaNITq7/6F0ACYq0u4+jyOvtfs3H1+7HqM0bYYmvR?= =?us-ascii?Q?xhfqdIH9ipmnNkUY9csQmydzKkwHhkBybrcOD6oVsN60JcwcfALaR4NmqWDt?= =?us-ascii?Q?Ys6U1JSNnSH2aE7GQA85OQin+5WOqoKvVN8nyoaKz/F4YjC0tjPm0lUWgdpB?= =?us-ascii?Q?FtZXZqXQkUSPp9LznRP2giCqEBINjctZcg6q/lVikjzBkFrSrGRd7H1cJOM9?= =?us-ascii?Q?o3f19AinXcivK04eq8=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM3PR15MB1084;6:4nvBZ0/CL7yCpxKDe93agg8dUDmNo2+a+18uc3v7V33PMduDr2reiPM59OIv8jpmSRWKDDEEos1CH44NWmRCMdOqUdV2pnqrNXauXu04PRZBBDBuK3Jpf7G0Hi/ggpoJmHGATpIWkx+2PBC6TiGhvnQgRm79lRTAiLW9IxTeupHSQu2rGtAsJ44lF1bg7tn5uvOrJDvewY4uYU2ZIXOC3T/hfGOm6nBKRZ/9ky407c2BqMK1inmxXOAIamKTe2GYNw3pcfxeYNPoT5qhe+gkPH8jLt/uWsYc7s4BT9k8eksR1X7vYsdq6endBZyZUOqWXqlo8QiuDOkKwNRjcfdQBw==;5:2Kx1mpxg/khDdO9jwXpcJTztFfOiY1qlgABhRJ9uMCjROO9ahplWzdTYUNODncJkocnPbjZGmPkgpxoLOJF5008uRmpKpc9gMxzSM1n5FjEip38mpiFyis5yFy86uOK/2BhOUHjd7TpxgpifZa0TNw==;24:F2GGYz77wPxX+lbcFBbOZ6CGhCm0pHZgJZ8S35URGv7WYtDrT6OKuXYHVgsd0BvEF+ZnTQKwp5NbBS3bcT/6Hy1Dab6r3JCxHhvBQpioSt0=;7:+jrF+dWNOJBUAyq+qsVb38oFm6LVRukCnOBYRpvQexqvlujbRPvxUq7jIc7VZWsOd5gQ+nB3MmNix89Ykr9ahbfzV4/CuHmO09W473fkzDMHfIVdQj2l0LA3HUHoXFritCSXmcdAmRqUrr1gCnLK5WZ4EYfiUiTwxAKwEmiPekQulzD3djfsvpcFPycfVAv/VpOX5h+6SNUMik+OY98IeoW4K2ybrNvNE67dHRXmnlo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DM3PR15MB1084;20:qmYLc3suAWd/zHdxVbBDZlIIsnTkVgipN9lOsNHChH1a0ovH2LYYNWScH2AIPyO0kvPIQYRgA+hg50+v4gj4vHNa30biMDPYgfCTdgV8VvKTjQh5pJ31CjIxpG2qEdJEQt3MNz5vY4JzIasiRd4f43MT126fbA2EV9hAgWj/d0w= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Aug 2017 16:52:36.0646 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PR15MB1084 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-08-23_07:,, signatures=0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Introduce a per-memory-cgroup oom_priority setting: an integer number within the [-10000, 10000] range, which defines the order in which the OOM killer selects victim memory cgroups. OOM killer prefers memory cgroups with larger priority if they are populated with eligible tasks. The oom_priority value is compared within sibling cgroups. The root cgroup has the oom_priority 0, which cannot be changed. Signed-off-by: Roman Gushchin Cc: Michal Hocko Cc: Vladimir Davydov Cc: Johannes Weiner Cc: David Rientjes Cc: Tejun Heo Cc: Tetsuo Handa 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/memcontrol.h | 3 +++ mm/memcontrol.c | 52 ++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index c57ee47c35bb..915f0c19a2b5 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -206,6 +206,9 @@ struct mem_cgroup { /* cached OOM score */ long oom_score; + /* OOM killer priority */ + short oom_priority; + /* handle for "memory.events" */ struct cgroup_file events_file; diff --git a/mm/memcontrol.c b/mm/memcontrol.c index a620aaae6201..a173e5b0d4d8 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2749,6 +2749,7 @@ static void select_victim_memcg(struct mem_cgroup *root, struct oom_control *oc) for (;;) { struct cgroup_subsys_state *css; struct mem_cgroup *memcg = NULL; + short prio = SHRT_MIN; long score = LONG_MIN; css_for_each_child(css, &root->css) { @@ -2760,7 +2761,12 @@ static void select_victim_memcg(struct mem_cgroup *root, struct oom_control *oc) if (iter->oom_score == 0) continue; - if (iter->oom_score > score) { + if (iter->oom_priority > prio) { + memcg = iter; + prio = iter->oom_priority; + score = iter->oom_score; + } else if (iter->oom_priority == prio && + iter->oom_score > score) { memcg = iter; score = iter->oom_score; } @@ -2830,7 +2836,15 @@ bool mem_cgroup_select_oom_victim(struct oom_control *oc) * For system-wide OOMs we should consider tasks in the root cgroup * with oom_score larger than oc->chosen_points. */ - if (!oc->memcg) { + if (!oc->memcg && !(oc->chosen_memcg && + oc->chosen_memcg->oom_priority > 0)) { + /* + * Root memcg has priority 0, so if chosen memcg has lower + * priority, any task in root cgroup is preferable. + */ + if (oc->chosen_memcg && oc->chosen_memcg->oom_priority < 0) + oc->chosen_points = 0; + select_victim_root_cgroup_task(oc); if (oc->chosen_task && oc->chosen_memcg) { @@ -5426,6 +5440,34 @@ static ssize_t memory_oom_kill_all_write(struct kernfs_open_file *of, return nbytes; } +static int memory_oom_priority_show(struct seq_file *m, void *v) +{ + struct mem_cgroup *memcg = mem_cgroup_from_css(seq_css(m)); + + seq_printf(m, "%d\n", memcg->oom_priority); + + return 0; +} + +static ssize_t memory_oom_priority_write(struct kernfs_open_file *of, + char *buf, size_t nbytes, loff_t off) +{ + struct mem_cgroup *memcg = mem_cgroup_from_css(of_css(of)); + int oom_priority; + int err; + + err = kstrtoint(strstrip(buf), 0, &oom_priority); + if (err) + return err; + + if (oom_priority < -10000 || oom_priority > 10000) + return -EINVAL; + + memcg->oom_priority = (short)oom_priority; + + return nbytes; +} + static int memory_events_show(struct seq_file *m, void *v) { struct mem_cgroup *memcg = mem_cgroup_from_css(seq_css(m)); @@ -5552,6 +5594,12 @@ static struct cftype memory_files[] = { .write = memory_oom_kill_all_write, }, { + .name = "oom_priority", + .flags = CFTYPE_NOT_ON_ROOT, + .seq_show = memory_oom_priority_show, + .write = memory_oom_priority_write, + }, + { .name = "events", .flags = CFTYPE_NOT_ON_ROOT, .file_offset = offsetof(struct mem_cgroup, events_file), -- 2.13.5