All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCHSET v2 0/3] Improve IOCB_NOWAIT O_DIRECT reads
@ 2021-02-09  2:30 Jens Axboe
  2021-02-09  2:30 ` [PATCH 1/3] mm: provide filemap_range_needs_writeback() helper Jens Axboe
                   ` (3 more replies)
  0 siblings, 4 replies; 22+ messages in thread
From: Jens Axboe @ 2021-02-09  2:30 UTC (permalink / raw)
  To: linux-fsdevel, linux-mm; +Cc: hch, akpm

Hi,

For v1, see:

https://lore.kernel.org/linux-fsdevel/20210208221829.17247-1-axboe@kernel.dk/

tldr; don't -EAGAIN IOCB_NOWAIT dio reads just because we have page cache
entries for the given range. This causes unnecessary work from the callers
side, when the IO could have been issued totally fine without blocking on
writeback when there is none.

 fs/iomap/direct-io.c | 23 ++++++++++++++--------
 include/linux/fs.h   |  2 ++
 mm/filemap.c         | 47 ++++++++++++++++++++++++++++++++++++++++++--
 3 files changed, 62 insertions(+), 10 deletions(-)

Since v1:

- Simplify the filemap_range_needs_writeback() loop (Willy)
- Drop the write side (Chinner)

-- 
Jens Axboe



^ permalink raw reply	[flat|nested] 22+ messages in thread
* [PATCHSET v3 0/3] Improve IOCB_NOWAIT O_DIRECT reads
@ 2021-02-24 16:44 Jens Axboe
  2021-02-24 16:44 ` [PATCH 1/3] mm: provide filemap_range_needs_writeback() helper Jens Axboe
  0 siblings, 1 reply; 22+ messages in thread
From: Jens Axboe @ 2021-02-24 16:44 UTC (permalink / raw)
  To: linux-fsdevel, linux-mm; +Cc: akpm

Hi,

For v1, see:

https://lore.kernel.org/linux-fsdevel/20210208221829.17247-1-axboe@kernel.dk/

tldr; don't -EAGAIN IOCB_NOWAIT dio reads just because we have page cache
entries for the given range. This causes unnecessary work from the callers
side, when the IO could have been issued totally fine without blocking on
writeback when there is none.

 fs/iomap/direct-io.c | 24 ++++++++++++++--------
 include/linux/fs.h   |  2 ++
 mm/filemap.c         | 47 ++++++++++++++++++++++++++++++++++++++++++--
 3 files changed, 63 insertions(+), 10 deletions(-)

Andrew, any chance you can pick this up for 5.12?

Since v2:
- Drop overly long line (hch)
- Rebase to master, iomap changed flags to iomap_flags

-- 
Jens Axboe



^ permalink raw reply	[flat|nested] 22+ messages in thread
* [PATCHSET 0/3] Improve IOCB_NOWAIT O_DIRECT
@ 2021-02-08 22:18 Jens Axboe
  2021-02-08 22:18 ` [PATCH 1/3] mm: provide filemap_range_needs_writeback() helper Jens Axboe
  0 siblings, 1 reply; 22+ messages in thread
From: Jens Axboe @ 2021-02-08 22:18 UTC (permalink / raw)
  To: linux-fsdevel, linux-mm; +Cc: hch, akpm

Hi,

Ran into an issue with IOCB_NOWAIT and O_DIRECT, which causes a rather
serious performance issue. If IOCB_NOWAIT is set, the generic/iomap
iterators check for page cache presence in the given range, and return
-EAGAIN if any is there. This is rather simplistic and looks like
something that was never really finished. For !IOCB_NOWAIT, we simply
call filemap_write_and_wait_range() to issue (if any) and wait on the
range. The fact that we have page cache entries for this range does
not mean that we cannot safely do O_DIRECT IO to/from it.

This series adds filemap_range_needs_writeback(), which checks if
we have pages in the range that do require us to call
filemap_write_and_wait_range(). If we don't, then we can proceed just
fine with IOCB_NOWAIT.

The problem manifested itself in a production environment, where someone
is doing O_DIRECT on a raw block device. Due to other circumstances,
blkid was triggered on this device periodically, and blkid very helpfully
does a number of page cache reads on the device. Now the mapping has
page cache entries, and performance falls to pieces because we can no
longer reliably do IOCB_NOWAIT O_DIRECT.

Patch 1 adds the helper, patch 2 uses it for the generic iterators, and
patch 3 applies the same to the iomap direct-io code.

 fs/iomap/direct-io.c | 10 ++++-----
 include/linux/fs.h   |  2 ++
 mm/filemap.c         | 52 +++++++++++++++++++++++++++++++++++++++++---
 3 files changed, 56 insertions(+), 8 deletions(-)

-- 
Jens Axboe




^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2021-02-24 17:23 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-09  2:30 [PATCHSET v2 0/3] Improve IOCB_NOWAIT O_DIRECT reads Jens Axboe
2021-02-09  2:30 ` [PATCH 1/3] mm: provide filemap_range_needs_writeback() helper Jens Axboe
2021-02-09  7:47   ` Christoph Hellwig
2021-02-09 14:30     ` Jens Axboe
2021-02-09  2:30 ` [PATCH 2/3] mm: use filemap_range_needs_writeback() for O_DIRECT reads Jens Axboe
2021-02-09  7:48   ` Christoph Hellwig
2021-02-09 14:27     ` Jens Axboe
2021-02-09  2:30 ` [PATCH 3/3] iomap: " Jens Axboe
2021-02-09  7:51   ` Christoph Hellwig
2021-02-09 14:29     ` Jens Axboe
2021-02-09 19:55 ` [PATCHSET v2 0/3] Improve IOCB_NOWAIT " Andrew Morton
2021-02-09 20:11   ` Jens Axboe
2021-02-10  8:07     ` Sedat Dilek
2021-02-10  8:07       ` Sedat Dilek
2021-02-10 14:47       ` Jens Axboe
  -- strict thread matches above, loose matches on Subject: below --
2021-02-24 16:44 [PATCHSET v3 " Jens Axboe
2021-02-24 16:44 ` [PATCH 1/3] mm: provide filemap_range_needs_writeback() helper Jens Axboe
2021-02-24 16:50   ` Matthew Wilcox
2021-02-24 16:53     ` Jens Axboe
2021-02-24 17:22   ` Jan Kara
2021-02-08 22:18 [PATCHSET 0/3] Improve IOCB_NOWAIT O_DIRECT Jens Axboe
2021-02-08 22:18 ` [PATCH 1/3] mm: provide filemap_range_needs_writeback() helper Jens Axboe
2021-02-08 23:02   ` Matthew Wilcox
2021-02-08 23:21     ` Jens Axboe

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.