linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Vasily Averin <vvs@virtuozzo.com>
To: Michal Hocko <mhocko@kernel.org>,
	Johannes Weiner <hannes@cmpxchg.org>,
	Vladimir Davydov <vdavydov.dev@gmail.com>,
	Andrew Morton <akpm@linux-foundation.org>
Cc: Roman Gushchin <guro@fb.com>, Uladzislau Rezki <urezki@gmail.com>,
	Vlastimil Babka <vbabka@suse.cz>,
	Shakeel Butt <shakeelb@google.com>,
	Mel Gorman <mgorman@techsingularity.net>,
	Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>,
	cgroups@vger.kernel.org, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org, kernel@openvz.org
Subject: [PATCH memcg 2/3] memcg: remove charge forcinig for dying tasks
Date: Wed, 20 Oct 2021 15:13:46 +0300	[thread overview]
Message-ID: <56180e53-b705-b1be-9b60-75e141c8560c@virtuozzo.com> (raw)
In-Reply-To: <cover.1634730787.git.vvs@virtuozzo.com>

ToDo: should we keep task_is_dying() in mem_cgroup_out_of_memory() ?

Signed-off-by: Vasily Averin <vvs@virtuozzo.com>
---
 mm/memcontrol.c | 20 +++++++-------------
 1 file changed, 7 insertions(+), 13 deletions(-)

diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 6da5020a8656..74a7379dbac1 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -239,7 +239,7 @@ enum res_type {
 	     iter != NULL;				\
 	     iter = mem_cgroup_iter(NULL, iter, NULL))
 
