[dm-devel] [Question] multipathd add/remove paths takes a long time
Benjamin Marzinski
bmarzins at redhat.com
Thu Jul 21 14:34:10 UTC 2022
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
More information about the dm-devel
mailing list