xfs
[Top] [All Lists]

Re: Ext4 and xfs problems in dm-thin on allocation and discard

To: Dave Chinner <david@xxxxxxxxxxxxx>
Subject: Re: Ext4 and xfs problems in dm-thin on allocation and discard
From: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Date: Wed, 20 Jun 2012 05:01:17 -0400
Cc: "Ted Ts'o" <tytso@xxxxxxx>, Mike Snitzer <snitzer@xxxxxxxxxx>, xfs@xxxxxxxxxxx, device-mapper development <dm-devel@xxxxxxxxxx>, Spelic <spelic@xxxxxxxxxxxxx>, Luk???? Czerner <lczerner@xxxxxxxxxx>, linux-ext4@xxxxxxxxxxxxxxx
In-reply-to: <20120619203938.GM25389@dastard>
References: <alpine.LFD.2.00.1206190816440.2241@xxxxxxxxxxxxxxxxxxxxxxxxx> <20120619131649.GA6811@xxxxxxxxxx> <alpine.LFD.2.00.1206191519320.21961@xxxxxxxxxxxxxxxxxxxxxxxxx> <20120619133041.GB6811@xxxxxxxxxx> <4FE0840F.2050704@xxxxxxxxxxxxx> <20120619144413.GA7225@xxxxxxxxxx> <20120619184858.GA8841@xxxxxxxxxx> <20120619200631.GL25389@dastard> <20120619202130.GF22805@xxxxxxxxx> <20120619203938.GM25389@dastard>
User-agent: Mutt/1.5.21 (2010-09-15)
On Wed, Jun 20, 2012 at 06:39:38AM +1000, Dave Chinner wrote:
> Exactly - XFS transactions are fine grained, checkpoints are coarse.
> We don't merge extents freed in fine grained transactions inside
> checkpoints. We probably could, but, well, it's complex to do in XFS
> and merging adjacent requests is something the block layer is
> supposed to do....

Last time I checked it actually tries to do that for discard requests,
but then badly falls flat (=oopses).  That's the reason why the XFS
transaction commit code still uses the highly suboptimal synchronous
blkdev_issue_discard instead of the async variant I wrote when designing
the code.

Another "issue" with the XFS discard pattern and the current block
layer implementation is that XFS frees a lot of small metadata like
inode clusters and btree blocks and discards them as well.  If those
simply fill one of the vectors in a range ATA TRIM command and/or a
queueable command that's not much of an issue, but with the current
combination of non-queueable, non-vetored TRIM that's a fairly nasty
pattern.

So until the block layer is sorted out I can not recommend actually
using -o dicard.  I planned to sort out the block layer issues ASAP
when writing that code, but other things have kept me busy every since.

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