mbox series

[v9,00/10] enable bs > ps in XFS

Message ID 20240704112320.82104-1-kernel@pankajraghav.com (mailing list archive)
Headers show
Series enable bs > ps in XFS | expand

Message

Pankaj Raghav (Samsung) July 4, 2024, 11:23 a.m. UTC
From: Pankaj Raghav <p.raghav@samsung.com>

This is the ninth version of the series that enables block size > page size
(Large Block Size) in XFS.
The context and motivation can be seen in cover letter of the RFC v1 [0].
We also recorded a talk about this effort at LPC [1], if someone would
like more context on this effort.

A lot of emphasis has been put on testing using kdevops, starting with an XFS
baseline [3]. The testing has been split into regression and progression.

Regression testing:
In regression testing, we ran the whole test suite to check for regressions on
existing profiles due to the page cache changes.

I also ran split_huge_page_test selftest on XFS filesystem to check for
huge page splits in min order chunks is done correctly.

No regressions were found with these patches added on top.

Progression testing:
For progression testing, we tested for 8k, 16k, 32k and 64k block sizes.  To
compare it with existing support, an ARM VM with 64k base page system (without
our patches) was used as a reference to check for actual failures due to LBS
support in a 4k base page size system.

There are some tests that assumes block size < page size that needs to be fixed.
We have a tree with fixes for xfstests [4], most of the changes have been posted
already, and only a few minor changes need to be posted. Already part of these
changes has been upstreamed to fstests, and new tests have also been written and
are out for review, namely for mmap zeroing-around corner cases, compaction
and fsstress races on mm, and stress testing folio truncation on file mapped
folios.

No new failures were found with the LBS support.

We've done some preliminary performance tests with fio on XFS on 4k block size
against pmem and NVMe with buffered IO and Direct IO on vanilla Vs + these
patches applied, and detected no regressions.

We also wrote an eBPF tool called blkalgn [5] to see if IO sent to the device
is aligned and at least filesystem block size in length.

For those who want this in a git tree we have this up on a kdevops
large-block-minorder-for-next-v9 tag [6].

[0] https://lore.kernel.org/lkml/20230915183848.1018717-1-kernel@pankajraghav.com/
[1] https://www.youtube.com/watch?v=ar72r5Xf7x4
[2] https://lkml.kernel.org/r/20240501153120.4094530-1-willy@infradead.org
[3] https://github.com/linux-kdevops/kdevops/blob/master/docs/xfs-bugs.md
489 non-critical issues and 55 critical issues. We've determined and reported
that the 55 critical issues have all fall into 5 common  XFS asserts or hung
tasks  and 2 memory management asserts.
[4] https://github.com/linux-kdevops/fstests/tree/lbs-fixes
[5] https://github.com/iovisor/bcc/pull/4813
[6] https://github.com/linux-kdevops/linux/
[7] https://lore.kernel.org/linux-kernel/Zl20pc-YlIWCSy6Z@casper.infradead.org/#t

Changes since v8:
- make iomap_dio_zero return error code and some variable name changes.
- Call THP_SPLIT_PAGE_FAILED only if folio_is_pmd_mappable()
- Collected RVB from willy, Darrick and Dave.

Dave Chinner (1):
  xfs: use kvmalloc for xattr buffers

Luis Chamberlain (1):
  mm: split a folio in minimum folio order chunks

Matthew Wilcox (Oracle) (1):
  fs: Allow fine-grained control of folio sizes

Pankaj Raghav (7):
  filemap: allocate mapping_min_order folios in the page cache
  readahead: allocate folios with mapping_min_order in readahead
  filemap: cap PTE range to be created to allowed zero fill in
    folio_map_range()
  iomap: fix iomap_dio_zero() for fs bs > system page size
  xfs: expose block size in stat
  xfs: make the calculation generic in xfs_sb_validate_fsb_count()
  xfs: enable block size larger than page size support

 fs/iomap/buffered-io.c        |   4 +-
 fs/iomap/direct-io.c          |  45 ++++++++++++--
 fs/xfs/libxfs/xfs_attr_leaf.c |  15 ++---
 fs/xfs/libxfs/xfs_ialloc.c    |   5 ++
 fs/xfs/libxfs/xfs_shared.h    |   3 +
 fs/xfs/xfs_icache.c           |   6 +-
 fs/xfs/xfs_iops.c             |   2 +-
 fs/xfs/xfs_mount.c            |   8 ++-
 fs/xfs/xfs_super.c            |  18 +++---
 include/linux/huge_mm.h       |  14 +++--
 include/linux/pagemap.h       | 107 +++++++++++++++++++++++++++++-----
 mm/filemap.c                  |  36 +++++++-----
 mm/huge_memory.c              |  55 +++++++++++++++--
 mm/readahead.c                |  83 +++++++++++++++++++-------
 14 files changed, 317 insertions(+), 84 deletions(-)


base-commit: 74564adfd3521d9e322cfc345fdc132df80f3c79

Comments

Luis Chamberlain July 8, 2024, 10:12 p.m. UTC | #1
On Thu, Jul 04, 2024 at 11:23:10AM +0000, Pankaj Raghav (Samsung) wrote:
> From: Pankaj Raghav <p.raghav@samsung.com>
> 
> This is the ninth version of the series that enables block size > page size
> (Large Block Size) in XFS.

It's too late to get this in for v6.11, but I'd like to get it more exposure
for testing. Anyone oppose getting this to start being merged now into
linux-next so we can start testing for *more* than a kernel release cycle?

  Luis
Matthew Wilcox July 8, 2024, 10:27 p.m. UTC | #2
On Mon, Jul 08, 2024 at 03:12:58PM -0700, Luis Chamberlain wrote:
> On Thu, Jul 04, 2024 at 11:23:10AM +0000, Pankaj Raghav (Samsung) wrote:
> > From: Pankaj Raghav <p.raghav@samsung.com>
> > 
> > This is the ninth version of the series that enables block size > page size
> > (Large Block Size) in XFS.
> 
> It's too late to get this in for v6.11, but I'd like to get it more exposure
> for testing. Anyone oppose getting this to start being merged now into
> linux-next so we can start testing for *more* than a kernel release cycle?

That's not how linux-next works.  It's only for patches which are
destined for the next merge window, not for the one after that.
Stephen Rothwell July 8, 2024, 10:40 p.m. UTC | #3
Hi Luis,

On Mon, 8 Jul 2024 15:12:58 -0700 Luis Chamberlain <mcgrof@kernel.org> wrote:
>
> On Thu, Jul 04, 2024 at 11:23:10AM +0000, Pankaj Raghav (Samsung) wrote:
> > From: Pankaj Raghav <p.raghav@samsung.com>
> > 
> > This is the ninth version of the series that enables block size > page size
> > (Large Block Size) in XFS.  
> 
> It's too late to get this in for v6.11, but I'd like to get it more exposure
> for testing. Anyone oppose getting this to start being merged now into
> linux-next so we can start testing for *more* than a kernel release cycle?

Yes :-)

The rules for linux-next look like this:

You will need to ensure that the patches/commits in your tree/series have
been:
     * submitted under GPL v2 (or later) and include the Contributor's
        Signed-off-by,
     * posted to the relevant mailing list,
     * reviewed by you (or another maintainer of your subsystem tree),
     * successfully unit tested, and 
     * destined for the current or next Linux merge window.

We don't want code that is not going into the next merge window
creating conflicts and possible run time problems wasting time for
people who are trying to stabilise code that is destined for the next
merge window.