On Wed, Sep 29, 2010 at 10:51:40AM +1000, Dave Chinner wrote:
> From: Dave Chinner <dchinner@xxxxxxxxxx>
> Under heavy parallel unlink workloads, the incore superblock lock is
> heavily trafficed in xfs_mod_incore_sb_batch(). This is despite the
> fact that the counters being modified are typically the counters
> that are per-cpu and do not require the lock. IOWs, we are locking
> and unlocking the superblock lock needlessly, and the result is that
> it is third most heavily contended lock in the system under these
> Fix this by only locking the superblock lock when we are modifying a
> counter protected by it. This completely removes the m_sb_lock from
> lock_stat traces during create/remove workloads.
God spot of the idiocy there, but I really don't like the patch.
I've started writing a small patches series solving the issue slightly
better by cleaning up this area a bit.
After this we will never use xfs_mod_incore_sb/xfs_mod_incore_sb_batch
for the percpu counters but rather make those always go through
xfs_icsb_modify_counters. I'll need to quickly finish it up and will
send it out soon.