Received: by 2002:ac0:a591:0:0:0:0:0 with SMTP id m17-v6csp626834imm; Thu, 5 Jul 2018 06:21:46 -0700 (PDT) X-Google-Smtp-Source: AAOMgpcwvqmEVwqW7gXx4H2PzMra02KJc5l763gUZN6Oqnmk2i1QxuMixacjGwRI9E2li7LwSDj/ X-Received: by 2002:a63:6b03:: with SMTP id g3-v6mr2442857pgc.57.1530796906112; Thu, 05 Jul 2018 06:21:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530796906; cv=none; d=google.com; s=arc-20160816; b=dwRX8MG8UYV6pOmHl31NRj+IAe2K3hob3M5qjyO0zGpTkBq576XM98NfudstiHG5DD oZpGT232pqiad+/h4ofCdxzr+DiYSl5kS9eqE9QXja7o5WeAdl+t4h524O0B03vEV+1V WXxEkBiVGEU7sgXmW3a36SphDGGeofrTwAtCmxRoDM3CMmpOzTnDh8d3uBsD1UtAwTkU 89n+Q4hncfqV3H9Sg0LSCX9z6TBcTtDejJQMla+76XzpbuURtAc64kSED5hMI7SJtPJZ FZvHIysf+t0FEhib0aVL3ESe6HlDIlW6ix43C+pZtO0Xp1cN3OzZ5hHQ93FknfuxzWip r4Ew== 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:arc-authentication-results; bh=5tRonMk7uvKJ9ue4p1e3aU3iZ3FZzpu4+uTRzSG0Cw8=; b=ESRzfPC8cO9yPL66T3zW/fhPhcKq3uUODuN2vligMAQATz8KRJoudjTBT+5ugdOijh rsUQ4kbEFp1WDuK1M4fwt81rm33TDKz2Ph1kVQQsB2NnVXyoYrZGLzI80fhNsnBjYZFE CZve/NnvvFUZZo/X+WyfwDjqQFunKvoUtfdYZhpV4HnwW9l6o5rz1t6eeiyRqWRhDR7z 3nOdRF00L6/4fo+4Zgh6FJ+M0Aak4NyUdf9uQ6MdOQgPXPO9sxJ5tHWtJYO/GPO3An0s K2vaZZgjcd19ttcsDybsUZ1I234Y5U83LQemRDobiAndqXaxPy/uz7Sz11N1nFroSQWZ vUyw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=d8WNXXwN; 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 b59-v6si5942752plc.335.2018.07.05.06.21.31; Thu, 05 Jul 2018 06:21:46 -0700 (PDT) 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=d8WNXXwN; 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 S1754247AbeGENUu (ORCPT + 99 others); Thu, 5 Jul 2018 09:20:50 -0400 Received: from mail-pf0-f194.google.com ([209.85.192.194]:35161 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754187AbeGENUr (ORCPT ); Thu, 5 Jul 2018 09:20:47 -0400 Received: by mail-pf0-f194.google.com with SMTP id q7-v6so4320059pff.2 for ; Thu, 05 Jul 2018 06:20:46 -0700 (PDT) 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=5tRonMk7uvKJ9ue4p1e3aU3iZ3FZzpu4+uTRzSG0Cw8=; b=d8WNXXwNbcSs7bipZ0iUwosJCOxgPdpRJVXrQtCvOnjlGrnlncQfm4GKtXJiGITgy9 NucgkNwM0fvE92G1whjf012aRvvs3KH4TMb0ewKzNRpErRssXfbiWhQ/rZIym/Gs6jvc QWfrmqdXvUt40rqJIi+lriNz/+UJiAAZfHc6R5qAsb+Gv79EkwiaR50WcPQOXZT8YUzd u/dRLn5N6aE8s0Ot1ToySB1t8wfODMeetQOymvrP0LQlWeq3JZrqSf7NiMo2Xx5YKQwr dLnfzZBwCy7mHtv/VgKHxua2vkNAQqS47vaoBqtbevlEf7lYGRLqJNBj70XtA1sP8MD5 +PsA== 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=5tRonMk7uvKJ9ue4p1e3aU3iZ3FZzpu4+uTRzSG0Cw8=; b=fQolgFtDTVUa0LuM4QI0aboamQVtfsJLMWMZfsjE0aZhfzpAsSJ5wjkESLv672T+GP 9fQbMfyaHCifGkAqCz4jyko2Cv6Hzv66x7sKKG/XDKgbxjZc9DOweZA115hAg5F2jOH3 XUFEh/Okb8qB8yx10HiMc9wBGvio6oPyijMuFtagi3RLPGspRpcnmhSmdvw8D0walhCq 4ejt7AUGal5yHmay3NcldDtrL0EvzonPpWi7RUNCJMhwF/hDkqk/HfJAUx4TbYWHgQKM YnoSaUR7fKa77tiRDHJeIV+EzKNJHrCaM5UscNtp0/Ig3eMnBl8yynmFIKd7rR7vBzwU +Ntg== X-Gm-Message-State: APt69E0+r8I0/xIAh1O35PELw4Dn/kE5mrgYLIM9rLGmJbtgAtmGVQ26 gELoSwN9bslZQxS9EiJSX9Y= X-Received: by 2002:a65:5141:: with SMTP id g1-v6mr5582700pgq.418.1530796846598; Thu, 05 Jul 2018 06:20:46 -0700 (PDT) Received: from dest.didichuxing.com ([168.63.150.120]) by smtp.gmail.com with ESMTPSA id b1-v6sm1150111pfa.181.2018.07.05.06.20.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 05 Jul 2018 06:20:45 -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 v12 2/2] Add the missing information for the oom report Date: Thu, 5 Jul 2018 21:20:29 +0800 Message-Id: <1530796829-4539-2-git-send-email-ufo19890607@gmail.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1530796829-4539-1-git-send-email-ufo19890607@gmail.com> References: <1530796829-4539-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. Signed-off-by: yuzhoujian --- include/linux/memcontrol.h | 14 +++++++++++--- mm/memcontrol.c | 36 ++++++++++++++++++++++-------------- mm/oom_kill.c | 10 ++++++---- 3 files changed, 39 insertions(+), 21 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 6c6fb116e925..96a73f989101 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -491,8 +491,10 @@ void mem_cgroup_handle_over_high(void); unsigned long mem_cgroup_get_max(struct mem_cgroup *memcg); -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); + +void mem_cgroup_print_oom_meminfo(struct mem_cgroup *memcg); static inline void mem_cgroup_oom_enable(void) { @@ -903,7 +905,13 @@ 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 e6f0d5ef320a..18deea974cfd 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1119,32 +1119,40 @@ static const char *const memcg1_stat_names[] = { #define K(x) ((x) << (PAGE_SHIFT-10)) /** - * mem_cgroup_print_oom_info: Print OOM information relevant to memory controller. - * @memcg: The memory cgroup that went over limit + * mem_cgroup_print_oom_context: Print OOM context information relevant to + * memory controller. + * @memcg: The origin 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; + struct cgroup *origin_cgrp, *kill_cgrp; 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 c38f224b0d9e..9e80f6c2eb2e 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -430,13 +430,15 @@ static void dump_header(struct oom_control *oc, struct task_struct *p) dump_stack(); /* one line summary of the oom killer context. */ - pr_info("oom-kill:constraint=%s,nodemask=%*pbl,task=%s,pid=%5d,uid=%5d", + pr_info("oom-kill:constraint=%s,nodemask=%*pbl", oom_constraint_text[oc->constraint], - nodemask_pr_args(oc->nodemask), - p->comm, p->pid, from_kuid(&init_user_ns, task_uid(p))); + nodemask_pr_args(oc->nodemask)); + mem_cgroup_print_oom_context(oc->memcg, p); cpuset_print_current_mems_allowed(); + pr_cont(",task=%s,pid=%5d,uid=%5d\n", p->comm, p->pid, + from_kuid(&init_user_ns, task_uid(p))); 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()) -- 2.14.1