From: NeilBrown <neilb@suse.de>
To: Namhyung Kim <namhyung@gmail.com>
Cc: linux-raid@vger.kernel.org
Subject: Re: [PATCH 5/5] md/raid10: spread read for subordinate r10bios during recovery
Date: Wed, 15 Jun 2011 13:09:03 +1000 [thread overview]
Message-ID: <20110615130903.0445394e@notabene.brown> (raw)
In-Reply-To: <1308103324-2375-6-git-send-email-namhyung@gmail.com>
On Wed, 15 Jun 2011 11:02:04 +0900 Namhyung Kim <namhyung@gmail.com> wrote:
> In the current scheme, multiple read request could be directed to
> the first active disk during recovery if there are several disk
> failure at the same time. Spreading those requests on other in-sync
> disks might be helpful.
I don't find this convincing either. Spreading requests over disks in a
haphazard way is not certain to improve anything and could easily cause
regressions.
For example if I have an 'n3' array on 3 devices, this will read alternately
from the first 2 devices while rebuilding the last. This is simply a waste.
One disk would be enough keep the rebuilding disk busy - the other should be
left of regular reads.
Again: if you can demonstrate a speed up in some configuration I'll be happy
to reconsider the patch.
Thanks,
NeilBrown
>
> Signed-off-by: Namhyung Kim <namhyung@gmail.com>
> ---
> drivers/md/raid10.c | 10 +++++++---
> 1 files changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
> index dea73bdb99b8..d0188e49f881 100644
> --- a/drivers/md/raid10.c
> +++ b/drivers/md/raid10.c
> @@ -1832,6 +1832,7 @@ static sector_t sync_request(mddev_t *mddev, sector_t sector_nr,
> if (!test_bit(MD_RECOVERY_SYNC, &mddev->recovery)) {
> /* recovery... the complicated one */
> int j, k;
> + int last_read = -1;
> r10_bio = NULL;
>
> for (i=0 ; i<conf->raid_disks; i++) {
> @@ -1891,7 +1892,9 @@ static sector_t sync_request(mddev_t *mddev, sector_t sector_nr,
> &sync_blocks, still_degraded);
>
> for (j=0; j<conf->copies;j++) {
> - int d = r10_bio->devs[j].devnum;
> + int c = (last_read + j + 1) % conf->copies;
> + int d = r10_bio->devs[c].devnum;
> +
> if (!conf->mirrors[d].rdev ||
> !test_bit(In_sync, &conf->mirrors[d].rdev->flags))
> continue;
> @@ -1902,13 +1905,14 @@ static sector_t sync_request(mddev_t *mddev, sector_t sector_nr,
> bio->bi_private = r10_bio;
> bio->bi_end_io = end_sync_read;
> bio->bi_rw = READ;
> - bio->bi_sector = r10_bio->devs[j].addr +
> + bio->bi_sector = r10_bio->devs[c].addr +
> conf->mirrors[d].rdev->data_offset;
> bio->bi_bdev = conf->mirrors[d].rdev->bdev;
> atomic_inc(&conf->mirrors[d].rdev->nr_pending);
> atomic_inc(&r10_bio->remaining);
> - /* and we write to 'i' */
> + last_read = c;
>
> + /* and we write to 'i' */
> for (k=0; k<conf->copies; k++)
> if (r10_bio->devs[k].devnum == i)
> break;
next prev parent reply other threads:[~2011-06-15 3:09 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-15 2:01 [PATCH RESEND 0/5] md/raid10 changes Namhyung Kim
2011-06-15 2:02 ` [PATCH v2 1/5] md/raid10: optimize read_balance() for 'far offset' arrays Namhyung Kim
2011-06-15 2:57 ` NeilBrown
2011-06-15 6:51 ` Keld Jørn Simonsen
2011-06-15 12:25 ` Namhyung Kim
2011-06-15 14:35 ` Namhyung Kim
2011-06-15 23:56 ` NeilBrown
2011-06-15 2:02 ` [PATCH 2/5] md/raid10: get rid of duplicated conditional expression Namhyung Kim
2011-06-15 2:02 ` [PATCH 3/5] md/raid10: factor out common bio handling code Namhyung Kim
2011-06-15 2:02 ` [PATCH v2 4/5] md/raid10: share pages between read and write bio's during recovery Namhyung Kim
2011-06-15 2:02 ` [PATCH 5/5] md/raid10: spread read for subordinate r10bios " Namhyung Kim
2011-06-15 3:09 ` NeilBrown [this message]
2011-06-15 3:09 ` [PATCH RESEND 0/5] md/raid10 changes NeilBrown
2011-06-15 3:33 ` Namhyung Kim
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110615130903.0445394e@notabene.brown \
--to=neilb@suse.de \
--cc=linux-raid@vger.kernel.org \
--cc=namhyung@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).