Nick Piggin <[email protected]> wrote:
>
> 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.
Presumably if do_invalidatepage() failed, there's some reason why this page
is not reclaimable (eg, JBD is still dinking with it). Hence there's a
very good chance that kswapd won't be able to reclaim it either.
Adding some instrumentation would be useful: set some new page flag on
these pages and then accumulate the success/failure stats in vmscan.c, see
what they say.
> Signed-off-by: Nick Piggin <[email protected]>
>
> 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);
> + }
A standalone function in swap.c would be nicer.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]