linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Michal Hocko <mhocko@kernel.org>
To: Yafang Shao <laoar.shao@gmail.com>
Cc: akpm@linux-foundation.org, shakeelb@google.com,
	hannes@cmpxchg.org, guro@fb.com, gthelen@google.com,
	linux-mm@kvack.org
Subject: Re: [PATCH v2 2/2] mm, memcg: don't try to kill a process if memcg is not populated
Date: Mon, 4 May 2020 10:18:48 +0200	[thread overview]
Message-ID: <20200504081848.GJ22838@dhcp22.suse.cz> (raw)
In-Reply-To: <20200504042621.10334-3-laoar.shao@gmail.com>

[It would be really great if a newer version was posted only after there
was a wider consensus on the approach.]

On Mon 04-05-20 00:26:21, Yafang Shao wrote:
> Recently Shakeel reported a issue which also confused me several months
> earlier. Bellow is his report -
> Lowering memory.max can trigger an oom-kill if the reclaim does not
> succeed. However if oom-killer does not find a process for killing, it
> dumps a lot of warnings.
> Deleting a memcg does not reclaim memory from it and the memory can
> linger till there is a memory pressure. One normal way to proactively
> reclaim such memory is to set memory.max to 0 just before deleting the
> memcg. However if some of the memcg's memory is pinned by others, this
> operation can trigger an oom-kill without any process and thus can log a
> lot of un-needed warnings. So, ignore all such warnings from memory.max.
> 
> A better way to avoid this issue is to avoid trying to kill a process if
> memcg is not populated.
> Note that OOM is different from OOM kill. OOM is a status that the
> system or memcg is out of memory, while OOM kill is a result that a
> process inside this memcg is killed when this memcg is in OOM status.

Agreed.

> That is the same reason why there're both MEMCG_OOM event and
> MEMCG_OOM_KILL event. If we have already known that there's nothing to
> kill, i.e. the memcg is not populated, then we don't need a try.

OK, but you are not explaining why a silent failure is really better
than no oom report under oom situation. With your patch, there is
no failure reported to the user and there is also no sign that there
might be a problem that memcg leaves memory behind that is not bound to
any (killable) process. This could be an important information.

Besides that I really do not see any actual problem that this would be
fixing. Reducing the hard limit is an operation which might trigger the
oom killer and leave an oom report behind. Having an OOM without any
tasks is pretty much a corner case and making it silent just makes
it harder to debug.

> Basically why setting memory.max to 0 is better than setting memory.high to
> 0 before deletion. The reason is remote charging. High reclaim does not
> work for remote memcg and the usage can go till max or global pressure.
> 
> [shakeelb@google.com: improve commit log]
> Signed-off-by: Yafang Shao <laoar.shao@gmail.com>
> Reviewed-by: Shakeel Butt <shakeelb@google.com>
> Cc: Johannes Weiner <hannes@cmpxchg.org>
> Cc: Michal Hocko <mhocko@kernel.org>
> Cc: Roman Gushchin <guro@fb.com>
> Cc: Greg Thelen <gthelen@google.com>
> ---
>  mm/memcontrol.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index 985edce98491..29afe3df9d98 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@ -6102,6 +6102,10 @@ static ssize_t memory_max_write(struct kernfs_open_file *of,
>  		}
>  
>  		memcg_memory_event(memcg, MEMCG_OOM);
> +
> +		if (!cgroup_is_populated(memcg->css.cgroup))
> +			break;
> +
>  		if (!mem_cgroup_oom_kill(memcg, GFP_KERNEL, 0))
>  			break;
>  	}
> -- 
> 2.18.2

-- 
Michal Hocko
SUSE Labs


  reply	other threads:[~2020-05-04  8:18 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-04  4:26 [PATCH v2 0/2]memcg oom: don't try to kill a process if there is no process Yafang Shao
2020-05-04  4:26 ` [PATCH v2 1/2] mm, memcg: rename mem_cgroup_out_of_memory() Yafang Shao
2020-05-04  7:59   ` Michal Hocko
2020-05-04 15:50   ` Chris Down
2020-05-04  4:26 ` [PATCH v2 2/2] mm, memcg: don't try to kill a process if memcg is not populated Yafang Shao
2020-05-04  8:18   ` Michal Hocko [this message]
2020-05-04 12:34     ` Yafang Shao
2020-05-04 12:46       ` Michal Hocko
2020-05-04 15:24         ` Yafang Shao
2020-05-04 16:11           ` Michal Hocko
2020-05-04 17:04             ` Roman Gushchin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200504081848.GJ22838@dhcp22.suse.cz \
    --to=mhocko@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=gthelen@google.com \
    --cc=guro@fb.com \
    --cc=hannes@cmpxchg.org \
    --cc=laoar.shao@gmail.com \
    --cc=linux-mm@kvack.org \
    --cc=shakeelb@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).