[Top] [All Lists]

Re: [RFC PATCH] fs,xfs: Use __GFP_MOVABLE for XFS buffers

To: Mel Gorman <mel@xxxxxxxxx>
Subject: Re: [RFC PATCH] fs,xfs: Use __GFP_MOVABLE for XFS buffers
From: Dave Chinner <david@xxxxxxxxxxxxx>
Date: Fri, 10 Sep 2010 10:37:06 +1000
Cc: xfs@xxxxxxxxxxx, Alex Elder <aelder@xxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx, linux-mm@xxxxxxxxx
In-reply-to: <20100909111131.GO29263@xxxxxxxxx>
References: <20100909111131.GO29263@xxxxxxxxx>
User-agent: Mutt/1.5.20 (2009-06-14)
On Thu, Sep 09, 2010 at 12:11:32PM +0100, Mel Gorman wrote:
> Fragmentation avoidance in the kernel depends on reclaimable and movable
> allocations being marked-up at page allocation time. Reclaimable allocations
> refer to slab caches such as inode caches which can be reclaimed although
> not necessarily in a targetted fashion. Movable pages are those pages that
> can be moved to backing storage (during page reclaim) or migrated.
> When testing against XFS, it was noticed that large page allocation rates
> against XFS were far lower than expected in comparison to ext3. Investigation
> showed that buffer pages allocated by XFS are placed on the LRU but not
> marked __GFP_MOVABLE at allocation time.
> This patch updates xb_to_gfp() to specify __GFP_MOVABLE and is correct iff
> all pages allocated from a mask derived from xb_to_gfp() are guaranteed to
> be movable be it via page reclaim or page migration. It needs an XFS expert
> to make that determination but when applied, huge page allocation success
> rates are similar to those seen on tests backed by ext3.
> Signed-off-by: Mel Gorman <mel@xxxxxxxxx>

I don't see any problems with this, but I don't think it's going to
be useful for very long given the work I'm doing on the XFS buffer
cache right now - converting it to caching buffers with a shrinker
traversed LRU for reclaim instead of using the page cache and hoping
reclaim doesn't trash the working set.

I'm hoping to have it done in time for the .37 merge window, so
adding __GFP_MOVEABLE now might not to even see a release....


Dave Chinner

<Prev in Thread] Current Thread [Next in Thread>