-static inline bool should_force_charge(void)
+static inline bool task_is_dying(void)
 {
 	return tsk_is_oom_victim(current) || fatal_signal_pending(current) ||
 		(current->flags & PF_EXITING);
@@ -1575,7 +1575,7 @@ static bool mem_cgroup_out_of_memory(struct mem_cgroup *memcg, gfp_t gfp_mask,
 	 * A few threads which were not waiting at mutex_lock_killable() can
 	 * fail to bail out. Therefore, check again after holding oom_lock.
 	 */
-	ret = should_force_charge() || out_of_memory(&oc);
+	ret = task_is_dying() || out_of_memory(&oc);
 
 unlock:
 	mutex_unlock(&oom_lock);
@@ -2530,6 +2530,7 @@ static int try_charge_memcg(struct mem_cgroup *memcg, gfp_t gfp_mask,
 	struct page_counter *counter;
 	enum oom_status oom_status;
 	unsigned long nr_reclaimed;
+	bool passed_oom = false;
 	bool may_swap = true;
 	bool drained = false;
 	unsigned long pflags;
@@ -2564,15 +2565,6 @@ static int try_charge_memcg(struct mem_cgroup *memcg, gfp_t gfp_mask,
 	if (gfp_mask & __GFP_ATOMIC)
 		goto force;
 
-	/*
-	 * Unlike in global OOM situations, memcg is not in a physical
-	 * memory shortage.  Allow dying and OOM-killed tasks to
-	 * bypass the last charges so that they can exit quickly and
-	 * free their memory.
-	 */
-	if (unlikely(should_force_charge()))
-		goto force;
-
 	/*
 	 * Prevent unbounded recursion when reclaim operations need to
 	 * allocate memory. This might exceed the limits temporarily,
@@ -2630,8 +2622,9 @@ static int try_charge_memcg(struct mem_cgroup *memcg, gfp_t gfp_mask,
 	if (gfp_mask & __GFP_RETRY_MAYFAIL)
 		goto nomem;
 
-	if (fatal_signal_pending(current))
-		goto force;
+	/* Avoid endless loop for tasks bypassed by the oom killer */
+	if (passed_oom && task_is_dying())
+		goto nomem;
 
 	/*
 	 * keep retrying as long as the memcg oom killer is able to make
@@ -2642,6 +2635,7 @@ static int try_charge_memcg(struct mem_cgroup *memcg, gfp_t gfp_mask,
 		       get_order(nr_pages * PAGE_SIZE));
 	switch (oom_status) {
 	case OOM_SUCCESS:
+		passed_oom = true;
 		nr_retries = MAX_RECLAIM_RETRIES;
 		goto retry;
 	case OOM_FAILED:
-- 
2.32.0



  parent reply	other threads:[~2021-10-20 12:14 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-18  8:13 [PATCH memcg 0/1] false global OOM triggered by memcg-limited task Vasily Averin
2021-10-18  9:04 ` Michal Hocko
2021-10-18 10:05   ` Vasily Averin
2021-10-18 10:12     ` Vasily Averin
2021-10-18 11:53     ` Michal Hocko
     [not found]       ` <27dc0c49-a0d6-875b-49c6-0ef5c0cc3ac8@virtuozzo.com>
2021-10-18 12:27         ` Michal Hocko
2021-10-18 15:07           ` Shakeel Butt
2021-10-18 16:51             ` Michal Hocko
2021-10-18 17:13               ` Shakeel Butt
2021-10-18 18:52             ` Vasily Averin
2021-10-18 19:18               ` Vasily Averin
2021-10-19  5:34                 ` Shakeel Butt
2021-10-19  5:33               ` Shakeel Butt
2021-10-19  6:42                 ` Vasily Averin
2021-10-19  8:47                   ` Michal Hocko
2021-10-19  6:30       ` Vasily Averin
2021-10-19  8:49         ` Michal Hocko
2021-10-19 10:30           ` Vasily Averin
2021-10-19 11:54             ` Michal Hocko
2021-10-19 12:04               ` Michal Hocko
2021-10-19 13:26                 ` Vasily Averin
2021-10-19 14:13                   ` Michal Hocko
2021-10-19 14:19                     ` Michal Hocko
2021-10-19 19:09                     ` Vasily Averin
2021-10-20  8:07                       ` [PATCH memcg v4] memcg: prohibit unconditional exceeding the limit of dying tasks Vasily Averin
2021-10-20  8:43                         ` Michal Hocko
2021-10-20 12:11                           ` [PATCH memcg RFC 0/3] " Vasily Averin
     [not found]                           ` <cover.1634730787.git.vvs@virtuozzo.com>
2021-10-20 12:12                             ` [PATCH memcg 1/3] mm: do not firce global OOM from inside " Vasily Averin
2021-10-20 12:33                               ` Michal Hocko
2021-10-20 13:52                                 ` Vasily Averin
2021-10-20 12:13                             ` Vasily Averin [this message]
2021-10-20 12:41                               ` [PATCH memcg 2/3] memcg: remove charge forcinig for " Michal Hocko
2021-10-20 14:21                                 ` Vasily Averin
2021-10-20 14:57                                   ` Michal Hocko
2021-10-20 15:20                                     ` Tetsuo Handa
2021-10-21 10:03                                       ` Michal Hocko
2021-10-20 12:14                             ` [PATCH memcg 3/3] memcg: handle memcg oom failures Vasily Averin
2021-10-20 13:02                               ` Michal Hocko
2021-10-20 15:46                                 ` Vasily Averin
2021-10-21 11:49                                   ` Michal Hocko
2021-10-21 15:05                                     ` Vasily Averin
2021-10-21 16:47                                       ` Michal Hocko
2021-10-22  8:10                                         ` [PATCH memcg v2 0/2] memcg: prohibit unconditional exceeding the limit of dying tasks Vasily Averin
     [not found]                                         ` <cover.1634889066.git.vvs@virtuozzo.com>
2021-10-22  8:11                                           ` [PATCH memcg v2 1/2] mm, oom: do not trigger out_of_memory from the #PF Vasily Averin
2021-10-22  8:55                                             ` Michal Hocko
2021-10-22  8:11                                           ` [PATCH memcg v2 2/2] memcg: prohibit unconditional exceeding the limit of dying tasks Vasily Averin
2021-10-22  9:10                                             ` Michal Hocko
2021-10-23 13:18                                               ` [PATCH memcg v3 0/3] " Vasily Averin
     [not found]                                               ` <cover.1634994605.git.vvs@virtuozzo.com>
2021-10-23 13:19                                                 ` [PATCH memcg v3 1/3] mm, oom: pagefault_out_of_memory: don't force global OOM for " Vasily Averin
2021-10-25  9:27                                                   ` Michal Hocko
2021-10-23 13:20                                                 ` [PATCH memcg v3 2/3] mm, oom: do not trigger out_of_memory from the #PF Vasily Averin
2021-10-23 15:01                                                   ` Tetsuo Handa
2021-10-23 19:15                                                     ` Vasily Averin
2021-10-25  8:04                                                     ` Michal Hocko
2021-10-26 13:56                                                       ` Tetsuo Handa
2021-10-26 14:07                                                         ` Michal Hocko
2021-10-25  9:34                                                   ` Michal Hocko
2021-10-23 13:20                                                 ` [PATCH memcg v3 3/3] memcg: prohibit unconditional exceeding the limit of dying tasks Vasily Averin
2021-10-25  9:36                                                   ` Michal Hocko
2021-10-27 22:36                                                     ` Andrew Morton
2021-10-28  7:22                                                       ` Vasily Averin
2021-10-29  7:46                                                         ` Greg Kroah-Hartman
2021-10-29  7:58                                                       ` Michal Hocko
2021-10-21  8:03   ` [PATCH memcg 0/1] false global OOM triggered by memcg-limited task Vasily Averin
2021-10-21 11:49     ` Michal Hocko
2021-10-21 13:24       ` Vasily Averin

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=56180e53-b705-b1be-9b60-75e141c8560c@virtuozzo.com \
    --to=vvs@virtuozzo.com \
    --cc=akpm@linux-foundation.org \
    --cc=cgroups@vger.kernel.org \
    --cc=guro@fb.com \
    --cc=hannes@cmpxchg.org \
    --cc=kernel@openvz.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mgorman@techsingularity.net \
    --cc=mhocko@kernel.org \
    --cc=penguin-kernel@i-love.sakura.ne.jp \
    --cc=shakeelb@google.com \
    --cc=urezki@gmail.com \
    --cc=vbabka@suse.cz \
    --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;
as well as URLs for NNTP newsgroup(s).