Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp1981477imu; Wed, 21 Nov 2018 05:06:37 -0800 (PST) X-Google-Smtp-Source: AJdET5f2vzcmgd36TTmfwXKNTQpWxaQ6l/EQ0ZJOwAv27suvNgS5pq5ygge8z6KTQPZVE52pIpCK X-Received: by 2002:a62:c683:: with SMTP id x3mr6620244pfk.10.1542805597803; Wed, 21 Nov 2018 05:06:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542805597; cv=none; d=google.com; s=arc-20160816; b=nlSLsM+JvsO7l0HC4n+uWhFHtkfqeA6z/Q0VnVFJXPHD/DgDfB3NpD2oexcb6w/jSv M8/ZF5Ev7Qg8JGpypSFPhoxvkfPBltP5wBYAGpKUUpcs5ZQYVHSShQtVolJoTklx0ezM OnPKKlKY0WxyPghRyl8yfGFEerOzYwq1iqJN+t9g3o04QkDVu/O6egEiLFIMWV4hQ9En EFp11XSVnUbRSx4TJhd989rWNxuShgKr8BuM+Q59iWkIWX3d0ncYuJ7AXy/MymyFQmg6 avl8FevLtsgXjVnTqzW/E5s5hBNQobjn5S1bJ/GwPtT6u9WIipezs/2CuT9ifDscwZCA XwQA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=ylCHwBAJTmPIaOdxe6D4qpf2xk7cxDYmrUoJdcdixoc=; b=ZiYZZPr/OmBX6fs5O0COJX3wiUBbEj3qpQIYNH1LjuQ9fleaMgcqm2HBUpLbHfV4c0 SzSntKWw82Z8/E0Ne6gLsAjTtzkU1KDcPDnjZnQ8ZnsByD+SGZftzXiwAGd6U7/DiKRH MjQQCz23pxl9mYZEBHNQbRuEm75+ZoWo2c6RpV/NUi/tP1wo0+2sfcFJF7RQSHwv5DUU WQ8Uao9Q5i0VmLe3ZtSBLk3keR1AUcU28s22+RsFW/43545jd6bgeaL6eAJGrDO3i15O o7JSKQFXvki0YxfCug+yqVDRjO+ltPRStyUeDxDQQxLFqi+ksoTI6Y5ZVj0ZdwZ5spWG zVGQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=dE+70IAL; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a23-v6si5094809pff.126.2018.11.21.05.06.13; Wed, 21 Nov 2018 05:06:37 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=dE+70IAL; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730269AbeKUWEU (ORCPT + 99 others); Wed, 21 Nov 2018 17:04:20 -0500 Received: from mail-pl1-f194.google.com ([209.85.214.194]:38555 "EHLO mail-pl1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729179AbeKUWET (ORCPT ); Wed, 21 Nov 2018 17:04:19 -0500 Received: by mail-pl1-f194.google.com with SMTP id e5so5146358plb.5 for ; Wed, 21 Nov 2018 03:30:17 -0800 (PST) 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=ylCHwBAJTmPIaOdxe6D4qpf2xk7cxDYmrUoJdcdixoc=; b=dE+70IALVpR1aU8LFaUxI3u+s7wupMAQa3upaWdKnXgbxVyFfxyKO//GRnBuegoZ2Y RzbauJitgakVMQAezGHkgD+KFKpz1s+CJS2ltSbksoxKCx1wsYd8HAo22mXzK5329dcc BiJNqqCZ9X+jZYsetmrUjx1nJdsr5tzxoUlWPyYEljRnCGmuAxQ4fWyVUoG2yjIdQzLu BoMW2qY/deUCW2t4y6lqscI2ZDppauzhIAwiNz/DDlTfPXplzT6wnNzvg7L1/a2nZh7n UETEshCdL/CxujxniADeidHs34S5/Wg/0do6o98t/J92hGSAcgK0joD2dfjnHImykACG Znlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ylCHwBAJTmPIaOdxe6D4qpf2xk7cxDYmrUoJdcdixoc=; b=Cz4iIzUII0Wxmic0zGujciUThddVB7zsTONoyc7tR+dYdp4LhUR7MtDSqJN35UiDKS LMTiWKURaEfQqLtnpDuviSSk/m1be2RWrR9y63mU32bFrIwnAvemn6QMp5+9tltTysaT HdmsIe2guRzrEupxM9iFwoGEz4ia4FtkYvykkATGS7TyFWsuDGA3ABC2ezukyUzVFnLs Dlh36ON70zBSiz6+kGXZYjgkyCo6qOlkSVg3yyDMyQIiCaNvZQdPAh/WMNPWGljWOCv3 LQagBz4yWXUhVUElzADpslA5V9gaV1aYIOXlsy+3WBZ7YsNzZEG1onAYFlptD00lz13r e/0w== X-Gm-Message-State: AA+aEWaVywVHgbFss2SN4xhGjvBjy2n5FjwaTdxxEIOzSUNtINjKyUeV 1a2+xBbW7nxRI66ncu4cIdI= X-Received: by 2002:a63:ce50:: with SMTP id r16mr5569991pgi.217.1542799817296; Wed, 21 Nov 2018 03:30:17 -0800 (PST) Received: from dest.didichuxing.com ([203.100.54.194]) by smtp.gmail.com with ESMTPSA id t13sm90753952pgr.42.2018.11.21.03.30.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Nov 2018 03:30:16 -0800 (PST) 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: Wed, 21 Nov 2018 19:29:59 +0800 Message-Id: <1542799799-36184-2-git-send-email-ufo19890607@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1542799799-36184-1-git-send-email-ufo19890607@gmail.com> References: <1542799799-36184-1-git-send-email-ufo19890607@gmail.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 | 33 ++++++++++++++++++++------------- mm/oom_kill.c | 3 ++- 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 7ab2120..83ae11c 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 6e1469b..b860dd4 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1293,32 +1293,39 @@ 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_info(",oom_memcg="); + pr_cont_cgroup_path(memcg->css.cgroup); + } else + pr_info(",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 2c686d2..6fd1ead 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -435,6 +435,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))); } @@ -449,7 +450,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()) -- 1.8.3.1