public inbox for [email protected]
 help / color / mirror / Atom feed
From: Filipe Manana <[email protected]>
To: Stefan Roesch <[email protected]>
Cc: [email protected], [email protected],
	[email protected], [email protected],
	[email protected]
Subject: Re: [PATCH v2 00/12] io-uring/btrfs: support async buffered writes
Date: Thu, 8 Sep 2022 11:14:03 +0100	[thread overview]
Message-ID: <CAL3q7H6Ue2Sy2dU_Cqr93R-F2a_n4OoueaORecjyuPeXU__DaQ@mail.gmail.com> (raw)
In-Reply-To: <[email protected]>

On Thu, Sep 8, 2022 at 1:26 AM Stefan Roesch <[email protected]> wrote:
>
> This patch series adds support for async buffered writes when using both
> btrfs and io-uring. Currently io-uring only supports buffered writes (for btrfs)
> in the slow path, by processing them in the io workers. With this patch series
> it is now possible to support buffered writes in the fast path. To be able to use
> the fast path, the required pages must be in the page cache, the required locks
> in btrfs can be granted immediately and no additional blocks need to be read
> form disk.
>
> This patch series makes use of the changes that have been introduced by a
> previous patch series: "io-uring/xfs: support async buffered writes"
>
> Performance results:
>   For fio the following results have been obtained with a queue depth of
>   1 and 4k block size (runtime 600 secs):
>
>                  sequential writes:
>                  without patch           with patch      libaio     psync
>   iops:              55k                    134k          117K       148K
>   bw:               221MB/s                 538MB/s       469MB/s    592MB/s
>   clat:           15286ns                    82ns         994ns     6340ns

This is very interesting information to not have in the git history,
specially because it's
exactly this that motivates all the patches.

I suggest adding this to the changelog of the last patch, and then
mention that those results
are the result of comparing a branch with the patchset versus one
without it, also mentioning
the subject of all the patches that belong to the patchset.

It should also mention how to run the test: i.e. the fio command line
or config file, so
that it's clear to everyone all the details and how to reproduce the results.

The patchset overall looks good to me, I just left a few comments on
most of the individual patches,
all minor things.

Thanks.

