• Dave Chinner's avatar
    xfs: convert inode cache lookups to use RCU locking · 1a3e8f3d
    Dave Chinner authored
    With delayed logging greatly increasing the sustained parallelism of inode
    operations, the inode cache locking is showing significant read vs write
    contention when inode reclaim runs at the same time as lookups. There is
    also a lot more write lock acquistions than there are read locks (4:1 ratio)
    so the read locking is not really buying us much in the way of parallelism.
    
    To avoid the read vs write contention, change the cache to use RCU locking on
    the read side. To avoid needing to RCU free every single inode, use the built
    in slab RCU freeing mechanism. This requires us to be able to detect lookups of
    freed inodes, so enѕure that ever freed inode has an inode number of zero and
    the XFS_IRECLAIM flag set. We already check the XFS_IRECLAIM flag in cache hit
    lookup path, but also add a check for a zero inode number as well.
    
    We canthen convert all the read locking lockups to use RCU read side locking
    and hence remove all read side locking.
    Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
    Reviewed-by: default avatarAlex Elder <aelder@sgi.com>
    1a3e8f3d
xfs_inode.c 122 KB