[dm-devel] [PATCH V2 0/6] allowing path checking to be interrupted.

Martin Wilck martin.wilck at suse.com
Mon Aug 22 18:12:48 UTC 2022


On Wed, 2022-08-17 at 15:48 -0500, Benjamin Marzinski wrote:
> When there are a huge number of paths (> 10000) The amount of time
> that
> the checkerloop can hold the vecs lock for while checking the paths
> can
> get to be large enough that it starves other vecs lock users.  If
> path
> checking takes long enough, it's possible that uxlsnr threads will
> never
> run. To deal with this, this patchset makes it possible to drop the
> vecs
> lock while checking the paths, and then reacquire it and continue
> with
> the next path to check.
> 
> My choice of only checking if there are waiters every 128 paths
> checked
> and only interrupting if path checking has taken more than a second
> are
> arbitrary. I didn't want to slow down path checking in the common
> case
> where this isn't an issue, and I wanted to avoid path checking
> getting
> starved by other vecs->lock users. Having the checkerloop wait for
> 10000
> nsec was based on my own testing with a setup using 4K multipath
> devies
> with 4 paths each. This was almost always long enough for the uevent
> or
> uxlsnr client to grab the vecs lock, but I'm not sure how dependent
> this
> is on details of the system. For instance with my setup in never took
> more than 20 seconds to check the paths. and usually, a looping
> through
> all the paths took well under 10 seconds, most often under 5. I would
> only occasionally run into situations where a uxlsnr client would
> time
> out.
> 
> V2 Changes:
> 0003: Switched to a simpler method of determining the path to
> continue
>       checking at, as suggested by Martin Wilck. Also fixed a bug
> when
>       the previous index was larger than the current vector size.
> 
> Benjamin Marzinski (6):
>   multipathd: Use regular pthread_mutex_t for waiter_lock
>   multipathd: track waiters for mutex_lock
>   multipathd: Occasionally allow waiters to interrupt checking paths
>   multipathd: allow uxlsnr clients to interrupt checking paths
>   multipathd: fix uxlsnr timeout
>   multipathd: Don't check if timespec.tv_sec is zero

For the series:

Reviewed-by: Martin Wilck <mwilck at suse.com>


> 
>  libmultipath/lock.h    |  16 +++++
>  libmultipath/structs.h |   1 +
>  multipathd/main.c      | 147 ++++++++++++++++++++++++++-------------
> --
>  multipathd/uxlsnr.c    |  23 +++++--
>  multipathd/uxlsnr.h    |   1 +
>  multipathd/waiter.c    |  14 ++--
>  6 files changed, 136 insertions(+), 66 deletions(-)
> 



More information about the dm-devel mailing list