The busy extent tracking in XFS is currently very static and has
some performance issues. We can only track 128 busy extents per AG,
and when we overflow this we fall back to synchronous transactions.
Also, every time we re-use a busy extent we cause a synchronous log
force, which stops all allocation and freeing in that AG while the
log force is in progress.
This limits the amount of transaction aggregation we can potentially
do because of the fact that we do log forces when a busy extent is
found which would effectively close off an aggregating transaction
group. It is relatively easy to trigger overflows or reuse of busy
extents and cause thіs to occur.
Further, when it comes to issuing block discard messages to tell the
lower layer that we're finished with a block, we need to track all
freed extents, not just those we can fit in a static array. Hence
adding block discard functionality to XFS also requires us to rework
the way we track busy extents.
This patch series is a work in progress. It's probably better to
look at the finished product rather than the inividual patches
because the later patches undo a lot of the earlier factoring and
shuffling. I'll need to completely redo the series before final
subbbmission. However, I'm posting this now because it passes XFSQA
and it seems to be a good time to post it for comments before I
start cleaning it up....