From: Ming Lei <[email protected]>
To: Pavel Begunkov <[email protected]>
Cc: [email protected], Jens Axboe <[email protected]>,
Christoph Hellwig <[email protected]>,
Matthew Wilcox <[email protected]>,
Johannes Weiner <[email protected]>,
Alexander Viro <[email protected]>,
"Darrick J . Wong" <[email protected]>,
"Martin K . Petersen" <[email protected]>,
Jonathan Corbet <[email protected]>,
[email protected], [email protected],
[email protected], [email protected],
[email protected], [email protected],
[email protected], Christoph Hellwig <[email protected]>
Subject: Re: [PATCH v3 3/7] block/psi: remove PSI annotations from direct IO
Date: Mon, 11 Jan 2021 10:52:05 +0800 [thread overview]
Message-ID: <20210111025205.GD4147870@T590> (raw)
In-Reply-To: <faad7d7f58ff45285eaac9af7fae9a5fcca98977.1610170479.git.asml.silence@gmail.com>
On Sat, Jan 09, 2021 at 04:02:59PM +0000, Pavel Begunkov wrote:
> Direct IO does not operate on the current working set of pages managed
> by the kernel, so it should not be accounted as memory stall to PSI
> infrastructure.
>
> The block layer and iomap direct IO use bio_iov_iter_get_pages()
> to build bios, and they are the only users of it, so to avoid PSI
> tracking for them clear out BIO_WORKINGSET flag. Do same for
> dio_bio_submit() because fs/direct_io constructs bios by hand directly
> calling bio_add_page().
>
> Reported-by: Christoph Hellwig <[email protected]>
> Suggested-by: Christoph Hellwig <[email protected]>
> Suggested-by: Johannes Weiner <[email protected]>
> Reviewed-by: Christoph Hellwig <[email protected]>
> Signed-off-by: Pavel Begunkov <[email protected]>
> ---
> block/bio.c | 6 ++++++
> fs/direct-io.c | 2 ++
> 2 files changed, 8 insertions(+)
>
> diff --git a/block/bio.c b/block/bio.c
> index 1f2cc1fbe283..9f26984af643 100644
> --- a/block/bio.c
> +++ b/block/bio.c
> @@ -1099,6 +1099,9 @@ static int __bio_iov_append_get_pages(struct bio *bio, struct iov_iter *iter)
> * fit into the bio, or are requested in @iter, whatever is smaller. If
> * MM encounters an error pinning the requested pages, it stops. Error
> * is returned only if 0 pages could be pinned.
> + *
> + * It's intended for direct IO, so doesn't do PSI tracking, the caller is
> + * responsible for setting BIO_WORKINGSET if necessary.
> */
> int bio_iov_iter_get_pages(struct bio *bio, struct iov_iter *iter)
> {
> @@ -1123,6 +1126,9 @@ int bio_iov_iter_get_pages(struct bio *bio, struct iov_iter *iter)
>
> if (is_bvec)
> bio_set_flag(bio, BIO_NO_PAGE_REF);
> +
> + /* don't account direct I/O as memory stall */
> + bio_clear_flag(bio, BIO_WORKINGSET);
> return bio->bi_vcnt ? 0 : ret;
> }
> EXPORT_SYMBOL_GPL(bio_iov_iter_get_pages);
> diff --git a/fs/direct-io.c b/fs/direct-io.c
> index d53fa92a1ab6..0e689233f2c7 100644
> --- a/fs/direct-io.c
> +++ b/fs/direct-io.c
> @@ -426,6 +426,8 @@ static inline void dio_bio_submit(struct dio *dio, struct dio_submit *sdio)
> unsigned long flags;
>
> bio->bi_private = dio;
> + /* don't account direct I/O as memory stall */
> + bio_clear_flag(bio, BIO_WORKINGSET);
>
> spin_lock_irqsave(&dio->bio_lock, flags);
> dio->refcount++;
> --
> 2.24.0
>
Reviewed-by: Ming Lei <[email protected]>
--
Ming
next prev parent reply other threads:[~2021-01-11 2:53 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-09 16:02 [PATCH v3 0/7] no-copy bvec Pavel Begunkov
2021-01-09 16:02 ` [PATCH v3 1/7] splice: don't generate zero-len segement bvecs Pavel Begunkov
2021-01-11 2:48 ` Ming Lei
2021-01-09 16:02 ` [PATCH v3 2/7] bvec/iter: disallow zero-length segment bvecs Pavel Begunkov
2021-01-11 2:49 ` Ming Lei
2021-01-09 16:02 ` [PATCH v3 3/7] block/psi: remove PSI annotations from direct IO Pavel Begunkov
2021-01-11 2:52 ` Ming Lei [this message]
2021-01-09 16:03 ` [PATCH v3 4/7] target/file: allocate the bvec array as part of struct target_core_file_cmd Pavel Begunkov
2021-01-11 2:53 ` Ming Lei
2021-01-09 16:03 ` [PATCH v3 5/7] iov_iter: optimise bvec iov_iter_advance() Pavel Begunkov
2021-01-11 2:55 ` Ming Lei
2021-01-09 16:03 ` [PATCH v3 6/7] bio: add a helper calculating nr segments to alloc Pavel Begunkov
2021-01-11 2:57 ` Ming Lei
2021-01-09 16:03 ` [PATCH v3 7/7] bio: don't copy bvec for direct IO Pavel Begunkov
2021-01-11 3:00 ` Ming Lei
2021-01-25 15:58 ` [PATCH v3 0/7] no-copy bvec Jens Axboe
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=20210111025205.GD4147870@T590 \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[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