• Nikos Tsironis's avatar
    dm snapshot: Replace mutex with rw semaphore · 4ad8d880
    Nikos Tsironis authored
    dm-snapshot uses a single mutex to serialize every access to the
    snapshot state. This includes all accesses to the complete and pending
    exception tables, which occur at every origin write, every snapshot
    read/write and every exception completion.
    
    The lock statistics indicate that this mutex is a bottleneck (average
    wait time ~480 usecs for 8 processes doing random 4K writes to the
    origin device) preventing dm-snapshot to scale as the number of threads
    doing IO increases.
    
    The major contention points are __origin_write()/snapshot_map() and
    pending_complete(), i.e., the submission and completion of pending
    exceptions.
    
    Replace this mutex with a rw semaphore.
    
    We essentially revert commit ae1093be ("dm snapshot: use mutex
    instead of rw_semaphore") and together with the next two patches we
    substitute the single mutex with a fine-grained locking scheme, where we
    use a read-write semaphore to protect the mostly read fields of the
    snapshot structure, e.g., valid, active, etc., and per-bucket bit
    spinlocks to protect accesses to the complete and pending exception
    tables.
    Co-developed-by: default avatarIlias Tsitsimpis <iliastsi@arrikto.com>
    Signed-off-by: default avatarNikos Tsironis <ntsironis@arrikto.com>
    Acked-by: default avatarMikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
    4ad8d880
dm-snap.c 59 KB