>
>
> For an io depth of 1, the new patch improves throughput by over two times
> (compared to the exiting behavior, where buffered writes are processed by an
> io-worker process) and also the latency is considerably reduced. To achieve the
> same or better performance with the exisiting code an io depth of 4 is required.
> Increasing the iodepth further does not lead to improvements.
>
>
> BTRFS changes:
>  -Add option for NOWAIT IOCB's to tell that searches do not wait on locks. This
>   adds the nowait option to btrfs_path.
>
>  -For NOWAIT buffered writes on PREALLOC or NOCOW extents tell can_nocow_extent()
>   that we don't want to wait on any locks or metadata IO.
>
>  -Support no_flush reservations for nowait buffered writes.
>
>  -Add btrfs_try_lock_ordered_range() function.
>
>  -Add nowait flag to btrfs_check_nocow_lock() to use it in write code path.
>
>  -Add nowait parameter to prepare_pages() function.
>
>  -Plumb nowait through the write code path.
>
>  -Enable nowait buffered writes.
>
>
> Testing:
>   This patch has been tested with xfstests, fsx, fio. xfstests shows no new
>   diffs compared to running without the patch series.
>
>
> Changes:
>
> V2:
>  - Replace EWOULDBLOCK with EAGAIN. In Version 1 it was not used consistently
>  - Export function balance_dirty_pages_ratelimited_flags()
>  - Add asserts/warnings for search functions when nowait is set, but we don't
>    expect that they are invoked with nowait set.
>
>
> Josef Bacik (5):
>   btrfs: implement a nowait option for tree searches
>   btrfs: make can_nocow_extent nowait compatible
>   btrfs: add the ability to use NO_FLUSH for data reservations
>   btrfs: add btrfs_try_lock_ordered_range
>   btrfs: make btrfs_check_nocow_lock nowait compatible
>
> Stefan Roesch (7):
>   mm: export balance_dirty_pages_ratelimited_flags()
>   btrfs: make prepare_pages nowait compatible
>   btrfs: make lock_and_cleanup_extent_if_need nowait compatible
>   btrfs: btrfs: plumb NOWAIT through the write path
>   btrfs: make balance_dirty_pages nowait compatible
>   btrfs: add assert to search functions
>   btrfs: enable nowait async buffered writes
>
>  fs/btrfs/block-group.c    |   2 +-
>  fs/btrfs/ctree.c          |  48 ++++++++++++++-
>  fs/btrfs/ctree.h          |   8 ++-
>  fs/btrfs/delalloc-space.c |  13 +++-
>  fs/btrfs/delalloc-space.h |   3 +-
>  fs/btrfs/extent-tree.c    |   5 ++
>  fs/btrfs/file-item.c      |   4 +-
>  fs/btrfs/file.c           | 124 ++++++++++++++++++++++++++++----------
>  fs/btrfs/inode.c          |  22 ++++---
>  fs/btrfs/locking.c        |  23 +++++++
>  fs/btrfs/locking.h        |   1 +
>  fs/btrfs/ordered-data.c   |  28 +++++++++
>  fs/btrfs/ordered-data.h   |   1 +
>  fs/btrfs/relocation.c     |   2 +-
>  fs/btrfs/scrub.c          |   4 +-
>  fs/btrfs/space-info.c     |   3 +-
>  fs/btrfs/tree-log.c       |   6 +-
>  mm/page-writeback.c       |   1 +
>  18 files changed, 239 insertions(+), 59 deletions(-)
>
>
> base-commit: 53e99dcff61e1523ec1c3628b2d564ba15d32eb7
> --
> 2.30.2
>

      parent reply	other threads:[~2022-09-08 10:14 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-08  0:26 [PATCH v2 00/12] io-uring/btrfs: support async buffered writes Stefan Roesch
2022-09-08  0:26 ` [PATCH v2 01/12] mm: export balance_dirty_pages_ratelimited_flags() Stefan Roesch
2022-09-08 10:18   ` Filipe Manana
2022-09-08  0:26 ` [PATCH v2 02/12] btrfs: implement a nowait option for tree searches Stefan Roesch
2022-09-08 13:19   ` Josef Bacik
2022-09-08 18:05     ` Stefan Roesch
2022-09-08  0:26 ` [PATCH v2 03/12] btrfs: make can_nocow_extent nowait compatible Stefan Roesch
2022-09-08  0:26 ` [PATCH v2 04/12] btrfs: add the ability to use NO_FLUSH for data reservations Stefan Roesch
2022-09-08  0:26 ` [PATCH v2 05/12] btrfs: add btrfs_try_lock_ordered_range Stefan Roesch
2022-09-08 10:18   ` Filipe Manana
2022-09-08 18:12     ` Stefan Roesch
2022-09-08  0:26 ` [PATCH v2 06/12] btrfs: make btrfs_check_nocow_lock nowait compatible Stefan Roesch
2022-09-08 10:18   ` Filipe Manana
2022-09-08 18:23     ` Stefan Roesch
2022-09-08  0:26 ` [PATCH v2 07/12] btrfs: make prepare_pages " Stefan Roesch
2022-09-08 10:17   ` Filipe Manana
2022-09-08 18:33     ` Stefan Roesch
2022-09-08  0:26 ` [PATCH v2 08/12] btrfs: make lock_and_cleanup_extent_if_need " Stefan Roesch
2022-09-08 10:17   ` Filipe Manana
2022-09-08 18:38     ` Stefan Roesch
2022-09-08  0:26 ` [PATCH v2 09/12] btrfs: btrfs: plumb NOWAIT through the write path Stefan Roesch
2022-09-08 10:16   ` Filipe Manana
2022-09-08 18:44     ` Stefan Roesch
2022-09-08  0:26 ` [PATCH v2 10/12] btrfs: make balance_dirty_pages nowait compatible Stefan Roesch
2022-09-08 10:16   ` Filipe Manana
2022-09-08 18:48     ` Stefan Roesch
2022-09-08  0:26 ` [PATCH v2 11/12] btrfs: add assert to search functions Stefan Roesch
2022-09-08 10:15   ` Filipe Manana
2022-09-08 19:10     ` Stefan Roesch
2022-09-08  0:26 ` [PATCH v2 12/12] btrfs: enable nowait async buffered writes Stefan Roesch
2022-09-08 10:14   ` Filipe Manana
2022-09-08 19:14     ` Stefan Roesch
2022-09-08 10:14 ` Filipe Manana [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=CAL3q7H6Ue2Sy2dU_Cqr93R-F2a_n4OoueaORecjyuPeXU__DaQ@mail.gmail.com \
    [email protected] \
    [email protected] \
    [email protected] \
    [email protected] \
    [email protected] \
    [email protected] \
    [email protected] \
    /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