[dm-devel] [PATCH v4 0/5] multipath: optimizations for large mptable

Benjamin Marzinski bmarzins at redhat.com
Mon Aug 29 17:42:23 UTC 2022


On Fri, Aug 26, 2022 at 08:05:51PM +0200, mwilck at suse.com wrote:
> From: Martin Wilck <mwilck at suse.com>

For the set:
Reviewed-by: Benjamin Marzinski <bmarzins at redhat.com>

> 
> We observe that multipath operations take a long time if the multipaths
> section in multipath.conf contains a lot of alias settings
> (10000+ in our case). This hurts in particular in udev rules, when
> multipath -u or multipath -U is invoked, but also for command line
> invocations like "multipath -ll".
> 
> This series provides a few optimizations for this use case. It speeds
> up simple multipath operations in the test case by a factor of 20.
> 
> Changes v3->v4:
> 
>  02: more compilation fixes for msort.c to make it pass CI
>      (only re-posting this patch)
> 
> Changes v2->v3, after discussion with Benjamin Marzinski:
> 
>  01, 02: added msort.c from glibc and adapted to our needs.
>          Numbering changes accordingly.
>  03, 04: (was 01, 02): remove pointer comparisons from v2 again, this was a
>          dumb idea. Use the stable msort algorithm instead.
> 
> Changes wrt v1, after suggestions from Benjamin Marzinski:
> 
>  01, 02: Use pointer comparisons to achieve stable sorting with qsort
>  02:  Fix return without popping the cleanup handler. The way I fixed this
>       leaves the possibility that some memory won't be freed if a thread is
>       killed while executing vector_convert(). I think this is acceptible;
>       avoiding it would complicate the code, with very small benefit.
>  02: Remove unnecessary checks and break loop if alias==NULL is encountered.
> 
> Martin Wilck (5):
>   libmultipath: add msort.c from glibc
>   libmultipath: modifications for msort.c
>   libmultipath: merge_mptable(): sort table by wwid
>   libmultipath: check_alias_settings(): pre-sort mptable by alias
>   multipath: optimize program startup for frequent invocations
> 
>  libmultipath/Makefile |   2 +-
>  libmultipath/alias.c  |  37 +++++-
>  libmultipath/config.c |  15 ++-
>  libmultipath/msort.c  | 271 ++++++++++++++++++++++++++++++++++++++++++
>  libmultipath/msort.h  |   6 +
>  libmultipath/vector.c |   9 ++
>  libmultipath/vector.h |   1 +
>  multipath/main.c      |  33 ++---
>  8 files changed, 352 insertions(+), 22 deletions(-)
>  create mode 100644 libmultipath/msort.c
>  create mode 100644 libmultipath/msort.h
> 
> -- 
> 2.37.1


More information about the dm-devel mailing list