lkml.org 
[lkml]   [2010]   [Sep]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 08/10] vmscan: isolated_lru_pages() stop neighbour search if neighbour cannot be isolated
    On Mon, Sep 06, 2010 at 06:47:31PM +0800, Mel Gorman wrote:
    > From: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    >
    > isolate_lru_pages() does not just isolate LRU tail pages, but also isolate
    > neighbour pages of the eviction page. The neighbour search does not stop even
    > if neighbours cannot be isolated which is excessive as the lumpy reclaim will
    > no longer result in a successful higher order allocation. This patch stops
    > the PFN neighbour pages if an isolation fails and moves on to the next block.
    >
    > Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    > Signed-off-by: Mel Gorman <mel@csn.ul.ie>
    > ---
    > mm/vmscan.c | 24 ++++++++++++++++--------
    > 1 files changed, 16 insertions(+), 8 deletions(-)
    >
    > diff --git a/mm/vmscan.c b/mm/vmscan.c
    > index 64f9ca5..ff52b46 100644
    > --- a/mm/vmscan.c
    > +++ b/mm/vmscan.c
    > @@ -1047,14 +1047,18 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan,
    > continue;
    >
    > /* Avoid holes within the zone. */
    > - if (unlikely(!pfn_valid_within(pfn)))
    > + if (unlikely(!pfn_valid_within(pfn))) {
    > + nr_lumpy_failed++;
    > break;
    > + }
    >
    > cursor_page = pfn_to_page(pfn);
    >
    > /* Check that we have not crossed a zone boundary. */
    > - if (unlikely(page_zone_id(cursor_page) != zone_id))
    > - continue;
    > + if (unlikely(page_zone_id(cursor_page) != zone_id)) {
    > + nr_lumpy_failed++;
    > + break;
    > + }
    >
    > /*
    > * If we don't have enough swap space, reclaiming of
    > @@ -1062,8 +1066,10 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan,
    > * pointless.
    > */
    > if (nr_swap_pages <= 0 && PageAnon(cursor_page) &&
    > - !PageSwapCache(cursor_page))
    > - continue;
    > + !PageSwapCache(cursor_page)) {
    > + nr_lumpy_failed++;
    > + break;
    > + }
    >
    > if (__isolate_lru_page(cursor_page, mode, file) == 0) {
    > list_move(&cursor_page->lru, dst);
    > @@ -1074,9 +1080,11 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan,
    > nr_lumpy_dirty++;
    > scan++;
    > } else {
    > - if (mode == ISOLATE_BOTH &&
    > - page_count(cursor_page))
    > - nr_lumpy_failed++;
    > + /* the page is freed already. */
    > + if (!page_count(cursor_page))
    > + continue;
    > + nr_lumpy_failed++;
    > + break;
    > }
    > }

    The many nr_lumpy_failed++ can be moved here:

    if (pfn < end_pfn)
    nr_lumpy_failed++;

    Reviewed-by: Wu Fengguang <fengguang.wu@intel.com>


    \
     
     \ /
      Last update: 2010-09-08 13:41    [W:0.025 / U:29.660 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site