[patch] vm early reclaim orphaned pages

From: Nick Piggin
Date: Thu Jun 16 2005 - 22:24:28 EST


This any good?

The workload in question is bonnie, with ext3 data=ordered.
Chris has some ReiserFS workloads where orphaned pages build
up that I think were improved.


--
SUSE Labs, Novell Inc.


We have workloads where orphaned pages build up and appear to slow
the system down when it starts reclaiming memory.

Stripping the referenced bit from orphaned pages and putting them
on the end of the inactive list should help improve reclaim.

Signed-off-by: Nick Piggin <npiggin@xxxxxxx>

Index: linux-2.6/mm/truncate.c
===================================================================
--- linux-2.6.orig/mm/truncate.c 2005-06-01 16:09:34.000000000 +1000
+++ linux-2.6/mm/truncate.c 2005-06-17 13:01:01.090334444 +1000
@@ -45,11 +45,30 @@
static void
truncate_complete_page(struct address_space *mapping, struct page *page)
{
+ int orphaned = 0;
+
if (page->mapping != mapping)
return;

if (PagePrivate(page))
- do_invalidatepage(page, 0);
+ orphaned = !(do_invalidatepage(page, 0));
+
+ if (orphaned) {
+ /*
+ * Put orphaned pagecache on the end of the inactive
+ * list so it can get reclaimed quickly.
+ */
+ unsigned long flags;
+ struct zone *zone = page_zone(page);
+ spin_lock_irqsave(&zone->lru_lock, flags);
+ ClearPageReferenced(page);
+ if (PageLRU(page)) {
+ list_move_tail(&page->lru, &zone->inactive_list);
+ if (PageActive(page))
+ ClearPageActive(page);
+ }
+ spin_unlock_irqrestore(&zone->lru_lock, flags);
+ }

clear_page_dirty(page);
ClearPageUptodate(page);