Page reclaim at priority 0 will scan the entire LRU as priority 0 is
considered to be a near OOM condition. Direct reclaim can reach this
priority while still making reclaim progress. This patch avoids
reclaiming at priority 0 unless no reclaim progress was made and
the page allocator would consider firing the OOM killer. The
user-visible impact is that direct reclaim will not easily reach
priority 0 and start swapping prematurely.

Signed-off-by: Mel Gorman <[email protected]>
---
 mm/vmscan.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/mm/vmscan.c b/mm/vmscan.c
index fe73724..65f2fbea 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2382,12 +2382,14 @@ static unsigned long do_try_to_free_pages(struct 
zonelist *zonelist,
        struct zone *zone;
        unsigned long writeback_threshold;
        bool aborted_reclaim;
+       int min_scan_priority = 1;
 
        delayacct_freepages_start();
 
        if (global_reclaim(sc))
                count_vm_event(ALLOCSTALL);
 
+rescan:
        do {
                vmpressure_prio(sc->gfp_mask, sc->target_mem_cgroup,
                                sc->priority);
@@ -2442,7 +2444,7 @@ static unsigned long do_try_to_free_pages(struct zonelist 
*zonelist,
                                                WB_REASON_TRY_TO_FREE_PAGES);
                        sc->may_writepage = 1;
                }
-       } while (--sc->priority >= 0);
+       } while (--sc->priority >= min_scan_priority);
 
 out:
        delayacct_freepages_end();
@@ -2466,6 +2468,12 @@ out:
        if (global_reclaim(sc) && !all_unreclaimable(zonelist, sc))
                return 1;
 
+       /* If the page allocator is considering OOM, rescan at priority 0 */
+       if (min_scan_priority) {
+               min_scan_priority = 0;
+               goto rescan;
+       }
+
        return 0;
 }
 
-- 
1.8.1.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to