From: Matthew Wilcox <willy@infradead.org>
To: linux-fsdevel@vger.kernel.org, linux-mm@kvack.org
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>,
linux-kernel@vger.kernel.org
Subject: [PATCH v2 00/25] Large pages in the page cache
Date: Tue, 11 Feb 2020 20:18:20 -0800 [thread overview]
Message-ID: <20200212041845.25879-1-willy@infradead.org> (raw)
From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
This patch set does not pass xfstests. Test at your own risk. It is
based on the readahead patchset which I posted yesterday.
The principal 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 first five patches are more or less random cleanups which I came
across while working on this patchset ... Andrew, if you want to just
take those into your tree, it'd probably be a good thing.
hpage_nr_pages() is adapted to handle arbitrary order pages. I also
add thp_order() and thp_size() for legibility. Then the patches tear
through the page cache fixing the places which assume pages are either
PMD_SIZE or PAGE_SIZE. After that, I tackle the iomap buffered I/O path,
removing the assumptions of PAGE_SIZE there.
Finally, we get to actually allocating large pages in the readahead code.
We gradually grow the page size that is allocated, so we don't just
jump straight from order-0 to order-9 pages, but gradually get there
through order-2, order-4, order-6, order-8 and order-9 (on x86; other
architectures will have a different PMD_ORDER).
In some testing, I've seen the code go as far as order-6. Right now it
falls over on an earlier xfstest when it discovers a delayed allocation
extent in an inode which is being removed at unmount.
Matthew Wilcox (Oracle) (24):
mm: Use vm_fault error code directly
mm: Optimise find_subpage for !THP
mm: Use VM_BUG_ON_PAGE in clear_page_dirty_for_io
mm: Unexport find_get_entry
mm: Fix documentation of FGP flags
mm: Allow hpages to be arbitrary order
mm: Introduce thp_size
mm: Introduce thp_order
fs: Add a filesystem flag for large pages
fs: Introduce i_blocks_per_page
fs: Make page_mkwrite_check_truncate thp-aware
mm: Add file_offset_of_ helpers
fs: Add zero_user_large
iomap: Support arbitrarily many blocks per page
iomap: Support large pages in iomap_adjust_read_range
iomap: Support large pages in read paths
iomap: Support large pages in write paths
iomap: Inline data shouldn't see large pages
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: Add large page readahead
William Kucharski (1):
mm: Align THP mappings for non-DAX
drivers/net/ethernet/ibm/ibmveth.c | 2 -
drivers/nvdimm/btt.c | 4 +-
drivers/nvdimm/pmem.c | 3 +-
fs/iomap/buffered-io.c | 111 ++++++++++++++++-------------
fs/jfs/jfs_metapage.c | 2 +-
fs/xfs/xfs_aops.c | 4 +-
fs/xfs/xfs_super.c | 2 +-
include/linux/fs.h | 1 +
include/linux/highmem.h | 22 ++++++
include/linux/huge_mm.h | 21 +++---
include/linux/mm.h | 2 +
include/linux/pagemap.h | 78 ++++++++++++++++----
mm/filemap.c | 67 +++++++++++------
mm/huge_memory.c | 14 ++--
mm/internal.h | 2 +-
mm/page-writeback.c | 2 +-
mm/page_io.c | 2 +-
mm/page_vma_mapped.c | 4 +-
mm/readahead.c | 98 +++++++++++++++++++++++--
19 files changed, 322 insertions(+), 119 deletions(-)
--
2.25.0
next reply other threads:[~2020-02-12 4:19 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-12 4:18 Matthew Wilcox [this message]
2020-02-12 4:18 ` [PATCH v2 01/25] mm: Use vm_fault error code directly Matthew Wilcox
2020-02-12 7:34 ` Christoph Hellwig
2020-02-12 4:18 ` [PATCH v2 02/25] mm: Optimise find_subpage for !THP Matthew Wilcox
2020-02-12 7:41 ` Christoph Hellwig
2020-02-12 13:02 ` Matthew Wilcox
2020-02-12 17:52 ` Christoph Hellwig
2020-02-13 13:50 ` Kirill A. Shutemov
2020-02-12 4:18 ` [PATCH v2 03/25] mm: Use VM_BUG_ON_PAGE in clear_page_dirty_for_io Matthew Wilcox
2020-02-12 7:38 ` Christoph Hellwig
2020-02-13 13:50 ` Kirill A. Shutemov
2020-02-12 4:18 ` [PATCH v2 04/25] mm: Unexport find_get_entry Matthew Wilcox
2020-02-12 7:37 ` Christoph Hellwig
2020-02-13 13:51 ` Kirill A. Shutemov
2020-02-12 4:18 ` [PATCH v2 05/25] mm: Fix documentation of FGP flags Matthew Wilcox
2020-02-12 7:42 ` Christoph Hellwig
2020-02-12 19:11 ` Matthew Wilcox
2020-02-13 14:00 ` Kirill A. Shutemov
2020-02-13 13:59 ` Kirill A. Shutemov
2020-02-13 14:34 ` Matthew Wilcox
2020-02-12 4:18 ` [PATCH v2 06/25] mm: Allow hpages to be arbitrary order Matthew Wilcox
2020-02-13 14:11 ` Kirill A. Shutemov
2020-02-13 14:30 ` Matthew Wilcox
2020-02-12 4:18 ` [PATCH v2 07/25] mm: Introduce thp_size Matthew Wilcox
2020-02-13 14:19 ` Kirill A. Shutemov
2020-02-12 4:18 ` [PATCH v2 08/25] mm: Introduce thp_order Matthew Wilcox
2020-02-13 14:20 ` Kirill A. Shutemov
2020-02-12 4:18 ` [PATCH v2 09/25] fs: Add a filesystem flag for large pages Matthew Wilcox
2020-02-12 7:43 ` Christoph Hellwig
2020-02-12 14:59 ` Matthew Wilcox
2020-02-12 4:18 ` [PATCH v2 10/25] fs: Introduce i_blocks_per_page Matthew Wilcox
2020-02-12 7:44 ` Christoph Hellwig
2020-02-12 15:05 ` Matthew Wilcox
2020-02-12 17:54 ` Christoph Hellwig
2020-02-13 15:40 ` Kirill A. Shutemov
2020-02-13 16:07 ` Matthew Wilcox
2020-02-12 4:18 ` [PATCH v2 11/25] fs: Make page_mkwrite_check_truncate thp-aware Matthew Wilcox
2020-02-13 15:44 ` Kirill A. Shutemov
2020-02-13 16:26 ` Matthew Wilcox
2020-02-12 4:18 ` [PATCH v2 12/25] mm: Add file_offset_of_ helpers Matthew Wilcox
2020-02-12 7:46 ` Christoph Hellwig
2020-02-12 4:18 ` [PATCH v2 13/25] fs: Add zero_user_large Matthew Wilcox
2020-02-14 13:52 ` Kirill A. Shutemov
2020-02-14 16:03 ` Matthew Wilcox
2020-02-18 14:16 ` Kirill A. Shutemov
2020-02-18 16:13 ` Matthew Wilcox
2020-02-18 17:10 ` Kirill A. Shutemov
2020-02-18 18:07 ` Matthew Wilcox
2020-02-21 12:42 ` Kirill A. Shutemov
2020-02-12 4:18 ` [PATCH v2 14/25] iomap: Support arbitrarily many blocks per page Matthew Wilcox
2020-02-12 8:05 ` Christoph Hellwig
2020-02-12 4:18 ` [PATCH v2 15/25] iomap: Support large pages in iomap_adjust_read_range Matthew Wilcox
2020-02-12 8:11 ` Christoph Hellwig
2020-02-12 4:18 ` [PATCH v2 16/25] iomap: Support large pages in read paths Matthew Wilcox
2020-02-12 8:13 ` Christoph Hellwig
2020-02-12 17:45 ` Matthew Wilcox
2020-02-12 4:18 ` [PATCH v2 17/25] iomap: Support large pages in write paths Matthew Wilcox
2020-02-12 8:17 ` Christoph Hellwig
2020-02-12 4:18 ` [PATCH v2 18/25] iomap: Inline data shouldn't see large pages Matthew Wilcox
2020-02-12 8:05 ` Christoph Hellwig
2020-02-12 4:18 ` [PATCH v2 19/25] xfs: Support " Matthew Wilcox
2020-02-12 4:18 ` [PATCH v2 20/25] mm: Make prep_transhuge_page return its argument Matthew Wilcox
2020-02-12 4:18 ` [PATCH v2 21/25] mm: Add __page_cache_alloc_order Matthew Wilcox
2020-02-12 4:18 ` [PATCH v2 22/25] mm: Allow large pages to be added to the page cache Matthew Wilcox
2020-02-12 4:18 ` [PATCH v2 23/25] mm: Allow large pages to be removed from " Matthew Wilcox
2020-02-12 4:18 ` [PATCH v2 24/25] mm: Add large page readahead Matthew Wilcox
2020-02-12 4:18 ` [PATCH v2 25/25] mm: Align THP mappings for non-DAX Matthew Wilcox
2020-02-12 7:50 ` Christoph Hellwig
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=20200212041845.25879-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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).