On Thu, Aug 22, 2024 at 10:52 AM Yu Kuai <yukuai1@xxxxxxxxxxxxxxx> wrote: > > From: Yu Kuai <yukuai3@xxxxxxxxxx> > > Changes from RFC v1: > - add patch 1-8 to prevent dereference bitmap directly, and the last > patch to make bitmap structure internel. > - use plain function alls "bitmap_ops->xxx()" directly; > > Changes from RFC v2: > - some coding style. > > The background is that currently bitmap is using a global spin_lock, > cauing lock contention and huge IO performance degration for all raid > levels. > > However, it's impossible to implement a new lock free bitmap with > current situation that md-bitmap exposes the internal implementation > with lots of exported apis. Hence bitmap_operations is invented, to > describe bitmap core implementation, and a new bitmap can be introduced > with a new bitmap_operations, we only need to switch to the new one > during initialization. > > And with this we can build bitmap as kernel module, but that's not > our concern for now. > > This version was tested with mdadm tests. There are still few failed > tests in my VM, howerver, it's the test itself need to be fixed and > we're working on it. Hi Kuai Do you run lvm2 test regression tests? It's better to run lvm2 regression tests for such a big change. And by the way, does this patch set have a conflict with patch set "[RFC V7] md/bitmap: Optimize lock contention". I haven't read the patches, it's an optimization for the bitmap lock too. Best Regards Xiao > > Yu Kuai (41): > md/raid1: use md_bitmap_wait_behind_writes() in raid1_read_request() > md/md-bitmap: replace md_bitmap_status() with a new helper > md_bitmap_get_stats() > md: use new helper md_bitmap_get_stats() in update_array_info() > md/md-bitmap: add 'events_cleared' into struct md_bitmap_stats > md/md-bitmap: add 'sync_size' into struct md_bitmap_stats > md/md-bitmap: add 'file_pages' into struct md_bitmap_stats > md/md-bitmap: add 'behind_writes' and 'behind_wait' into struct > md_bitmap_stats > md/md-cluster: use helper md_bitmap_get_stats() to get pages in > resize_bitmaps() > md/md-bitmap: add a new helper md_bitmap_set_pages() > md/md-bitmap: introduce struct bitmap_operations > md/md-bitmap: simplify md_bitmap_create() + md_bitmap_load() > md/md-bitmap: merge md_bitmap_create() into bitmap_operations > md/md-bitmap: merge md_bitmap_load() into bitmap_operations > md/md-bitmap: merge md_bitmap_destroy() into bitmap_operations > md/md-bitmap: merge md_bitmap_flush() into bitmap_operations > md/md-bitmap: make md_bitmap_print_sb() internal > md/md-bitmap: merge md_bitmap_update_sb() into bitmap_operations > md/md-bitmap: merge md_bitmap_status() into bitmap_operations > md/md-bitmap: remove md_bitmap_setallbits() > md/md-bitmap: merge bitmap_write_all() into bitmap_operations > md/md-bitmap: merge md_bitmap_dirty_bits() into bitmap_operations > md/md-bitmap: merge md_bitmap_startwrite() into bitmap_operations > md/md-bitmap: merge md_bitmap_endwrite() into bitmap_operations > md/md-bitmap: merge md_bitmap_start_sync() into bitmap_operations > md/md-bitmap: remove the parameter 'aborted' for md_bitmap_end_sync() > md/md-bitmap: merge md_bitmap_end_sync() into bitmap_operations > md/md-bitmap: merge md_bitmap_close_sync() into bitmap_operations > md/md-bitmap: mrege md_bitmap_cond_end_sync() into bitmap_operations > md/md-bitmap: merge md_bitmap_sync_with_cluster() into > bitmap_operations > md/md-bitmap: merge md_bitmap_unplug_async() into md_bitmap_unplug() > md/md-bitmap: merge bitmap_unplug() into bitmap_operations > md/md-bitmap: merge md_bitmap_daemon_work() into bitmap_operations > md/md-bitmap: pass in mddev directly for md_bitmap_resize() > md/md-bitmap: merge md_bitmap_resize() into bitmap_operations > md/md-bitmap: merge get_bitmap_from_slot() into bitmap_operations > md/md-bitmap: merge md_bitmap_copy_from_slot() into struct > bitmap_operation. > md/md-bitmap: merge md_bitmap_set_pages() into struct > bitmap_operations > md/md-bitmap: merge md_bitmap_free() into bitmap_operations > md/md-bitmap: merge md_bitmap_wait_behind_writes() into > bitmap_operations > md/md-bitmap: merge md_bitmap_enabled() into bitmap_operations > md/md-bitmap: make in memory structure internal > > drivers/md/dm-raid.c | 7 +- > drivers/md/md-bitmap.c | 560 +++++++++++++++++++++++++++++---------- > drivers/md/md-bitmap.h | 268 ++++--------------- > drivers/md/md-cluster.c | 91 ++++--- > drivers/md/md.c | 155 +++++++---- > drivers/md/md.h | 3 +- > drivers/md/raid1-10.c | 9 +- > drivers/md/raid1.c | 78 +++--- > drivers/md/raid10.c | 73 ++--- > drivers/md/raid5-cache.c | 8 +- > drivers/md/raid5.c | 62 ++--- > 11 files changed, 752 insertions(+), 562 deletions(-) > > -- > 2.39.2 >