On Mon, Dec 06, 2010 at 02:29:10AM +0900, Minchan Kim wrote: > Recently, there are reported problem about thrashing. > (http://marc.info/?l=rsync&m=128885034930933&w=2) > It happens by backup workloads(ex, nightly rsync). > That's because the workload makes just use-once pages > and touches pages twice. It promotes the page into > active list so that it results in working set page eviction. > > Some app developer want to support POSIX_FADV_NOREUSE. > But other OSes don't support it, either. > (http://marc.info/?l=linux-mm&m=128928979512086&w=2) > > By other approach, app developers use POSIX_FADV_DONTNEED. > But it has a problem. If kernel meets page is writing > during invalidate_mapping_pages, it can't work. > It is very hard for application programmer to use it. > Because they always have to sync data before calling > fadivse(..POSIX_FADV_DONTNEED) to make sure the pages could > be discardable. At last, they can't use deferred write of kernel > so that they could see performance loss. > (http://insights.oetiker.ch/linux/fadvise.html) > > In fact, invalidation is very big hint to reclaimer. > It means we don't use the page any more. So let's move > the writing page into inactive list's head. > > Why I need the page to head, Dirty/Writeback page would be flushed > sooner or later. It can prevent writeout of pageout which is less > effective than flusher's writeout. > > Originally, I reused lru_demote of Peter with some change so added > his Signed-off-by. > > Reported-by: Ben Gamari <bgamari.foss@xxxxxxxxx> > Signed-off-by: Minchan Kim <minchan.kim@xxxxxxxxx> > Signed-off-by: Peter Zijlstra <peterz@xxxxxxxxxxxxx> > Acked-by: Rik van Riel <riel@xxxxxxxxxx> > Reviewed-by: KOSAKI Motohiro <kosaki.motohiro@xxxxxxxxxxxxxx> > Cc: Wu Fengguang <fengguang.wu@xxxxxxxxx> > Cc: Johannes Weiner <hannes@xxxxxxxxxxx> > Cc: Nick Piggin <npiggin@xxxxxxxxx> > Cc: Mel Gorman <mel@xxxxxxxxx> > > Andrew. Before applying this series, please drop below two patches. > mm-deactivate-invalidated-pages.patch > mm-deactivate-invalidated-pages-fix.patch > > Changelog since v3: > - Change function comments - suggested by Johannes > - Change function name - suggested by Johannes > - add only dirty/writeback pages to deactive pagevec > > Changelog since v2: > - mapped page leaves alone - suggested by Mel > - pass part related PG_reclaim in next patch. > > Changelog since v1: > - modify description > - correct typo > - add some comment > > Signed-off-by: Minchan Kim <minchan.kim@xxxxxxxxx> > --- > include/linux/swap.h | 1 + > mm/swap.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++ > mm/truncate.c | 17 ++++++++-- > 3 files changed, 92 insertions(+), 4 deletions(-) > > diff --git a/include/linux/swap.h b/include/linux/swap.h > index eba53e7..605ab62 100644 > --- a/include/linux/swap.h > +++ b/include/linux/swap.h > @@ -213,6 +213,7 @@ extern void mark_page_accessed(struct page *); > extern void lru_add_drain(void); > extern int lru_add_drain_all(void); > extern void rotate_reclaimable_page(struct page *page); > +extern void deactivate_page(struct page *page); > extern void swap_setup(void); > > extern void add_page_to_unevictable_list(struct page *page); > diff --git a/mm/swap.c b/mm/swap.c > index d5822b0..1f36f6f 100644 > --- a/mm/swap.c > +++ b/mm/swap.c > @@ -39,6 +39,8 @@ int page_cluster; > > static DEFINE_PER_CPU(struct pagevec[NR_LRU_LISTS], lru_add_pvecs); > static DEFINE_PER_CPU(struct pagevec, lru_rotate_pvecs); > +static DEFINE_PER_CPU(struct pagevec, lru_deactivate_pvecs); > + > > /* > * This path almost never happens for VM activity - pages are normally Unnecessary whitespace change there but otherwise; Acked-by: Mel Gorman <mel@xxxxxxxxx> -- Mel Gorman Part-time Phd Student Linux Technology Center University of Limerick IBM Dublin Software Lab -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom policy in Canada: sign http://dissolvethecrtc.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>