lkml.org 
[lkml]   [2008]   [Jan]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [patch 00/19] VM pageout scalability improvements
    * Rik van Riel <riel@redhat.com> [2008-01-08 15:59:39]:

    > On large memory systems, the VM can spend way too much time scanning
    > through pages that it cannot (or should not) evict from memory. Not
    > only does it use up CPU time, but it also provokes lock contention
    > and can leave large systems under memory presure in a catatonic state.
    >
    > Against 2.6.24-rc6-mm1
    >
    > This patch series improves VM scalability by:
    >
    > 1) making the locking a little more scalable
    >
    > 2) putting filesystem backed, swap backed and non-reclaimable pages
    > onto their own LRUs, so the system only scans the pages that it
    > can/should evict from memory
    >
    > 3) switching to SEQ replacement for the anonymous LRUs, so the
    > number of pages that need to be scanned when the system
    > starts swapping is bound to a reasonable number
    >
    > More info on the overall design can be found at:
    >
    > http://linux-mm.org/PageReplacementDesign
    >
    >
    > Changelog:
    > - merge memcontroller split LRU code into the main split LRU patch,
    > since it is not functionally different (it was split up only to help
    > people who had seen the last version of the patch series review it)
    > - drop the page_file_cache debugging patch, since it never triggered
    > - reintroduce code to not scan anon list if swap is full
    > - add code to scan anon list if page cache is very small already
    > - use lumpy reclaim more aggressively for smaller order > 1 allocations
    >

    Hi, Rik,

    I've just started the patch series, the compile fails for me on a
    powerpc box. global_lru_pages() is defined under CONFIG_PM, but used
    else where in mm/page-writeback.c. None of the global_lru_pages()
    parameters depend on CONFIG_PM. Here's a simple patch to fix it.

    diff --git a/mm/page-writeback.c b/mm/page-writeback.c
    diff --git a/mm/vmscan.c b/mm/vmscan.c
    index b14e188..39e6aef 100644
    --- a/mm/vmscan.c
    +++ b/mm/vmscan.c
    @@ -1920,6 +1920,14 @@ void wakeup_kswapd(struct zone *zone, int order)
    wake_up_interruptible(&pgdat->kswapd_wait);
    }

    +unsigned long global_lru_pages(void)
    +{
    + return global_page_state(NR_ACTIVE_ANON)
    + + global_page_state(NR_ACTIVE_FILE)
    + + global_page_state(NR_INACTIVE_ANON)
    + + global_page_state(NR_INACTIVE_FILE);
    +}
    +
    #ifdef CONFIG_PM
    /*
    * Helper function for shrink_all_memory(). Tries to reclaim 'nr_pages' pages
    @@ -1968,14 +1976,6 @@ static unsigned long shrink_all_zones(unsigned long nr_pages, int prio,
    return ret;
    }

    -unsigned long global_lru_pages(void)
    -{
    - return global_page_state(NR_ACTIVE_ANON)
    - + global_page_state(NR_ACTIVE_FILE)
    - + global_page_state(NR_INACTIVE_ANON)
    - + global_page_state(NR_INACTIVE_FILE);
    -}
    -
    /*
    * Try to free `nr_pages' of memory, system-wide, and return the number of
    * freed pages.
    --
    Warm Regards,
    Balbir Singh
    Linux Technology Center
    IBM, ISTL


    \
     
     \ /
      Last update: 2008-01-11 11:45    [W:2.404 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site