From: Yafang Shao <laoar.shao@gmail.com>
To: hannes@cmpxchg.org, mhocko@kernel.org, vdavydov.dev@gmail.com,
akpm@linux-foundation.org
Cc: linux-mm@kvack.org, Yafang Shao <laoar.shao@gmail.com>
Subject: [PATCH 0/3] memcg oom: bail out from the charge path if no victim found
Date: Sat, 18 Apr 2020 11:13:08 -0400 [thread overview]
Message-ID: <20200418151311.7397-1-laoar.shao@gmail.com> (raw)
Without considering the manually triggered OOM, if no victim found in
system OOM, the system will be deadlocked on memory, however if no
victim found in memcg OOM, it can charge successfully and runs well.
This behavior in memcg oom is not proper because that can prevent the
memcg from being limited.
Take an easy example.
$ cd /sys/fs/cgroup/foo/
$ echo $$ > cgroup.procs
$ echo 200M > memory.max
$ cat memory.max
209715200
$ echo -1000 > /proc/$$/oom_score_adj
Then, let's run a memhog task in memcg foo, which will allocate 1G
memory and keeps running.
$ /home/yafang/test/memhog &
Then memory.current will be greater than memory.max. Run bellow command
in another shell.
$ cat /sys/fs/cgroup/foo/memory.current
1097228288
The tasks which have already allocated memory and won't allocate new
memory still runs well. This behavior makes nonsense.
This patch is to improve it.
If no victim found in memcg oom, we should force the current task to
wait until there's available pages. That is similar with the behavior in
memcg1 when oom_kill_disable is set.
Patch #1 and #2 are the preparation of patch #3.
Yafang Shao (3):
mm: change the return type of out_of_memory()
mm, memcg: introduce a new helper task_in_memcg_oom_set()
memcg oom: bail out from the charge path if no victim found
include/linux/memcontrol.h | 30 ++++++++++++++++++
include/linux/oom.h | 9 +++++-
include/linux/sched.h | 1 +
mm/memcontrol.c | 63 ++++++++++++++++++++------------------
mm/oom_kill.c | 36 +++++++++++++++++-----
mm/page_alloc.c | 3 +-
6 files changed, 104 insertions(+), 38 deletions(-)
--
2.18.2
next reply other threads:[~2020-04-18 15:13 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-18 15:13 Yafang Shao [this message]
2020-04-18 15:13 ` [PATCH 1/3] mm: change the return type of out_of_memory() Yafang Shao
2020-04-18 15:13 ` [PATCH 2/3] mm, memcg: introduce a new helper task_in_memcg_oom_set() Yafang Shao
2020-04-18 15:13 ` [PATCH 3/3] memcg oom: bail out from the charge path if no victim found Yafang Shao
2020-04-20 8:13 ` Michal Hocko
2020-04-20 8:52 ` Yafang Shao
2020-04-20 9:14 ` Michal Hocko
2020-04-20 9:58 ` Yafang Shao
2020-04-20 10:31 ` Michal Hocko
2020-04-20 10:51 ` Yafang Shao
2020-04-20 11:10 ` Michal Hocko
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=20200418151311.7397-1-laoar.shao@gmail.com \
--to=laoar.shao@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=hannes@cmpxchg.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@kernel.org \
--cc=vdavydov.dev@gmail.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