• Santosh Shilimkar's avatar
    RDS: make socket bind/release locking scheme simple and more efficient · 8b0a6b46
    Santosh Shilimkar authored
    RDS bind and release locking scheme is very inefficient. It
    uses RCU for maintaining the bind hash-table which is great but
    it also needs to hold spinlock for [add/remove]_bound(). So
    overall usecase, the hash-table concurrent speedup doesn't pay off.
    In fact blocking nature of synchronize_rcu() makes the RDS
    socket shutdown too slow which hurts RDS performance since
    connection shutdown and re-connect happens quite often to
    maintain the RC part of the protocol.
    
    So we make the locking scheme simpler and more efficient by
    replacing spin_locks with reader/writer locks and getting rid
    off rcu for bind hash-table.
    
    In subsequent patch, we also covert the global lock with per-bucket
    lock to reduce the global lock contention.
    Signed-off-by: default avatarSantosh Shilimkar <ssantosh@kernel.org>
    Signed-off-by: default avatarSantosh Shilimkar <santosh.shilimkar@oracle.com>
    8b0a6b46
af_rds.c 15 KB