lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20200212041845.25879-1-willy@infradead.org>
Date:   Tue, 11 Feb 2020 20:18:20 -0800
From:   Matthew Wilcox <willy@...radead.org>
To:     linux-fsdevel@...r.kernel.org, linux-mm@...ck.org
Cc:     "Matthew Wilcox (Oracle)" <willy@...radead.org>,
        linux-kernel@...r.kernel.org
Subject: [PATCH v2 00/25] Large pages in the page cache

From: "Matthew Wilcox (Oracle)" <willy@...radead.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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