On Tue, Jul 19, 2022 at 08:13:39PM +0800, Wu Guanghao wrote: > The system has 1K multipath devices, each device has 16 paths. > Execute multipathd add/multipathd remove or uev_add_path/ > uev_remove_path to add/remove paths, which takes over 20s. > What's more, the second checkloop may be execed immediately > after finishing first checkloop. It's too long. > > We found that time was mostly spent waiting for locks. > > checkerloop(){ > ... > lock(&vecs->lock); > vector_foreach_slot (vecs->pathvec, pp, i) { > rc = check_path(...); // Too many paths, it takes a long time > ... > } > lock_cleanup_pop(vecs->lock); > ... > } > > Can the range of vecs->lock locks be adjusted to reduce the time consuming > when adding/removing paths? As long as we make sure not to skip any paths or double-check any paths, we don't need to hold the vecs->lock between checking paths. There is certainly some optimization that could get done here. could you post the output of: # multipath -l <sample_multipath_device> # multipathd show config local -Ben -- dm-devel mailing list dm-devel@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/dm-devel