summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2017-02-21 05:33:27 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2017-02-21 05:33:26 -0800
commit6cf18cf0027ecbd080c4eca23fe94f4c5af97560 (patch)
treed24c60abf30ae63c4016ada2fbeeba0499fefd1d
parent1449de51262fb9c9e305145d6bdbc2ce5d1db907 (diff)
parent280a2d368388fcb7362e09c6bef32f4a007af396 (diff)
Merge "mm: vmscan: do not pass reclaimed slab to vmpressure"
-rw-r--r--mm/vmscan.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c
index ff408638fd95..f55275d21a97 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2547,15 +2547,23 @@ static bool shrink_zone(struct zone *zone, struct scan_control *sc,
sc->nr_scanned - nr_scanned,
zone_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,
+ 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;
}
- vmpressure(sc->gfp_mask, sc->target_mem_cgroup,
- sc->nr_scanned - nr_scanned,
- sc->nr_reclaimed - nr_reclaimed);
-
if (sc->nr_reclaimed - nr_reclaimed)
reclaimable = true;