From: Martin Wilck <mwilck@xxxxxxxx> 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 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 | 268 ++++++++++++++++++++++++++++++++++++++++++ libmultipath/msort.h | 6 + libmultipath/vector.c | 9 ++ libmultipath/vector.h | 1 + multipath/main.c | 33 +++--- 8 files changed, 349 insertions(+), 22 deletions(-) create mode 100644 libmultipath/msort.c create mode 100644 libmultipath/msort.h -- 2.37.1 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/dm-devel