[dm-devel] [patch] leastpending_io load balancing policy

Alasdair G Kergon agk at redhat.com
Wed Dec 3 22:08:19 UTC 2008


On Wed, Nov 12, 2008 at 02:17:05PM +0000, Balasubramanian, Vijayakumar (STSD) wrote:
> Attached patch provides "Least pending IO" dynamic load balancing policy for
> bio based device mapper multipath. This load balancing policy considers the
> number of unserviced requests pending on a path and selects the path with
> least count for pending service request.

repeat_count is still accepted but does nothing so I've removed it.
(And how did it work with a default of (unsigned) -1 anyway - never
switch path?)

However, it might improve performance by reducing the amount of splitting
of consecutive contiguous I/Os, so I think you should consider putting
it back in and implementing it (either internally or by extending the
ps interface to separate choice of path from use of path).

Another alternative might be to use thresholds, and only switch path,
for example, when the amount of I/O outstanding down the current path is
X more than the amount down the least path or the amount down the least
path falls below Y.

There is useful status information (io_count) not returned to userspace, so
I've added that to lpp_status().

The wrapper function lpp_select_path call adds nothing so I've
collapsed it.

Is there some locking missing from the end_io function because it manipulates
io_count?  E.g. io_count atomic with memory barrier, or caller takes the
lock?  How does it interact with fail_path() in do_end_io() and the way
that the io_count can get reset to 0 when a path is reinstated (and in
general there could still be outstanding I/O down it)?  For now, I've
removed that resetting.  (I'm concerned that there may be some races in
this code.)

Also, now that there is more than one path selector, Kconfig should be
updated to make them separate modules and to require at least one to
be included.

Alasdair
-- 
agk at redhat.com




More information about the dm-devel mailing list