From patchwork Mon Jun 17 23:12:06 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shakeel Butt X-Patchwork-Id: 11000663 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 612461395 for ; Mon, 17 Jun 2019 23:12:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4A243289E0 for ; Mon, 17 Jun 2019 23:12:22 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 263D1289E9; Mon, 17 Jun 2019 23:12:22 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, USER_IN_DEF_DKIM_WL autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 94C9A289E0 for ; Mon, 17 Jun 2019 23:12:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1F3648E0004; Mon, 17 Jun 2019 19:12:20 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 1A24B8E0001; Mon, 17 Jun 2019 19:12:20 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 091778E0004; Mon, 17 Jun 2019 19:12:20 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by kanga.kvack.org (Postfix) with ESMTP id DCC8F8E0001 for ; Mon, 17 Jun 2019 19:12:19 -0400 (EDT) Received: by mail-qt1-f200.google.com with SMTP id g30so10720762qtm.17 for ; Mon, 17 Jun 2019 16:12:19 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:date:message-id:mime-version :subject:from:to:cc; bh=TTbfAoCu4GcLQkkLsQIxh3IHCYFVhiWbbnmqLqGCZT0=; b=kYUgMO7Y+8+Hx6p1F7WIhpvyuGmiEKJkmkujLOp8XkM4x4W1istsT8yVolPQJXiZ7a NJVIRkkYsU6SJiuOCDlPkY/k0ExFlcT2VB1bC1KqfyTHyqJWmdCnODLWMC/yKkf9RJMM WzJ1WUZbwBOyiYKr4azmMv8c21VOrXAarW7bZi6UshOfq4HeaVMFGyHbpBMl3GaiKGBh YyZ1DhWx8fnDFlOqqbpQkEDb6aZiUKwx0o9e6UiQf35gwEW5yyiQ60YjmmMJXg4LEovx W4kwe1csFvdEHV9CMjNvScnXk41pjQ4KM3HptJerZDOwXPZjFeM46CCK9xd+96dh8EUY s5OA== X-Gm-Message-State: APjAAAUDzQtDVu33lOHeX3cfGjSEGyZGoSVZacQlsFiS44WOUsxlN3Wh 1lOg7jZ3ZpoZYPxukTerormd0Dqx51QZeomldeYsj47+HX8SrkbYY8Z+RC+fl+mCnfRg9xokbft j+GPYL4v2Xyj/vu3kPfoGDlzbbwfMOODDGgdeQMnuhLBSShwyZ21hJuxUP1W6zB0OFA== X-Received: by 2002:a0c:b59c:: with SMTP id g28mr24707174qve.244.1560813139547; Mon, 17 Jun 2019 16:12:19 -0700 (PDT) X-Received: by 2002:a0c:b59c:: with SMTP id g28mr24707139qve.244.1560813138913; Mon, 17 Jun 2019 16:12:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560813138; cv=none; d=google.com; s=arc-20160816; b=HEar1Hom7Zz7Sa8uC1LdL/pP52bB2B3ocati0JcpXRQfEylgaid26bu21TEzuVE6rU 06tuTYucoLuw39Tbi4E0dY2QwyA/38h07km0X4VMVqj9yejRM72IoDtG88NShTlQZiCl o47r3+VC5Kguz45HVJW8izAtQS2lwhMgnItVhXt2wx7PvqR+h26uXJQq97pzcPj6lEu2 Gxuw1JVD4x5tNCtNsCn891CTXwUHLSjpeh0dZGnCzao4JIKXOpPP1Z54uFJcXK+yKsag uZrGDqfqpa3JYjF4gkn2Bq1UjWXb+R9JrEngvownmnnT2V/dulggE8VryluWrJa0/+XI eShg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:from:subject:mime-version:message-id:date:dkim-signature; bh=TTbfAoCu4GcLQkkLsQIxh3IHCYFVhiWbbnmqLqGCZT0=; b=gaJUOkrV/YZiGFI6Lk14VWZK/F7wqucs1y47d7ib/cj1QUj0YWhLItuqEanGQLKtNk xLgyo1jFNzfSCnEzgjXS2iWIw5YZ6IIavxKB4DPXo7tHzABoJXKoRHJotzeMpyIVttqS jDqiEjB33mFVOplJGrclNGLaFXlYs/oB5JinxEPNN6fVsOz1cuPrBtXzdUjzxdxviXTo zZry8tMb7+ExwDTSRFlXh9cJqOtKx9ZId6ixo25ACw/KWcSYKFcmqXfjO+JW7PsqV0aM uuAdWzJneSu3fyj+ICg9Qh2wsLkFn1Rvj40n8E7Lj5Q4bq/D9trii1wHfjGuVYK1n2zp FuLQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=jZfxRwku; spf=pass (google.com: domain of 3uh4ixqgkcj0pe7hbbi8dlldib.9ljifkru-jjhs79h.lod@flex--shakeelb.bounces.google.com designates 209.85.220.73 as permitted sender) smtp.mailfrom=3Uh4IXQgKCJ0PE7HBBI8DLLDIB.9LJIFKRU-JJHS79H.LOD@flex--shakeelb.bounces.google.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from mail-sor-f73.google.com (mail-sor-f73.google.com. [209.85.220.73]) by mx.google.com with SMTPS id z28sor4196639qtu.73.2019.06.17.16.12.18 for (Google Transport Security); Mon, 17 Jun 2019 16:12:18 -0700 (PDT) Received-SPF: pass (google.com: domain of 3uh4ixqgkcj0pe7hbbi8dlldib.9ljifkru-jjhs79h.lod@flex--shakeelb.bounces.google.com designates 209.85.220.73 as permitted sender) client-ip=209.85.220.73; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=jZfxRwku; spf=pass (google.com: domain of 3uh4ixqgkcj0pe7hbbi8dlldib.9ljifkru-jjhs79h.lod@flex--shakeelb.bounces.google.com designates 209.85.220.73 as permitted sender) smtp.mailfrom=3Uh4IXQgKCJ0PE7HBBI8DLLDIB.9LJIFKRU-JJHS79H.LOD@flex--shakeelb.bounces.google.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:message-id:mime-version:subject:from:to:cc; bh=TTbfAoCu4GcLQkkLsQIxh3IHCYFVhiWbbnmqLqGCZT0=; b=jZfxRwkuPiIZFdGi8/rcF/0bUZMdwezu9vWxjpUUpRPuvxG5dw4JNY14gsHU9oJO7L 5Ij05KVs3YqhUSK4gIWk7xpWLfYXFKMftiSRm/Mgqzn7g0EmryRy3F2zWB6hOQWfPRY/ JlTfwaY6GRkIfoFywWkH69cSk8CbEx2ZgsPSAm37sfkCwaVzqIx7vOf58IUykipTNvNi oBlN9+odE31x0bFBwmGnoXtcusvTakGy0oF8zsTPvn+VP6/+vhFxO+qPt5Mq50KOZFVi UvttSwG9/I+2SkU2G5Q/7CvQfoEiGhjcidF4r4zlvCxa4iexnTrcJDXbiNWo9kJ4rcBV +EAA== X-Google-Smtp-Source: APXvYqxzU6qeR8sKemK093KPas/vEHXa3zteT7sWEEHxpSEXDl1Y6eqEq1INAQbGNd3g0D1h3RhweCuzOwlhjg== X-Received: by 2002:ac8:17f7:: with SMTP id r52mr98077354qtk.235.1560813138436; Mon, 17 Jun 2019 16:12:18 -0700 (PDT) Date: Mon, 17 Jun 2019 16:12:06 -0700 Message-Id: <20190617231207.160865-1-shakeelb@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.22.0.410.gd8fdbe21b5-goog Subject: [PATCH v2 1/2] mm, oom: refactor dump_tasks for memcg OOMs From: Shakeel Butt To: Johannes Weiner , Tetsuo Handa , Michal Hocko , Andrew Morton , Roman Gushchin Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Shakeel Butt X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP dump_tasks() currently goes through all the processes present on the system even for memcg OOMs. Change dump_tasks() similar to select_bad_process() and use mem_cgroup_scan_tasks() to selectively traverse the processes of the memcgs during memcg OOM. Signed-off-by: Shakeel Butt Acked-by: Michal Hocko --- Changelog since v1: - Divide the patch into two patches. mm/oom_kill.c | 68 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 28 deletions(-) diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 05aaa1a5920b..bd80997e0969 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -385,10 +385,38 @@ static void select_bad_process(struct oom_control *oc) oc->chosen_points = oc->chosen_points * 1000 / oc->totalpages; } +static int dump_task(struct task_struct *p, void *arg) +{ + struct oom_control *oc = arg; + struct task_struct *task; + + if (oom_unkillable_task(p, NULL, oc->nodemask)) + return 0; + + task = find_lock_task_mm(p); + if (!task) { + /* + * This is a kthread or all of p's threads have already + * detached their mm's. There's no need to report + * them; they can't be oom killed anyway. + */ + return 0; + } + + pr_info("[%7d] %5d %5d %8lu %8lu %8ld %8lu %5hd %s\n", + task->pid, from_kuid(&init_user_ns, task_uid(task)), + task->tgid, task->mm->total_vm, get_mm_rss(task->mm), + mm_pgtables_bytes(task->mm), + get_mm_counter(task->mm, MM_SWAPENTS), + task->signal->oom_score_adj, task->comm); + task_unlock(task); + + return 0; +} + /** * dump_tasks - dump current memory state of all system tasks - * @memcg: current's memory controller, if constrained - * @nodemask: nodemask passed to page allocator for mempolicy ooms + * @oc: pointer to struct oom_control * * Dumps the current memory state of all eligible tasks. Tasks not in the same * memcg, not in the same cpuset, or bound to a disjoint set of mempolicy nodes @@ -396,37 +424,21 @@ static void select_bad_process(struct oom_control *oc) * State information includes task's pid, uid, tgid, vm size, rss, * pgtables_bytes, swapents, oom_score_adj value, and name. */ -static void dump_tasks(struct mem_cgroup *memcg, const nodemask_t *nodemask) +static void dump_tasks(struct oom_control *oc) { - struct task_struct *p; - struct task_struct *task; - pr_info("Tasks state (memory values in pages):\n"); pr_info("[ pid ] uid tgid total_vm rss pgtables_bytes swapents oom_score_adj name\n"); - rcu_read_lock(); - for_each_process(p) { - if (oom_unkillable_task(p, memcg, nodemask)) - continue; - task = find_lock_task_mm(p); - if (!task) { - /* - * This is a kthread or all of p's threads have already - * detached their mm's. There's no need to report - * them; they can't be oom killed anyway. - */ - continue; - } + if (is_memcg_oom(oc)) + mem_cgroup_scan_tasks(oc->memcg, dump_task, oc); + else { + struct task_struct *p; - pr_info("[%7d] %5d %5d %8lu %8lu %8ld %8lu %5hd %s\n", - task->pid, from_kuid(&init_user_ns, task_uid(task)), - task->tgid, task->mm->total_vm, get_mm_rss(task->mm), - mm_pgtables_bytes(task->mm), - get_mm_counter(task->mm, MM_SWAPENTS), - task->signal->oom_score_adj, task->comm); - task_unlock(task); + rcu_read_lock(); + for_each_process(p) + dump_task(p, oc); + rcu_read_unlock(); } - rcu_read_unlock(); } static void dump_oom_summary(struct oom_control *oc, struct task_struct *victim) @@ -458,7 +470,7 @@ static void dump_header(struct oom_control *oc, struct task_struct *p) dump_unreclaimable_slab(); } if (sysctl_oom_dump_tasks) - dump_tasks(oc->memcg, oc->nodemask); + dump_tasks(oc); if (p) dump_oom_summary(oc, p); } From patchwork Mon Jun 17 23:12:07 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shakeel Butt X-Patchwork-Id: 11000665 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 663541395 for ; Mon, 17 Jun 2019 23:12:35 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5861B289E0 for ; Mon, 17 Jun 2019 23:12:35 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4BC7A289E9; Mon, 17 Jun 2019 23:12:35 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, USER_IN_DEF_DKIM_WL autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B28BF289E0 for ; Mon, 17 Jun 2019 23:12:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CEEAE8E0005; Mon, 17 Jun 2019 19:12:33 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id C9FA48E0001; Mon, 17 Jun 2019 19:12:33 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B678E8E0005; Mon, 17 Jun 2019 19:12:33 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-qt1-f198.google.com (mail-qt1-f198.google.com [209.85.160.198]) by kanga.kvack.org (Postfix) with ESMTP id 994A28E0001 for ; Mon, 17 Jun 2019 19:12:33 -0400 (EDT) Received: by mail-qt1-f198.google.com with SMTP id r40so10769896qtk.0 for ; Mon, 17 Jun 2019 16:12:33 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=OqXw0t9fRr/azQRpWaonaAmH3L30B0p/Fx4/9IaKmEU=; b=ANnljVOC/r/8WpSP2Si+Xo6w5NeR7YMwmt27TAlXr/52SXbwr8vtHtpniyNgK/BLCe +aJYoG1l56UcBLsWvg2QlIj/Nm+uXGg8L4Wa//UvY5Fzr6Afk0PDztE6xzQYDGiwJh9O rbZjVnjQ8g2JDOGScVpe2BWf4upvxehK8OWlsrhfDDL0au+193Bl4pYAPR6R2d9WZAn3 3TMc+etvfcdKnXlXmcITMd6Lt+yuc94Pq9CkVorZblS9jRWXEKG3d30tCmftxvVDEQqQ DEXuH4m83LRAm6xuXZs/+LwT3Y7zs5JJppmuVHN5UKilQmDyNiVoeqiSHyLicFbz0LhO syKA== X-Gm-Message-State: APjAAAU6LS7lN/GA01NX8ZqLTvunXyEBbcI9HtU94zHHRt4vT3j/+thH YefVwmLRLNbzNrUTecA4jfZxcSqqsIQnK/zbkz3YKHy/jXkkUN/k8CjpIEyjBGQy645SCRax7Lm Efo0R03fROMT9YRrFPRu9B/ULSACtXhLy/67FwJsucoT4cOahGSkIKFjj1jsUNEkMnA== X-Received: by 2002:ac8:1acf:: with SMTP id h15mr96570032qtk.67.1560813153383; Mon, 17 Jun 2019 16:12:33 -0700 (PDT) X-Received: by 2002:ac8:1acf:: with SMTP id h15mr96569982qtk.67.1560813152621; Mon, 17 Jun 2019 16:12:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560813152; cv=none; d=google.com; s=arc-20160816; b=eYeumFfixs0zyCZlGR8WHA6jSQVatD1Xn18nCATRB5ZpQQR8dRNzACRyuq1ylRz6/+ TfbOunDItMDekD/q4/ONyzt8WwEPnoov/BGo2vH9t0I93/WugAbcADwawkZWorVXu24Q +5UarXvtRIXF+i9R1RAckkVOr0SuCx05GKw8C/WEyUpjPWLaYmqxxMzkYGhyD/g3FaAk dJ9mlmCZEHenNl92QK63Ol4xU7SxmUJ4leBw0pXaheEzeCVd7IH16Lla0+A9h/r1Z5GQ 97yfGEyUs9mt0jkNhwqBEgNAUdEXAvP2vSlt2UEq6jPKRptc7enK3FKR8BqEQaCJJVRn uQ+Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:dkim-signature; bh=OqXw0t9fRr/azQRpWaonaAmH3L30B0p/Fx4/9IaKmEU=; b=n4mF2eB7RZNzrFMWPxPVR9C/8arHkF1WV0wzFxYHmIzmi2dyRF+UTDR1RXhBKgl9bm /fQWlaHle6IQs9BzlM2MApfdqgWFnCU9N1Bxj4jxYbSg9GyhO+stQwa3pF4qfjtSL6cu 3BYTOOfGyDBKKJw9zJek9qP2wkOMYNjFc/6NZpJznF0CVYsSbY01vsUdnJgnGW9F6XqU tmtTnZw0xdSEo8ua1M1PaQe7qcpOqiARIyRSo5YRWMVOBDXCjRJMy+PviP6s+0PgsIK1 Sm5z/HuqRWF3SHSH2S85Mk6j3ONo2qJ6NlOeI3FTCRn9hPNojcIuHr98lb/shO/VWz6e k6Cw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=l+uIMTCI; spf=pass (google.com: domain of 3yb4ixqgkcksdslvppwmrzzrwp.nzxwtyfi-xxvglnv.zcr@flex--shakeelb.bounces.google.com designates 209.85.220.73 as permitted sender) smtp.mailfrom=3YB4IXQgKCKsdSLVPPWMRZZRWP.NZXWTYfi-XXVgLNV.ZcR@flex--shakeelb.bounces.google.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from mail-sor-f73.google.com (mail-sor-f73.google.com. [209.85.220.73]) by mx.google.com with SMTPS id t15sor18303653qth.2.2019.06.17.16.12.32 for (Google Transport Security); Mon, 17 Jun 2019 16:12:32 -0700 (PDT) Received-SPF: pass (google.com: domain of 3yb4ixqgkcksdslvppwmrzzrwp.nzxwtyfi-xxvglnv.zcr@flex--shakeelb.bounces.google.com designates 209.85.220.73 as permitted sender) client-ip=209.85.220.73; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=l+uIMTCI; spf=pass (google.com: domain of 3yb4ixqgkcksdslvppwmrzzrwp.nzxwtyfi-xxvglnv.zcr@flex--shakeelb.bounces.google.com designates 209.85.220.73 as permitted sender) smtp.mailfrom=3YB4IXQgKCKsdSLVPPWMRZZRWP.NZXWTYfi-XXVgLNV.ZcR@flex--shakeelb.bounces.google.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=OqXw0t9fRr/azQRpWaonaAmH3L30B0p/Fx4/9IaKmEU=; b=l+uIMTCI5npW/nqR+ky6CSGLylxdHVeLxb2jOLCH1qr1XrTumE2XBxgN6ZmUkAXra1 ntBZBh41tlpF3BBA55+I1PGrd6z4kEdS8Uv82kOLTTVnfUrFHdX7tbZQJyF8UcROls0i 1c93b9o006nR8CZgd2EWyEyscBDXP8MnS+KB2Ue3lzsyD5dzhYW+nUGofuF/y74syGBs PYDHmZSJAzuMLtWDAbG4Af+6ggzwaueNFoqmaDUDXSIi/Z3MtYtfRNflCgo074OpQHfj EmRyhNDKDwlw3B3NOKNfeYgQU2FjysANV51nYmq0c4D+tKsQDNTP6PgD7PTxwPFDKxCU /p7A== X-Google-Smtp-Source: APXvYqypIi8nO7ZBX6Y8v6IyGHG5MzrimR5HjvoCIsgCWDQWP5j91s5/qQKuaJpxz7EBH4UYoTFh6kJ18bE4Zw== X-Received: by 2002:ac8:2b01:: with SMTP id 1mr26419700qtu.177.1560813152241; Mon, 17 Jun 2019 16:12:32 -0700 (PDT) Date: Mon, 17 Jun 2019 16:12:07 -0700 In-Reply-To: <20190617231207.160865-1-shakeelb@google.com> Message-Id: <20190617231207.160865-2-shakeelb@google.com> Mime-Version: 1.0 References: <20190617231207.160865-1-shakeelb@google.com> X-Mailer: git-send-email 2.22.0.410.gd8fdbe21b5-goog Subject: [PATCH v2 2/2] mm, oom: fix oom_unkillable_task for memcg OOMs From: Shakeel Butt To: Johannes Weiner , Tetsuo Handa , Michal Hocko , Andrew Morton , Roman Gushchin Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Shakeel Butt X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP Currently oom_unkillable_task() checks mems_allowed even for memcg OOMs which does not make sense as memcg OOMs can not be triggered due to numa constraints. Fixing that. This commit also removed the bogus usage of oom_unkillable_task() from oom_badness(). Currently reading /proc/[pid]/oom_score will do a bogus cpuset_mems_allowed_intersects() check. Removing that. Signed-off-by: Shakeel Butt --- Changelog since v1: - Divide the patch into two patches. fs/proc/base.c | 3 +-- include/linux/oom.h | 1 - mm/oom_kill.c | 28 +++++++++++++++------------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/fs/proc/base.c b/fs/proc/base.c index b8d5d100ed4a..57b7a0d75ef5 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -532,8 +532,7 @@ static int proc_oom_score(struct seq_file *m, struct pid_namespace *ns, unsigned long totalpages = totalram_pages() + total_swap_pages; unsigned long points = 0; - points = oom_badness(task, NULL, NULL, totalpages) * - 1000 / totalpages; + points = oom_badness(task, totalpages) * 1000 / totalpages; seq_printf(m, "%lu\n", points); return 0; diff --git a/include/linux/oom.h b/include/linux/oom.h index d07992009265..c696c265f019 100644 --- a/include/linux/oom.h +++ b/include/linux/oom.h @@ -108,7 +108,6 @@ static inline vm_fault_t check_stable_address_space(struct mm_struct *mm) bool __oom_reap_task_mm(struct mm_struct *mm); extern unsigned long oom_badness(struct task_struct *p, - struct mem_cgroup *memcg, const nodemask_t *nodemask, unsigned long totalpages); extern bool out_of_memory(struct oom_control *oc); diff --git a/mm/oom_kill.c b/mm/oom_kill.c index bd80997e0969..d779d9da1069 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -152,20 +152,23 @@ static inline bool is_memcg_oom(struct oom_control *oc) } /* return true if the task is not adequate as candidate victim task. */ -static bool oom_unkillable_task(struct task_struct *p, - struct mem_cgroup *memcg, const nodemask_t *nodemask) +static bool oom_unkillable_task(struct task_struct *p, struct oom_control *oc) { if (is_global_init(p)) return true; if (p->flags & PF_KTHREAD) return true; - /* When mem_cgroup_out_of_memory() and p is not member of the group */ - if (memcg && !task_in_mem_cgroup(p, memcg)) - return true; + /* + * For memcg OOM, we reach here through mem_cgroup_scan_tasks(), no + * need to check p's memcg membership and the checks after this + * are irrelevant for memcg OOMs. + */ + if (is_memcg_oom(oc)) + return false; /* p may not have freeable memory in nodemask */ - if (!has_intersects_mems_allowed(p, nodemask)) + if (!has_intersects_mems_allowed(p, oc->nodemask)) return true; return false; @@ -201,13 +204,12 @@ static bool is_dump_unreclaim_slabs(void) * predictable as possible. The goal is to return the highest value for the * task consuming the most memory to avoid subsequent oom failures. */ -unsigned long oom_badness(struct task_struct *p, struct mem_cgroup *memcg, - const nodemask_t *nodemask, unsigned long totalpages) +unsigned long oom_badness(struct task_struct *p, unsigned long totalpages) { long points; long adj; - if (oom_unkillable_task(p, memcg, nodemask)) + if (is_global_init(p) || p->flags & PF_KTHREAD) return 0; p = find_lock_task_mm(p); @@ -318,7 +320,7 @@ static int oom_evaluate_task(struct task_struct *task, void *arg) struct oom_control *oc = arg; unsigned long points; - if (oom_unkillable_task(task, NULL, oc->nodemask)) + if (oom_unkillable_task(task, oc)) goto next; /* @@ -342,7 +344,7 @@ static int oom_evaluate_task(struct task_struct *task, void *arg) goto select; } - points = oom_badness(task, NULL, oc->nodemask, oc->totalpages); + points = oom_badness(task, oc->totalpages); if (!points || points < oc->chosen_points) goto next; @@ -390,7 +392,7 @@ static int dump_task(struct task_struct *p, void *arg) struct oom_control *oc = arg; struct task_struct *task; - if (oom_unkillable_task(p, NULL, oc->nodemask)) + if (oom_unkillable_task(p, oc)) return 0; task = find_lock_task_mm(p); @@ -1090,7 +1092,7 @@ bool out_of_memory(struct oom_control *oc) check_panic_on_oom(oc, constraint); if (!is_memcg_oom(oc) && sysctl_oom_kill_allocating_task && - current->mm && !oom_unkillable_task(current, NULL, oc->nodemask) && + current->mm && !oom_unkillable_task(current, oc) && current->signal->oom_score_adj != OOM_SCORE_ADJ_MIN) { get_task_struct(current); oc->chosen = current;