All of lore.kernel.org
 help / color / mirror / Atom feed
From: Shaohua Li <shli@kernel.org>
To: Ming Lei <tom.leiming@gmail.com>
Cc: Jens Axboe <axboe@fb.com>,
	"open list:SOFTWARE RAID (Multiple Disks) SUPPORT"
	<linux-raid@vger.kernel.org>,
	linux-block <linux-block@vger.kernel.org>,
	Christoph Hellwig <hch@infradead.org>
Subject: Re: [PATCH v2 06/13] md: raid1: don't use bio's vec table to manage resync pages
Date: Fri, 3 Mar 2017 09:38:00 -0800	[thread overview]
Message-ID: <20170303173800.tj43oir24fuw5yb2@kernel.org> (raw)
In-Reply-To: <CACVXFVPQx0rQqQS0PG2MoYh+pGvVQb_H_+fMCGbWeVDM3JNcnQ@mail.gmail.com>

On Fri, Mar 03, 2017 at 10:11:31AM +0800, Ming Lei wrote:
> On Fri, Mar 3, 2017 at 1:48 AM, Shaohua Li <shli@kernel.org> wrote:
> > On Thu, Mar 02, 2017 at 10:25:10AM +0800, Ming Lei wrote:
> >> Hi Shaohua,
> >>
> >> On Wed, Mar 1, 2017 at 7:37 AM, Shaohua Li <shli@kernel.org> wrote:
> >> > On Tue, Feb 28, 2017 at 11:41:36PM +0800, Ming Lei wrote:
> >> >> Now we allocate one page array for managing resync pages, instead
> >> >> of using bio's vec table to do that, and the old way is very hacky
> >> >> and won't work any more if multipage bvec is enabled.
> >> >>
> >> >> The introduced cost is that we need to allocate (128 + 16) * raid_disks
> >> >> bytes per r1_bio, and it is fine because the inflight r1_bio for
> >> >> resync shouldn't be much, as pointed by Shaohua.
> >> >>
> >> >> Also the bio_reset() in raid1_sync_request() is removed because
> >> >> all bios are freshly new now and not necessary to reset any more.
> >> >>
> >> >> This patch can be thought as a cleanup too
> >> >>
> >> >> Suggested-by: Shaohua Li <shli@kernel.org>
> >> >> Signed-off-by: Ming Lei <tom.leiming@gmail.com>
> >> >> ---
> >> >>  drivers/md/raid1.c | 83 ++++++++++++++++++++++++++++++++++--------------------
> >> >>  1 file changed, 53 insertions(+), 30 deletions(-)
> >> >>
> >> >> diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
> >> >> index c442b4657e2f..900144f39630 100644
> >> >> --- a/drivers/md/raid1.c
> >> >> +++ b/drivers/md/raid1.c
> >> >> @@ -77,6 +77,16 @@ static void lower_barrier(struct r1conf *conf, sector_t sector_nr);
> >> >>  #define raid1_log(md, fmt, args...)                          \
> >> >>       do { if ((md)->queue) blk_add_trace_msg((md)->queue, "raid1 " fmt, ##args); } while (0)
> >> >>
> >> >> +static inline struct resync_pages *get_resync_pages(struct bio *bio)
> >> >> +{
> >> >> +     return bio->bi_private;
> >> >> +}
> >> >> +
> >> >> +static inline struct r1bio *get_resync_r1bio(struct bio *bio)
> >> >> +{
> >> >> +     return get_resync_pages(bio)->raid_bio;
> >> >> +}
> >> >
> >> > This is a weird between bio, r1bio and the resync_pages. I'd like the pages are
> >>
> >> It is only a bit weird inside allocating and freeing r1bio, once all
> >> are allocated, you
> >> can see everthing is clean and simple:
> >>
> >>     - r1bio includes lots of bioes,
> >>     - and one bio is attached by one resync_pages via .bi_private
> >
> > I don't how complex to let r1bio pointer to the pages, but that's the nartual
> > way. r1bio owns the pages, not the pages own r1bio, so we should let r1bio
> > points to the pages. The bio.bi_private still points to r1bio.
> 
> Actually it is bio which owns the pages for doing its own I/O, and the only
> thing related with r10bio is that bios may share these pages, but using
> page refcount trick will make the relation quite implicit.
>
> The only reason to allocate all resync_pages together is for sake of efficiency,
> and just for avoiding to allocate one resync_pages one time for each bio.
> 
> We have to make .bi_private point to resync_pages(per bio), otherwise we
> can't fetch pages into one bio at all, thinking about where to store the index
> for each bio's pre-allocated pages, and it has to be per bio.

So the reason is we can't find the corresponding pages of the bio if bi_private
points to r1bio, right? Got it. We don't have many choices in this way. Ok, I
don't insist. Please add some comments in the get_resync_r1bio to describe how
the data structure is organized.

Thanks,
Shaohua

  reply	other threads:[~2017-03-03 17:38 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-28 15:41 [PATCH v2 00/14] md: cleanup on direct access to bvec table Ming Lei
2017-02-28 15:41 ` [PATCH v2 01/13] block: introduce bio_segments_all() Ming Lei
2017-02-28 15:41 ` [PATCH v2 02/13] md: raid1/raid10: don't handle failure of bio_add_page() Ming Lei
2017-02-28 15:41 ` [PATCH v2 03/13] md: move two macros into md.h Ming Lei
2017-02-28 15:41 ` [PATCH v2 04/13] md: prepare for managing resync I/O pages in clean way Ming Lei
2017-02-28 23:30   ` Shaohua Li
2017-03-02  2:09     ` Ming Lei
2017-03-02 17:55       ` Shaohua Li
2017-03-03  1:54         ` Ming Lei
2017-02-28 15:41 ` [PATCH v2 05/13] md: raid1: simplify r1buf_pool_free() Ming Lei
2017-02-28 23:31   ` Shaohua Li
2017-03-02  2:11     ` Ming Lei
2017-03-02 17:49       ` Shaohua Li
2017-03-03  1:57         ` Ming Lei
2017-02-28 15:41 ` [PATCH v2 06/13] md: raid1: don't use bio's vec table to manage resync pages Ming Lei
2017-02-28 23:37   ` Shaohua Li
2017-03-02  2:25     ` Ming Lei
2017-03-02 17:48       ` Shaohua Li
2017-03-03  2:11         ` Ming Lei
2017-03-03 17:38           ` Shaohua Li [this message]
2017-02-28 15:41 ` [PATCH v2 07/13] md: raid1: retrieve page from pre-allocated resync page array Ming Lei
2017-02-28 15:41 ` [PATCH v2 08/13] md: raid1: use bio helper in process_checks() Ming Lei
2017-02-28 23:39   ` Shaohua Li
2017-02-28 15:41 ` [PATCH v2 09/13] md: raid1: use bio_segments_all() Ming Lei
2017-02-28 23:42   ` Shaohua Li
2017-03-02  2:34     ` Ming Lei
2017-03-02  7:52       ` Shaohua Li
2017-03-03  2:20         ` Ming Lei
2017-03-03  6:22           ` Ming Lei
2017-03-03 17:12             ` Shaohua Li
2017-02-28 15:41 ` [PATCH v2 10/13] md: raid10: refactor code of read reshape's .bi_end_io Ming Lei
2017-02-28 15:41 ` [PATCH v2 11/13] md: raid10: don't use bio's vec table to manage resync pages Ming Lei
2017-02-28 23:43   ` Shaohua Li
2017-02-28 15:41 ` [PATCH v2 12/13] md: raid10: retrieve page from preallocated resync page array Ming Lei
2017-02-28 15:41 ` [PATCH v2 13/13] md: raid10: avoid direct access to bvec table in handle_reshape_read_error Ming Lei
2017-02-28 23:46   ` Shaohua Li
2017-03-02  2:37     ` Ming Lei
2017-03-02  7:47       ` Shaohua Li
2017-03-03  2:30         ` Ming Lei

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=20170303173800.tj43oir24fuw5yb2@kernel.org \
    --to=shli@kernel.org \
    --cc=axboe@fb.com \
    --cc=hch@infradead.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-raid@vger.kernel.org \
    --cc=tom.leiming@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.