diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2017-02-21 05:33:27 -0800 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-02-21 05:33:26 -0800 |
| commit | 6cf18cf0027ecbd080c4eca23fe94f4c5af97560 (patch) | |
| tree | d24c60abf30ae63c4016ada2fbeeba0499fefd1d | |
| parent | 1449de51262fb9c9e305145d6bdbc2ce5d1db907 (diff) | |
| parent | 280a2d368388fcb7362e09c6bef32f4a007af396 (diff) | |
Merge "mm: vmscan: do not pass reclaimed slab to vmpressure"
| -rw-r--r-- | mm/vmscan.c | 16 |
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; |
