linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Vinayak Menon <vinmenon@codeaurora.org>
To: akpm@linux-foundation.org, hannes@cmpxchg.org,
	mgorman@techsingularity.net, vbabka@suse.cz, mhocko@suse.com,
	riel@redhat.com, vdavydov.dev@gmail.com,
	anton.vorontsov@linaro.org, minchan@kernel.org,
	shashim@codeaurora.org
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	Vinayak Menon <vinmenon@codeaurora.org>
Subject: [PATCH 1/2 v3] mm: vmscan: do not pass reclaimed slab to vmpressure
Date: Tue, 31 Jan 2017 14:32:08 +0530	[thread overview]
Message-ID: <1485853328-7672-1-git-send-email-vinmenon@codeaurora.org> (raw)
In-Reply-To: <1485504817-3124-1-git-send-email-vinmenon@codeaurora.org>

During global reclaim, the nr_reclaimed passed to vmpressure
includes the pages reclaimed from slab. But the corresponding
scanned slab pages is not passed. This can cause total reclaimed
pages to be greater than scanned, causing an unsigned underflow
in vmpressure resulting in a critical event being sent to root
cgroup. So do not consider reclaimed slab pages for vmpressure
calculation. The reclaimed pages from slab can be excluded because
the freeing of a page by slab shrinking depends on each slab's
object population, making the cost model (i.e. scan:free) different
from that of LRU. Also, not every shrinker accounts the pages it
reclaims. This is a regression introduced by commit 6b4f7799c6a5
("mm: vmscan: invoke slab shrinkers from shrink_zone()").

Signed-off-by: Vinayak Menon <vinmenon@codeaurora.org>
---
 mm/vmscan.c | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/mm/vmscan.c b/mm/vmscan.c
index 947ab6f..8969f8e 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2594,16 +2594,23 @@ static bool shrink_node(pg_data_t *pgdat, struct scan_control *sc)
 				    sc->nr_scanned - nr_scanned,
 				    node_lru_pages);
 
+		/*
+		 * Record the subtree's reclaim efficiency. The reclaimed
+		 * pages from slab is excluded here because the corresponding
+		 * scanned pages is not accounted. Moreover, freeing a page
+		 * by slab shrinking depends on each slab's object population,
+		 * making the cost model (i.e. scan:free) different from that
+		 * of LRU.
+		 */
+		vmpressure(sc->gfp_mask, sc->target_mem_cgroup, true,
+			   sc->nr_scanned - nr_scanned,
+			   sc->nr_reclaimed - nr_reclaimed);
+
 		if (reclaim_state) {
 			sc->nr_reclaimed += reclaim_state->reclaimed_slab;
 			reclaim_state->reclaimed_slab = 0;
 		}
 
-		/* Record the subtree's reclaim efficiency */
-		vmpressure(sc->gfp_mask, sc->target_mem_cgroup, true,
-			   sc->nr_scanned - nr_scanned,
-			   sc->nr_reclaimed - nr_reclaimed);
-
 		if (sc->nr_reclaimed - nr_reclaimed)
 			reclaimable = true;
 
-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a
member of the Code Aurora Forum, hosted by The Linux Foundation

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  parent reply	other threads:[~2017-01-31  9:02 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-27  8:13 [PATCH 1/2 v2] mm: vmscan: do not pass reclaimed slab to vmpressure Vinayak Menon
2017-01-27  8:13 ` [PATCH 2/2] mm: vmpressure: fix sending wrong events on underflow Vinayak Menon
2017-01-30 23:58   ` Minchan Kim
2017-01-30 23:56 ` [PATCH 1/2 v2] mm: vmscan: do not pass reclaimed slab to vmpressure Minchan Kim
2017-01-31  7:48   ` vinayak menon
2017-01-31  9:02 ` Vinayak Menon [this message]
2017-02-01  6:12   ` [PATCH 1/2 v3] " Minchan Kim
2017-02-02 10:44   ` Michal Hocko
2017-02-02 10:48     ` Michal Hocko
2017-02-02 11:25       ` vinayak menon
2017-02-02 11:52         ` Michal Hocko
2017-02-02 15:30           ` vinayak menon
2017-02-02 16:01             ` Michal Hocko
2017-02-03  5:26               ` vinayak menon
2017-02-03 14:59                 ` Michal Hocko
2017-02-06 11:31                   ` vinayak menon
2017-02-02 11:28     ` vinayak menon
2017-02-03  6:17     ` Minchan Kim

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=1485853328-7672-1-git-send-email-vinmenon@codeaurora.org \
    --to=vinmenon@codeaurora.org \
    --cc=akpm@linux-foundation.org \
    --cc=anton.vorontsov@linaro.org \
    --cc=hannes@cmpxchg.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mgorman@techsingularity.net \
    --cc=mhocko@suse.com \
    --cc=minchan@kernel.org \
    --cc=riel@redhat.com \
    --cc=shashim@codeaurora.org \
    --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).