lkml.org 
[lkml]   [2010]   [Jul]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 4/8] vmscan: Do not writeback filesystem pages in direct reclaim
    On Wed, Jul 21, 2010 at 04:28:44PM +0200, Johannes Weiner wrote:
    > On Wed, Jul 21, 2010 at 02:38:57PM +0100, Mel Gorman wrote:
    > > Here is an updated version. Thanks very much
    > >
    > > ==== CUT HERE ====
    > > vmscan: Do not writeback filesystem pages in direct reclaim
    > >
    > > When memory is under enough pressure, a process may enter direct
    > > reclaim to free pages in the same manner kswapd does. If a dirty page is
    > > encountered during the scan, this page is written to backing storage using
    > > mapping->writepage. This can result in very deep call stacks, particularly
    > > if the target storage or filesystem are complex. It has already been observed
    > > on XFS that the stack overflows but the problem is not XFS-specific.
    > >
    > > This patch prevents direct reclaim writing back filesystem pages by checking
    > > if current is kswapd or the page is anonymous before writing back. If the
    > > dirty pages cannot be written back, they are placed back on the LRU lists
    > > for either background writing by the BDI threads or kswapd. If in direct
    > > lumpy reclaim and dirty pages are encountered, the process will stall for
    > > the background flusher before trying to reclaim the pages again.
    > >
    > > As the call-chain for writing anonymous pages is not expected to be deep
    > > and they are not cleaned by flusher threads, anonymous pages are still
    > > written back in direct reclaim.
    > >
    > > Signed-off-by: Mel Gorman <mel@csn.ul.ie>
    > > Acked-by: Rik van Riel <riel@redhat.com>
    >
    > Cool!
    >
    > Except for one last tiny thing...
    >
    > > @@ -858,7 +872,7 @@ keep:
    > >
    > > free_page_list(&free_pages);
    > >
    > > - list_splice(&ret_pages, page_list);
    >
    > This will lose all retry pages forever, I think.
    >

    Above this is

    while (!list_empty(page_list)) {
    ...
    }

    page_list should be empty and keep_locked is putting the pages on ret_pages
    already so I think it's ok.

    > > + *nr_still_dirty = nr_dirty;
    > > count_vm_events(PGACTIVATE, pgactivate);
    > > return nr_reclaimed;
    > > }
    >
    > Otherwise,
    > Reviewed-by: Johannes Weiner <hannes@cmpxchg.org>
    >

    Thanks!

    --
    Mel Gorman
    Part-time Phd Student Linux Technology Center
    University of Limerick IBM Dublin Software Lab


    \
     
     \ /
      Last update: 2010-07-21 16:33    [W:0.032 / U:90.088 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site