[dm-devel] [PATCH v2 0/5] dm snapshot: Improve performance using a more fine-grained locking scheme
Mikulas Patocka
mpatocka at redhat.com
Sun Mar 3 21:16:12 UTC 2019
Acked-by: Mikulas Patocka <mpatocka at redhat.com>
On Fri, 1 Mar 2019, Nikos Tsironis wrote:
> dm-snapshot uses a single mutex to serialize every access to the
> snapshot state, including accesses to the exception hash tables. This
> mutex is a bottleneck 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.
>
> This patchset substitutes the single mutex with:
>
> * A read-write semaphore, which protects the mostly read fields of the
> snapshot structure.
>
> * Per-bucket bit spinlocks, that protect accesses to the exception
> hash tables.
>
> fio benchmarks using the null_blk device show significant performance
> improvements as the number of worker processes increases. Write latency
> is almost halved and write IOPS are nearly doubled.
>
> The relevant patch provides detailed benchmark results.
>
> A summary of the patchset follows:
>
> 1. The first patch adds two helper functions to linux/list_bl.h, which
> is used to implement the per-bucket bit spinlocks in dm-snapshot.
>
> 2. The second patch removes the need to sleep holding the snapshot
> lock in pending_complete(), thus allowing us to replace the mutex
> with the per-bucket bit spinlocks.
>
> 3. The third patch changes the locking scheme, as described previously.
>
> Changes in v2:
> - Split third patch of v1 into three patches: 3/5, 4/5, 5/5.
>
> v1: https://www.redhat.com/archives/dm-devel/2018-December/msg00161.html
>
> Nikos Tsironis (5):
> list_bl: Add hlist_bl_add_before/behind helpers
> dm snapshot: Don't sleep holding the snapshot lock
> dm snapshot: Replace mutex with rw semaphore
> dm snapshot: Make exception tables scalable
> dm snapshot: Use fine-grained locking scheme
>
> drivers/md/dm-exception-store.h | 3 +-
> drivers/md/dm-snap.c | 359 +++++++++++++++++++++++++++-------------
> include/linux/list_bl.h | 27 +++
> 3 files changed, 269 insertions(+), 120 deletions(-)
>
> --
> 2.11.0
>
More information about the dm-devel
mailing list