All of lore.kernel.org
 help / color / mirror / Atom feed
From: Song Liu <song@kernel.org>
To: Logan Gunthorpe <logang@deltatee.com>
Cc: open list <linux-kernel@vger.kernel.org>,
	linux-raid <linux-raid@vger.kernel.org>,
	Christoph Hellwig <hch@infradead.org>,
	Guoqing Jiang <guoqing.jiang@linux.dev>,
	Stephen Bates <sbates@raithlin.com>,
	Martin Oliveira <Martin.Oliveira@eideticom.com>,
	David Sloan <David.Sloan@eideticom.com>
Subject: Re: [PATCH v2 00/12] Improve Raid5 Lock Contention
Date: Mon, 25 Apr 2022 16:07:13 -0700	[thread overview]
Message-ID: <CAPhsuW6j7UYn-jH9-kmBfe5h+PJ_HjP9v6dW+VDKiMW+t+XUhA@mail.gmail.com> (raw)
In-Reply-To: <20220420195425.34911-1-logang@deltatee.com>

On Wed, Apr 20, 2022 at 12:55 PM Logan Gunthorpe <logang@deltatee.com> wrote:
>
> Hi,
>
> This is v2 of this series which addresses Christoph's feedback and
> fixes some bugs. The first posting is at [1]. A git branch is
> available at [2].
>
> --
>
> I've been doing some work trying to improve the bulk write performance
> of raid5 on large systems with fast NVMe drives. The bottleneck appears
> largely to be lock contention on the hash_lock and device_lock. This
> series improves the situation slightly by addressing a couple of low
> hanging fruit ways to take the lock fewer times in the request path.
>
> Patch 9 adjusts how batching works by keeping a reference to the
> previous stripe_head in raid5_make_request(). Under most situtations,
> this removes the need to take the hash_lock in stripe_add_to_batch_list()
> which should reduce the number of times the lock is taken by a factor of
> about 2.
>
> Patch 12 pivots the way raid5_make_request() works. Before the patch, the
> code must find the stripe_head for every 4KB page in the request, so each
> stripe head must be found once for every data disk. The patch changes this
> so that all the data disks can be added to a stripe_head at once and the
> number of times the stripe_head must be found (and thus the number of
> times the hash_lock is taken) should be reduced by a factor roughly equal
> to the number of data disks.
>
> The remaining patches are just cleanup and prep patches for those two
> patches.
>
> Doing apples to apples testing this series on a small VM with 5 ram
> disks, I saw a bandwidth increase of roughly 14% and lock contentions
> on the hash_lock (as reported by lock stat) reduced by more than a factor
> of 5 (though it is still significantly contended).
>
> Testing on larger systems with NVMe drives saw similar small bandwidth
> increases from 3% to 20% depending on the parameters. Oddly small arrays
> had larger gains, likely due to them having lower starting bandwidths; I
> would have expected larger gains with larger arrays (seeing there
> should have been even fewer locks taken in raid5_make_request()).
>
> Logan
>
> [1] https://lkml.kernel.org/r/20220407164511.8472-1-logang@deltatee.com
> [2] https://github.com/sbates130272/linux-p2pmem raid5_lock_cont_v2
>

The set looks good to me overall. Thanks everyone for the review and feedback.

Logan, please incorporate feedback and send v3.

