From patchwork Sat Sep 29 13:06:27 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?56a56Iif6ZSu?= X-Patchwork-Id: 10620805 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 00A80A6A for ; Sat, 29 Sep 2018 13:07:00 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E9B6529E90 for ; Sat, 29 Sep 2018 13:06:59 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id DDBED2A706; Sat, 29 Sep 2018 13:06:59 +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=-3.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE 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 204E429E90 for ; Sat, 29 Sep 2018 13:06:57 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F38918E0003; Sat, 29 Sep 2018 09:06:55 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id EE4E08E0001; Sat, 29 Sep 2018 09:06:55 -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 DD4DC8E0003; Sat, 29 Sep 2018 09:06:55 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by kanga.kvack.org (Postfix) with ESMTP id 9E2D38E0001 for ; Sat, 29 Sep 2018 09:06:55 -0400 (EDT) Received: by mail-pg1-f197.google.com with SMTP id f13-v6so9977872pgs.15 for ; Sat, 29 Sep 2018 06:06:55 -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:from:to:cc:subject:date :message-id:in-reply-to:references; bh=V7aJM82zfDXbiOcRrgJDAzcz0Qx7Ks6G9pLA2RN6nvQ=; b=J4FFb926XYnIRCliCXfkIA0svF2nXyx7Q7ztUCNMJMD22nBOtz2ni4JwlR3vkW7aM6 qj6zrxQSzR2vYCRsZTawsFVCRIvCRkvhHJOW1ZVLPUTXiEs8j8KpFrdDvATazgYVpoYT e/uSNUoU+wuzHb+IHEl34bOrnZpXI2XCihc4plVPqMKL0yYsZraUUUn5nK7LZEwaCJmD r/umnPDKbFPZsQvpq4KJRqDszXWi+dQTweyh67/xoSdQJ2jabkP+iO+Uae9LznNijPZM fsLN9PowW+AbbpQiCZA1wEgQeGF2Bv4u8IC1/7uO34wwocrEacp0bjG6XXLtYwQ3IwcL wmUg== X-Gm-Message-State: ABuFfojWCPRUQKARiR+JekfsYIRaSf2e7AG3ACHiAhTLrkVqPUAm7YQh y6tNlipKiw7ogrqa/MVHyvE0RzLnuuRbOOYUmXOmM6x9nrHfDIn6+Y7fEQ36BonBTrg2OWouJLW clJ/pVpPZD9NCOQyZSE9PVuo0mb74sMJtgqn+QSlyWxor0xxVtXQkBYVvvighggxuy2iYF3ySvZ JjK3oHVn58Z3Ya0mkkF2LbrOkADqmolMj65sTqbBhokPTjjs0UmFiJIZxY4LwCi9a6bq9y/wH1B RayF54QAIrtHPYGaOYEjtknnA0vgkkNpcOWq5pZs3cKDTeB2lXnmKbtr8exPhKWZq9HC6rAzVLF IzCcwDuR+DdMSaTUa41yrOi+vkrJgDYzVWIJiCyD/f+4BtuKPR1Nwf96/zT+nFFHrooyX5uVWHB I X-Received: by 2002:a62:f610:: with SMTP id x16-v6mr3037459pfh.169.1538226415322; Sat, 29 Sep 2018 06:06:55 -0700 (PDT) X-Received: by 2002:a62:f610:: with SMTP id x16-v6mr3037390pfh.169.1538226414441; Sat, 29 Sep 2018 06:06:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1538226414; cv=none; d=google.com; s=arc-20160816; b=kiWU9mLUBd5c00ZbFg0RLbm8vBChGXeIKKTvVNPvu99PGaturu5l4yKQWCwyEBmNx8 qc1C5K64MZ56zvxs+yqq+qYuwVnUB1FD5DuGLYo1ErYkRseIIDi0oUAoz1cqLjiBI83H DntzVorFVYdImLfNBXdPZ/nh75gjfTyojNBUl93NFLSWHGW/rbq0jyWPgwsiLWWfoFat 9E2wpzqtZK9QpRqIk7VXdk4UlrXYH2cTb9mNk/KsVkA1ADEnbF80e8IIurFPd6tOx4W4 usxjSEoibqT/mfFlo02IvIhccd/9uIMH32OGQmi76UW2fxt56ydjmhN7JlKLJ6SivaOq TtXg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=V7aJM82zfDXbiOcRrgJDAzcz0Qx7Ks6G9pLA2RN6nvQ=; b=PfO73MrV2VHyFBcl09iHQRz6xP+CWytfJ5gn22LMrozC+K7LW2TcUAEf1tiu2nZOPE ootHqwUuwj9JquP69/oQMHctswmvgvixrzAbBzECA9W2E2Hi4gvF98LCWnKeEM0dCJwM O2RSZcg/3A90wNmzpw5y+t/JLFESfobW+wq3deCubnmuGP3LRQShgojYcAlOyS1b/IoZ qrNJQA0a8jd6aSw/BV19wy8tQH7zqNuYCznSssRilr9O6KfkIohh/AjqzImoQQlQ/Xqr hviOHm4Z1UjWubghntjC/HGWwwuwAlQm43RP9gzsm9s3e64JjsN2OHj3QlOoTPmORMl7 OD4A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=gxX8PwFc; spf=pass (google.com: domain of ufo19890607@gmail.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=ufo19890607@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id j30-v6sor16785pgb.259.2018.09.29.06.06.54 for (Google Transport Security); Sat, 29 Sep 2018 06:06:54 -0700 (PDT) Received-SPF: pass (google.com: domain of ufo19890607@gmail.com designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=gxX8PwFc; spf=pass (google.com: domain of ufo19890607@gmail.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=ufo19890607@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=V7aJM82zfDXbiOcRrgJDAzcz0Qx7Ks6G9pLA2RN6nvQ=; b=gxX8PwFcMAxqyFVcN7lJ/A0J6U4xNaGhMLk/c20gNLXdygIJNuYHYL+0bYT/9RbvaF 0eMP6Zw/4jR+D2tJ9FAga4rnPVshTPnARvrGpIxiiHwEQ3+4VNmkNpK5PE5JoV47pSTd GUEJdJOvw7r4pOmo4MuVOsvM0U9pvAoytScu2URJ6JSThb3VAkSUCWt7g9gECL4m0R6k +4eWQwNfWwkg9Irotje3aKfyCic2Q4PbgHefFl5rvrYk4uCchqtLmCWwCUZGihaH6K5v HfSPxa2ikKj/UOnauYttp0fR3I2aRFPkwyHH6aFdWiizDWFt0lE+XHzx9DnpiHD+I+Mn YbiQ== X-Google-Smtp-Source: ACcGV62YU2w79037fKcfAKd1eYixeAwwwSl97N5XwzGHe+i87XbI+Tss5mtL3QJNUffik6EmbD1KZQ== X-Received: by 2002:a63:525c:: with SMTP id s28-v6mr2899730pgl.78.1538226414064; Sat, 29 Sep 2018 06:06:54 -0700 (PDT) Received: from dest.didichuxing.com ([203.100.54.194]) by smtp.gmail.com with ESMTPSA id p4-v6sm13828267pgs.75.2018.09.29.06.06.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 29 Sep 2018 06:06:53 -0700 (PDT) From: ufo19890607@gmail.com To: akpm@linux-foundation.org, mhocko@suse.com, rientjes@google.com, kirill.shutemov@linux.intel.com, aarcange@redhat.com, penguin-kernel@i-love.sakura.ne.jp, guro@fb.com, yang.s@alibaba-inc.com Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, yuzhoujian@didichuxing.com Subject: [PATCH v15 2/2] Add oom victim's memcg to the oom context information Date: Sat, 29 Sep 2018 21:06:27 +0800 Message-Id: <1538226387-16600-2-git-send-email-ufo19890607@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1538226387-16600-1-git-send-email-ufo19890607@gmail.com> References: <1538226387-16600-1-git-send-email-ufo19890607@gmail.com> 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 From: yuzhoujian The current oom report doesn't display victim's memcg context during the global OOM situation. While this information is not strictly needed, it can be really helpful for containerized environments to locate which container has lost a process. Now that we have a single line for the oom context, we can trivially add both the oom memcg (this can be either global_oom or a specific memcg which hits its hard limits) and task_memcg which is the victim's memcg. Below is the single line output in the oom report after this patch. - global oom context information: oom-kill:constraint=,nodemask=,cpuset=,mems_allowed=,global_oom,task_memcg=,task=,pid=,uid= - memcg oom context information: oom-kill:constraint=,nodemask=,cpuset=,mems_allowed=,oom_memcg=,task_memcg=,task=,pid=,uid= Signed-off-by: yuzhoujian --- include/linux/memcontrol.h | 11 +++++++++-- mm/memcontrol.c | 32 ++++++++++++++++++++------------ mm/oom_kill.c | 3 ++- 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 652f602..3adf70a 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -526,9 +526,11 @@ unsigned long mem_cgroup_get_zone_lru_size(struct lruvec *lruvec, unsigned long mem_cgroup_get_max(struct mem_cgroup *memcg); -void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, +void mem_cgroup_print_oom_context(struct mem_cgroup *memcg, struct task_struct *p); +void mem_cgroup_print_oom_meminfo(struct mem_cgroup *memcg); + static inline void mem_cgroup_enter_user_fault(void) { WARN_ON(current->in_user_fault); @@ -970,7 +972,12 @@ static inline unsigned long mem_cgroup_get_max(struct mem_cgroup *memcg) } static inline void -mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p) +mem_cgroup_print_oom_context(struct mem_cgroup *memcg, struct task_struct *p) +{ +} + +static inline void +mem_cgroup_print_oom_meminfo(struct mem_cgroup *memcg) { } diff --git a/mm/memcontrol.c b/mm/memcontrol.c index e79cb59..a7b4ada 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1293,32 +1293,40 @@ static bool mem_cgroup_wait_acct_move(struct mem_cgroup *memcg) #define K(x) ((x) << (PAGE_SHIFT-10)) /** - * mem_cgroup_print_oom_info: Print OOM information relevant to memory controller. + * mem_cgroup_print_oom_context: Print OOM information relevant to + * memory controller. * @memcg: The memory cgroup that went over limit * @p: Task that is going to be killed * * NOTE: @memcg and @p's mem_cgroup can be different when hierarchy is * enabled */ -void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p) +void mem_cgroup_print_oom_context(struct mem_cgroup *memcg, struct task_struct *p) { - struct mem_cgroup *iter; - unsigned int i; - rcu_read_lock(); + if (memcg) { + pr_cont(",oom_memcg="); + pr_cont_cgroup_path(memcg->css.cgroup); + } else + pr_cont(",global_oom"); if (p) { - pr_info("Task in "); + pr_cont(",task_memcg="); pr_cont_cgroup_path(task_cgroup(p, memory_cgrp_id)); - pr_cont(" killed as a result of limit of "); - } else { - pr_info("Memory limit reached of cgroup "); } - pr_cont_cgroup_path(memcg->css.cgroup); - pr_cont("\n"); - rcu_read_unlock(); +} + +/** + * mem_cgroup_print_oom_meminfo: Print OOM memory information relevant to + * memory controller. + * @memcg: The memory cgroup that went over limit + */ +void mem_cgroup_print_oom_meminfo(struct mem_cgroup *memcg) +{ + struct mem_cgroup *iter; + unsigned int i; pr_info("memory: usage %llukB, limit %llukB, failcnt %lu\n", K((u64)page_counter_read(&memcg->memory)), diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 0935fca..820bc87 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -438,7 +438,7 @@ static void dump_header(struct oom_control *oc, struct task_struct *p) dump_stack(); if (is_memcg_oom(oc)) - mem_cgroup_print_oom_info(oc->memcg, p); + mem_cgroup_print_oom_meminfo(oc->memcg); else { show_mem(SHOW_MEM_FILTER_NODES, oc->nodemask); if (is_dump_unreclaim_slabs()) @@ -455,6 +455,7 @@ static void dump_oom_summary(struct oom_control *oc, struct task_struct *victim) oom_constraint_text[oc->constraint], nodemask_pr_args(oc->nodemask)); cpuset_print_current_mems_allowed(); + mem_cgroup_print_oom_context(oc->memcg, victim); pr_cont(",task=%s,pid=%d,uid=%d\n", victim->comm, victim->pid, from_kuid(&init_user_ns, task_uid(victim))); }