2018-05-18 03:08:09

by 禹舟键

[permalink] [raw]
Subject: [PATCH v2] Print the memcg's name when system-wide OOM happened

From: yuzhoujian <[email protected]>

The dump_header does not print the memcg's name when the system
oom happened. So users cannot locate the certain container which
contains the task that has been killed by the oom killer. System
oom report will contain the memcg's name after this patch.

Changes since v1:
- replace adding mem_cgroup_print_oom_info with printing the memcg's
name only.

Signed-off-by: yuzhoujian <[email protected]>
---
mm/oom_kill.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/mm/oom_kill.c b/mm/oom_kill.c
index 8ba6cb88cf58..b0abb5930232 100644
--- a/mm/oom_kill.c
+++ b/mm/oom_kill.c
@@ -433,6 +433,9 @@ static void dump_header(struct oom_control *oc, struct task_struct *p)
if (is_memcg_oom(oc))
mem_cgroup_print_oom_info(oc->memcg, p);
else {
+ pr_info("Task in ");
+ pr_cont_cgroup_path(task_cgroup(p, memory_cgrp_id));
+ pr_cont(" killed as a result of limit of ");
show_mem(SHOW_MEM_FILTER_NODES, oc->nodemask);
if (is_dump_unreclaim_slabs())
dump_unreclaimable_slab();
--
2.14.1



2018-05-18 06:24:02

by Michal Hocko

[permalink] [raw]
Subject: Re: [PATCH v2] Print the memcg's name when system-wide OOM happened

On Fri 18-05-18 04:07:14, ufo19890607 wrote:
> From: yuzhoujian <[email protected]>
>
> The dump_header does not print the memcg's name when the system
> oom happened. So users cannot locate the certain container which
> contains the task that has been killed by the oom killer. System
> oom report will contain the memcg's name after this patch.

It would be great to mention what you can the name for.

> Changes since v1:
> - replace adding mem_cgroup_print_oom_info with printing the memcg's
> name only.
>
> Signed-off-by: yuzhoujian <[email protected]>
> ---
> mm/oom_kill.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/mm/oom_kill.c b/mm/oom_kill.c
> index 8ba6cb88cf58..b0abb5930232 100644
> --- a/mm/oom_kill.c
> +++ b/mm/oom_kill.c
> @@ -433,6 +433,9 @@ static void dump_header(struct oom_control *oc, struct task_struct *p)
> if (is_memcg_oom(oc))
> mem_cgroup_print_oom_info(oc->memcg, p);
> else {
> + pr_info("Task in ");
> + pr_cont_cgroup_path(task_cgroup(p, memory_cgrp_id));
> + pr_cont(" killed as a result of limit of ");
> show_mem(SHOW_MEM_FILTER_NODES, oc->nodemask);
> if (is_dump_unreclaim_slabs())
> dump_unreclaimable_slab();

I bet this doesn't compile with CONFIG_MEMCG=n. You either need to put
these pr_info lines inside ifdef CONFIG_MEMCG or add helper. The later
would reduce code duplication.
--
Michal Hocko
SUSE Labs