linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Kent Overstreet <koverstreet@google.com>
To: Jens Axboe <axboe@kernel.dk>,
	linux-bcache@vger.kernel.org, linux-kernel@vger.kernel.org,
	dm-devel@redhat.com
Subject: Re: [dm-devel] [PATCH v10 4/8] block: Add bio_reset()
Date: Fri, 7 Sep 2012 16:25:31 -0700	[thread overview]
Message-ID: <20120907232531.GF16360@google.com> (raw)
In-Reply-To: <20120907231433.GE10309@agk-dp.fab.redhat.com>

On Sat, Sep 08, 2012 at 12:14:33AM +0100, Alasdair G Kergon wrote:
> As I indicated already in this discussion, dm started to use
> merge_bvec_fn as a cheap way of avoiding splitting and this improved
> overall efficiency.  Often it's better to pay the small price of calling
> that function to ensure the bio is created the right size in the first
> place so it won't have to get split later.

When I say cheap, I mean _cheap_:

split = bio_clone_bioset(bio, gfp_flags, bs);

bio_advance(bio, sectors << 9);
split->bi_iter.bi_size = sectors << 9;

And the clone doesn't copy the bvecs - split->bi_io_vec ==
bio->bi_io_vec.

> I'm as yet unconvinced that removing merge_bvec_fn would be an overall
> win.  Some of Kent's other changes that make splitting cheaper will
> improve the balance in some situations, but that might be handled by
> simplifying the merge_bvec_fn calculations in those situations.
> (Or changing the mechanism to avoid repeating performing the mapping
> when it hasn't changed.)

The current situation is what causes you to repeatedly do the mapping
lookup, since you'll often get contiguous bios that don't need to be
split at the mapping level (because of other requirements of the
underlying devices or because implementing merge_bvec_fn correctly was
too hard).

Splitting only when required is going to _improve_ that.

> IOW Any proposal to remove merge_bvec_fn from dm needs careful 
> evaluation to ensure it doesn't introduce any significant
> performance regressions for some sets of users.

There's also the 1000+ lines of deleted code to consider. In my
immutable bvec branch I've deleted over 400 lines of code, and that's
without actually trying to delete code. Getting rid of merge_bvec_fn
deletes another 800 lines of code on top of that.

CPU wise, there won't be any performance regressions. The only cause for
concern I can think of is where the upper layer could've made use of
partial completions - i.e. it submitted a 1 mb bio instead of a bunch of
128k bios, but it could've made use of that first 128k if it went to a
different device and completed sooner.

Only thing I know of that'd be affected by that though is readahead, and
I have a couple ideas for easily solving that if it actually becomes an
issue.

  reply	other threads:[~2012-09-07 23:25 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-06 22:34 [PATCH v10 0/8] Block cleanups Kent Overstreet
2012-09-06 22:34 ` [PATCH v10 1/8] block: Generalized bio pool freeing Kent Overstreet
2012-09-14 18:28   ` [dm-devel] " Alasdair G Kergon
2012-09-17 20:51     ` Kent Overstreet
2012-09-18 16:31       ` Alasdair G Kergon
2012-09-14 18:36   ` Alasdair G Kergon
2012-09-06 22:34 ` [PATCH v10 2/8] block: Ues bi_pool for bio_integrity_alloc() Kent Overstreet
2012-09-06 22:34 ` [PATCH v10 3/8] dm: Use bioset's front_pad for dm_rq_clone_bio_info Kent Overstreet
2012-09-06 22:34 ` [PATCH v10 4/8] block: Add bio_reset() Kent Overstreet
2012-09-07  1:34   ` Jens Axboe
2012-09-07 20:58     ` Kent Overstreet
2012-09-07 21:55       ` Jens Axboe
2012-09-07 22:06         ` Jens Axboe
2012-09-07 22:25           ` Kent Overstreet
2012-09-07 22:44             ` Jens Axboe
2012-09-07 23:14               ` [dm-devel] " Alasdair G Kergon
2012-09-07 23:25                 ` Kent Overstreet [this message]
2012-09-06 22:34 ` [PATCH v10 5/8] pktcdvd: Switch to bio_kmalloc() Kent Overstreet
2012-09-06 22:35 ` [PATCH v10 6/8] block: Kill bi_destructor Kent Overstreet
2012-09-06 23:42   ` Tejun Heo
2012-09-06 22:35 ` [PATCH v10 7/8] block: Consolidate bio_alloc_bioset(), bio_kmalloc() Kent Overstreet
2012-09-06 23:45   ` Tejun Heo
2012-09-06 22:35 ` [PATCH v10 8/8] block: Add bio_clone_bioset(), bio_clone_kmalloc() Kent Overstreet
2012-09-06 23:46   ` Tejun Heo
2012-09-14 21:50   ` [dm-devel] " Alasdair G Kergon
2012-09-17 20:42     ` Kent Overstreet
2012-09-18 16:15       ` Alasdair G Kergon
2012-09-06 23:48 ` [PATCH v10 0/8] Block cleanups Tejun Heo
2012-09-07  1:37   ` Jens Axboe
2012-09-07 20:44     ` Kent Overstreet
2012-09-11  4:43   ` NeilBrown

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=20120907232531.GF16360@google.com \
    --to=koverstreet@google.com \
    --cc=axboe@kernel.dk \
    --cc=dm-devel@redhat.com \
    --cc=linux-bcache@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /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).