From: Matthew Wilcox <willy@infradead.org>
To: linux-fsdevel@vger.kernel.org
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: [PATCH v5 00/39] Large pages in the page cache
Date: Thu, 28 May 2020 19:57:45 -0700 [thread overview]
Message-ID: <20200529025824.32296-1-willy@infradead.org> (raw)
From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
This patchset gets a little further through xfstests than
v4 did. It's still based on readahead_v11, and you can get it from
http://git.infradead.org/users/willy/linux-dax.git/shortlog/refs/heads/xarray-pagecache
if you'd rather see it there (this branch is force-pushed frequently)
The primary idea here is that a large part of the overhead in dealing
with individual pages is that there's just so darned many of them.
We would be better off dealing with fewer, larger pages, even if they
don't get to be the size necessary for the CPU to use a larger TLB entry.
The approach taken is to make THPs support arbitrary power-of-two sizes
(instead of just PMDs). There's probably some tuning to be done to decide
what sizes are worth using, but we're a fair way from doing performance
work with this patchset yet.
TODO:
- Rename hpage_nr_pages() to thp_count()
- Maybe add a thp_mask()
- Should flush_dcache_page() support THPs natively
- Add Bill's SoB to all patches
v5:
- Add a mapping AS_LARGE_PAGES flag to reduce the levels of indirection
(Dave Chinner)
- Change iomap_invalidate_page() to handle subpages of a THP being punched
- Ensure we don't call page_cache_async_readahead() with a tail page
- Revert to Bill's original patch for thp_get_unmapped_area() to allow
for hardware page sizes other than PMD to be supported more easily
- Remove a few more HPAGE_PMD_NR
- Move shmem_punch_compound() to truncate.c and rename it to punch_thp()
- Add support for page_private to punch_thp()
v4:
- Fix thp_size typo
- Fix the iomap page_mkwrite() path to operate on the head page, even
though the vm_fault has a pointer to the tail page
- Fix iomap_finish_ioend() to use bio_for_each_thp_segment_all()
- Rework PageDoubleMap (see first two patches for details)
- Fix page_cache_delete() to handle shadow entries being stored to a THP
- Fix the assertion in pagecache_get_page() to handle tail pages
- Change PageReadahead from NO_COMPOUND to ONLY_HEAD
- Handle PageReadahead being set on head pages
- Handle total_mapcount correctly (Kirill)
- Pull the FS_LARGE_PAGES check out into mapping_large_pages()
- Fix page size assumption in truncate_cleanup_page()
- Avoid splitting large pages unnecessarily on truncate
- Disable the page cache truncation introduced as part of the read-only
THP patch set
- Call compound_head() in iomap buffered write paths -- we retrieve a
(potentially) tail page from the page cache and need to use that for
flush_dcache_page(), but we expect to operate on a head page in most
of the iomap code
Kirill A. Shutemov (1):
mm: Fix total_mapcount assumption of page size
Matthew Wilcox (Oracle) (37):
mm: Move PageDoubleMap bit
mm: Simplify PageDoubleMap with PF_SECOND policy
mm: Allow hpages to be arbitrary order
mm: Introduce thp_size
mm: Introduce thp_order
mm: Introduce offset_in_thp
fs: Add a filesystem flag for large pages
fs: Do not update nr_thps for large page mappings
fs: Introduce i_blocks_per_page
fs: Make page_mkwrite_check_truncate thp-aware
fs: Support THPs in zero_user_segments
bio: Add bio_for_each_thp_segment_all
iomap: Support arbitrarily many blocks per page
iomap: Support large pages in iomap_adjust_read_range
iomap: Support large pages in invalidatepage
iomap: Support large pages in read paths
iomap: Support large pages in write paths
iomap: Inline data shouldn't see large pages
iomap: Handle tail pages in iomap_page_mkwrite
xfs: Support large pages
mm: Make prep_transhuge_page return its argument
mm: Add __page_cache_alloc_order
mm: Allow large pages to be added to the page cache
mm: Allow large pages to be removed from the page cache
mm: Remove page fault assumption of compound page size
mm: Remove assumptions of THP size
mm: Avoid splitting large pages
mm: Fix truncation for pages of arbitrary size
mm: Handle truncates that split large pages
mm: Support storing shadow entries for large pages
mm: Support retrieving tail pages from the page cache
mm: Support tail pages in wait_for_stable_page
mm: Add DEFINE_READAHEAD
mm: Make page_cache_readahead_unbounded take a readahead_control
mm: Make __do_page_cache_readahead take a readahead_control
mm: Allow PageReadahead to be set on head pages
mm: Add large page readahead
William Kucharski (1):
mm: Align THP mappings for non-DAX
drivers/nvdimm/btt.c | 4 +-
drivers/nvdimm/pmem.c | 6 +-
fs/ext4/verity.c | 4 +-
fs/f2fs/verity.c | 4 +-
fs/inode.c | 2 +
fs/iomap/buffered-io.c | 127 ++++++++++++++++++--------------
fs/jfs/jfs_metapage.c | 2 +-
fs/xfs/xfs_aops.c | 4 +-
fs/xfs/xfs_super.c | 2 +-
include/linux/bio.h | 13 ++++
include/linux/bvec.h | 23 ++++++
include/linux/fs.h | 28 +------
include/linux/highmem.h | 15 +++-
include/linux/huge_mm.h | 25 +++++--
include/linux/mm.h | 97 +++++++++++++------------
include/linux/page-flags.h | 46 ++++--------
include/linux/pagemap.h | 97 ++++++++++++++++++++++---
mm/filemap.c | 91 +++++++++++++++--------
mm/highmem.c | 62 +++++++++++++++-
mm/huge_memory.c | 38 +++++-----
mm/internal.h | 15 ++--
mm/memory.c | 7 +-
mm/page-writeback.c | 1 +
mm/page_io.c | 2 +-
mm/page_vma_mapped.c | 4 +-
mm/readahead.c | 145 ++++++++++++++++++++++++++++---------
mm/rmap.c | 10 +--
mm/shmem.c | 30 +-------
mm/truncate.c | 61 ++++++++++++++--
mm/vmscan.c | 5 +-
30 files changed, 633 insertions(+), 337 deletions(-)
--
2.26.2
next reply other threads:[~2020-05-29 2:59 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-29 2:57 Matthew Wilcox [this message]
2020-05-29 2:57 ` [PATCH v5 01/39] mm: Move PageDoubleMap bit Matthew Wilcox
2020-05-29 2:57 ` [PATCH v5 02/39] mm: Simplify PageDoubleMap with PF_SECOND policy Matthew Wilcox
2020-05-29 2:57 ` [PATCH v5 03/39] mm: Allow hpages to be arbitrary order Matthew Wilcox
2020-05-29 2:57 ` [PATCH v5 04/39] mm: Introduce thp_size Matthew Wilcox
2020-05-29 2:57 ` [PATCH v5 05/39] mm: Introduce thp_order Matthew Wilcox
2020-05-29 2:57 ` [PATCH v5 06/39] mm: Introduce offset_in_thp Matthew Wilcox
2020-05-29 2:57 ` [PATCH v5 07/39] fs: Add a filesystem flag for large pages Matthew Wilcox
2020-05-29 2:57 ` [PATCH v5 08/39] fs: Do not update nr_thps for large page mappings Matthew Wilcox
2020-05-29 2:57 ` [PATCH v5 09/39] fs: Introduce i_blocks_per_page Matthew Wilcox
2020-05-29 2:57 ` [PATCH v5 10/39] fs: Make page_mkwrite_check_truncate thp-aware Matthew Wilcox
2020-05-29 2:57 ` [PATCH v5 11/39] fs: Support THPs in zero_user_segments Matthew Wilcox
2020-05-29 2:57 ` [PATCH v5 12/39] bio: Add bio_for_each_thp_segment_all Matthew Wilcox
2020-05-29 2:57 ` [PATCH v5 13/39] iomap: Support arbitrarily many blocks per page Matthew Wilcox
2020-05-29 2:57 ` [PATCH v5 14/39] iomap: Support large pages in iomap_adjust_read_range Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 15/39] iomap: Support large pages in invalidatepage Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 16/39] iomap: Support large pages in read paths Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 17/39] iomap: Support large pages in write paths Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 18/39] iomap: Inline data shouldn't see large pages Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 19/39] iomap: Handle tail pages in iomap_page_mkwrite Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 20/39] xfs: Support large pages Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 21/39] mm: Make prep_transhuge_page return its argument Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 22/39] mm: Add __page_cache_alloc_order Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 23/39] mm: Allow large pages to be added to the page cache Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 24/39] mm: Allow large pages to be removed from " Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 25/39] mm: Remove page fault assumption of compound page size Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 26/39] mm: Fix total_mapcount assumption of " Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 27/39] mm: Remove assumptions of THP size Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 28/39] mm: Avoid splitting large pages Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 29/39] mm: Fix truncation for pages of arbitrary size Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 30/39] mm: Handle truncates that split large pages Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 31/39] mm: Support storing shadow entries for " Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 32/39] mm: Support retrieving tail pages from the page cache Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 33/39] mm: Support tail pages in wait_for_stable_page Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 34/39] mm: Add DEFINE_READAHEAD Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 35/39] mm: Make page_cache_readahead_unbounded take a readahead_control Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 36/39] mm: Make __do_page_cache_readahead " Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 37/39] mm: Allow PageReadahead to be set on head pages Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 38/39] mm: Add large page readahead Matthew Wilcox
2020-05-29 2:58 ` [PATCH v5 39/39] mm: Align THP mappings for non-DAX Matthew Wilcox
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=20200529025824.32296-1-willy@infradead.org \
--to=willy@infradead.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
/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.