• K
    vmscan: narrow the scenarios in whcih lumpy reclaim uses synchrounous reclaim · 7d3579e8
    KOSAKI Motohiro 提交于
    shrink_page_list() can decide to give up reclaiming a page under a
    number of conditions such as
    
      1. trylock_page() failure
      2. page is unevictable
      3. zone reclaim and page is mapped
      4. PageWriteback() is true
      5. page is swapbacked and swap is full
      6. add_to_swap() failure
      7. page is dirty and gfpmask don't have GFP_IO, GFP_FS
      8. page is pinned
      9. IO queue is congested
     10. pageout() start IO, but not finished
    
    With lumpy reclaim, failures result in entering synchronous lumpy reclaim
    but this can be unnecessary.  In cases (2), (3), (5), (6), (7) and (8),
    there is no point retrying.  This patch causes lumpy reclaim to abort when
    it is known it will fail.
    
    Case (9) is more interesting. current behavior is,
      1. start shrink_page_list(async)
      2. found queue_congested()
      3. skip pageout write
      4. still start shrink_page_list(sync)
      5. wait on a lot of pages
      6. again, found queue_congested()
      7. give up pageout write again
    
    So, it's useless time wasting.  However, just skipping page reclaim is
    also notgood as x86 allocating a huge page needs 512 pages for example.
    It can have more dirty pages than queue congestion threshold (~=128).
    
    After this patch, pageout() behaves as follows;
    
     - If order > PAGE_ALLOC_COSTLY_ORDER
    	Ignore queue congestion always.
     - If order <= PAGE_ALLOC_COSTLY_ORDER
    	skip write page and disable lumpy reclaim.
    Signed-off-by: NKOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Signed-off-by: NMel Gorman <mel@csn.ul.ie>
    Reviewed-by: NKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Minchan Kim <minchan.kim@gmail.com>
    Cc: Wu Fengguang <fengguang.wu@intel.com>
    Cc: Rik van Riel <riel@redhat.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    7d3579e8
vmscan.c 83.1 KB