Thanks,
Song

      parent reply	other threads:[~2022-04-25 23:07 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-20 19:54 [PATCH v2 00/12] Improve Raid5 Lock Contention Logan Gunthorpe
2022-04-20 19:54 ` [PATCH v2 01/12] md/raid5: Factor out ahead_of_reshape() function Logan Gunthorpe
2022-04-21  6:07   ` Christoph Hellwig
2022-04-21  9:17   ` Paul Menzel
2022-04-21 16:05     ` Logan Gunthorpe
2022-04-21 23:33       ` Wol
2022-04-27  1:28   ` Guoqing Jiang
2022-04-27 16:07     ` Logan Gunthorpe
2022-04-28  1:49       ` Guoqing Jiang
2022-04-28 15:44         ` Logan Gunthorpe
2022-04-29  0:24           ` Guoqing Jiang
2022-04-20 19:54 ` [PATCH v2 02/12] md/raid5: Refactor raid5_make_request loop Logan Gunthorpe
2022-04-21  6:08   ` Christoph Hellwig
2022-04-27  1:32   ` Guoqing Jiang
2022-04-27 16:08     ` Logan Gunthorpe
2022-04-28  1:16       ` Guoqing Jiang
2022-04-20 19:54 ` [PATCH v2 03/12] md/raid5: Move stripe_add_to_batch_list() call out of add_stripe_bio() Logan Gunthorpe
2022-04-27  1:33   ` Guoqing Jiang
2022-04-20 19:54 ` [PATCH v2 04/12] md/raid5: Move common stripe count increment code into __find_stripe() Logan Gunthorpe
2022-04-21  6:10   ` Christoph Hellwig
2022-04-27  1:33   ` Guoqing Jiang
2022-04-20 19:54 ` [PATCH v2 05/12] md/raid5: Factor out helper from raid5_make_request() loop Logan Gunthorpe
2022-04-21  6:14   ` Christoph Hellwig
2022-04-20 19:54 ` [PATCH v2 06/12] md/raid5: Drop the do_prepare flag in raid5_make_request() Logan Gunthorpe
2022-04-21  6:15   ` Christoph Hellwig
2022-04-27  2:11   ` Guoqing Jiang
2022-04-20 19:54 ` [PATCH v2 07/12] md/raid5: Move read_seqcount_begin() into make_stripe_request() Logan Gunthorpe
2022-04-21  6:15   ` Christoph Hellwig
2022-04-27  2:13   ` Guoqing Jiang
2022-04-20 19:54 ` [PATCH v2 08/12] md/raid5: Refactor for loop in raid5_make_request() into while loop Logan Gunthorpe
2022-04-21  6:16   ` Christoph Hellwig
2022-04-20 19:54 ` [PATCH v2 09/12] md/raid5: Keep a reference to last stripe_head for batch Logan Gunthorpe
2022-04-21  6:17   ` Christoph Hellwig
2022-04-27  1:36   ` Guoqing Jiang
2022-04-27 23:27     ` Logan Gunthorpe
2022-04-20 19:54 ` [PATCH v2 10/12] md/raid5: Refactor add_stripe_bio() Logan Gunthorpe
2022-04-21  6:18   ` Christoph Hellwig
2022-04-20 19:54 ` [PATCH v2 11/12] md/raid5: Check all disks in a stripe_head for reshape progress Logan Gunthorpe
2022-04-21  6:18   ` Christoph Hellwig
2022-04-27  1:53   ` Guoqing Jiang
2022-04-27 16:11     ` Logan Gunthorpe
2022-04-20 19:54 ` [PATCH v2 12/12] md/raid5: Pivot raid5_make_request() Logan Gunthorpe
2022-04-21  6:43   ` Christoph Hellwig
2022-04-21 15:54     ` Logan Gunthorpe
2022-04-27  2:06   ` Guoqing Jiang
2022-04-27 16:18     ` Logan Gunthorpe
2022-04-28  1:32       ` Guoqing Jiang
2022-04-21  8:45 ` [PATCH v2 00/12] Improve Raid5 Lock Contention Xiao Ni
2022-04-21 16:02   ` Logan Gunthorpe
2022-04-24  8:00     ` Guoqing Jiang
2022-04-25 15:39       ` Logan Gunthorpe
2022-04-25 16:12         ` Xiao Ni
2022-04-28 21:22           ` Logan Gunthorpe
2022-04-29  0:49             ` Guoqing Jiang
2022-04-29 16:01               ` Logan Gunthorpe
2022-04-30  1:44                 ` Guoqing Jiang
2022-04-24  7:53 ` Guoqing Jiang
2022-04-25 15:37   ` Logan Gunthorpe
2022-04-25 23:07 ` Song Liu [this message]

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=CAPhsuW6j7UYn-jH9-kmBfe5h+PJ_HjP9v6dW+VDKiMW+t+XUhA@mail.gmail.com \
    --to=song@kernel.org \
    --cc=David.Sloan@eideticom.com \
    --cc=Martin.Oliveira@eideticom.com \
    --cc=guoqing.jiang@linux.dev \
    --cc=hch@infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-raid@vger.kernel.org \
    --cc=logang@deltatee.com \
    --cc=sbates@raithlin.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.