On Thu, Mar 01, 2012 at 05:27:09PM +1100, Dave Chinner wrote:
> One other thing the ext4 tracing implementation does is merge
> adjacent ranges, whereas the XFS implementation does not. XFS has
> more tracking complexity than ext4, though, in that it tracks free
> extents in multiple concurrent journal commits whereas ext4 only has
> to track across a single journal commit. Hence ext4 can merge
> without having to care about where the adjacent range is being
> committed in the same journal checkpoint.
> Further, ext4 doesn't reallocate from the freed extents until after
> the journal commit completes, whilst XFS can reallocate freed ranges
> before the freeing is journalled and hence can modify ranges in the
> free list prior to journal commit.
> We could probably implement extent merging in the free extent
> tracking similar to ext4, but I'm not sure how much it would gain us
> because of the way we do reallocation of freed ranges prior to
> journal commit....
Also there generally aren't that many merging opportunities. Back when
I implemented the code and looked at block traces we'd get them
(a) for inode buffers due to the inode clusters beeing smaller than the
inode chunks. Better fixed by increasing the amount of inode
clustering we do.
(b) during rm -rf sometimes when lots of small files were end-to-end,
but this doesn't happen all that often.