[dm-devel] Load balancing reads on dmraid1 (and 01) arrays

Robert Collins robertc at robertcollins.net
Tue Jun 5 00:54:42 UTC 2012


Hi, I've had this sitting in a local tree for a bit (> 12 months -
blush!), been meaning to send it here...

Its my first dm submission, so please be gentle :) - I'll happily fix
up any issues in the patch (or in other metadata) - though I have
limited bandwidth to spend on this, so I may not get around to it
immediately.

The attached patches change dmraid1 to use all backing devices to
satisfy read requests rather than just one.

The first uses a very simple heuristic - which ever device had the
most recent read dispatched to a given location is preferred for
subsequent reads. There is an obvious theoretical issue with this:
writes move the disk head as well and so effectively should reset
allow the devices to the same position. The problem though is that
this really is a scheduling problem, and one that the multipath stack
would be better at handling. (e.g. multipath shoud be aware of corner
cases like : what if there is a dispatched read on the device we think
is closest, *after* a write. or what if load isn't being balanced
because all the reads are happening in one spot and one device is
totally idle). So, I used a very simple heuristic, which works well
for me - I get significantly better read performance with the first
patch than without.

The second patch tweaks the heuristic to handle the case where one
disk is being monopolised, which I found happens quite frequently with
e.g. kernel builds, where there is a high locality of reference to the
content. Again, its not perfect, and in this case there is a horrible
magic constant :(.

Again, *I* find this a net win, but I have no idea whether other folk
will find it so.

I had a brief look at making this use multipath instead, but that
looks to my naive eye to be both a significant undertaking (which I
don't have time for - sorry!) and also perhaps conceptually
problematic, as this needs to be an asymmetric multipath: reads can
multipath but writes must hit all devices.

Cheers,
Rob
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Load-balance-dm-raid1-reads-by-most-recently-dispatc.patch
Type: application/octet-stream
Size: 6871 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/dm-devel/attachments/20120605/1ede9a9e/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-Force-switching-drives-after-enough-linear-IO-allows.patch
Type: application/octet-stream
Size: 7553 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/dm-devel/attachments/20120605/1ede9a9e/attachment-0001.obj>


More information about the dm-devel mailing list