From patchwork Fri May 3 09:53:42 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Chamberlain X-Patchwork-Id: 13652622 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id C8D81C4345F for ; Fri, 3 May 2024 10:55:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 507906B0083; Fri, 3 May 2024 06:55:38 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4B7EF6B0088; Fri, 3 May 2024 06:55:38 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 356756B0089; Fri, 3 May 2024 06:55:38 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 101F76B0083 for ; Fri, 3 May 2024 06:55:38 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 70FB7C0DFA for ; Fri, 3 May 2024 10:55:37 +0000 (UTC) X-FDA: 82076778714.23.C56ADD4 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) by imf06.hostedemail.com (Postfix) with ESMTP id 42DAF18001C for ; Fri, 3 May 2024 10:55:35 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=TPBco6Nw; spf=none (imf06.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=none) ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1714733735; a=rsa-sha256; cv=none; b=GaZEzSLTtegqNigv9P3Sl4fvMbX2ZgmdNbjpfqHdoKHH2zcaZMsJZ+jzScAn//6pXQKvHl jaTPkNS8pyvGAFvAgpQXZLfaTZ6NwSvtoTH1Ij7NS7kfs6DMB8sARUAF4nUToclJh6LCx6 815YO8gNF3nPBcpcnj24r5vLPz7P8i4= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=TPBco6Nw; spf=none (imf06.hostedemail.com: domain of mcgrof@infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=mcgrof@infradead.org; dmarc=fail reason="No valid SPF, DKIM not aligned (relaxed)" header.from=kernel.org (policy=none) ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1714733735; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:references:dkim-signature; bh=tXICgLDlPt9x6LyrrWFPrPPbantK/kpg/WVZcyA0J9Y=; b=GcuD7YkLmIBT096JVb34gVl8izReAb57A2FHEWgHvvlluXREqKkzN7sKqnNJOAF7/iGNz+ j/YV/sLlT3m91AzIN4WhYVaQGmgAbSaXz5co+q1W/z+bN5fBM0feJkecV8+TVnAD17Pa14 9SnriNDJblUlYwpkhP8OLcqXS+FG6Tk= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Sender:Content-Transfer-Encoding: MIME-Version:Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-Type: Content-ID:Content-Description:In-Reply-To:References; bh=tXICgLDlPt9x6LyrrWFPrPPbantK/kpg/WVZcyA0J9Y=; b=TPBco6NwOG01vvbhxTM9YpTwNz Ts/4OKTR96oWhFG9iI0NxLctIXyBHrsBnvRF/O4c9zc7GZ5qVi5vEib/fh8BB9bzXn/JUqsvOs+5i nMmiVM6S9z+TeyoLQ9Zg86YuzfPWMu1V9U0aA8gYbXqhxWHGV88wo2EWXmp6wySW0XlmntDpxkoJi g61EgLRDXBIgbmJ+djGYd/zbulnGpNEFdQAvKZClOmoip3KNKbE2x8NUuZ375gi63lcuajfMN02Jx MpPQ3kTvz1Ck0Ti/pc0f5utZGO+H4/e/jXsPh1bxEDYiOOprrbFwhESBdscaR1bLP1pkC+huP1/xi v/kFNmMQ==; Received: from mcgrof by bombadil.infradead.org with local (Exim 4.97.1 #2 (Red Hat Linux)) id 1s2pc2-0000000Fw3K-3Q2M; Fri, 03 May 2024 09:53:54 +0000 From: Luis Chamberlain To: akpm@linux-foundation.org, willy@infradead.org, djwong@kernel.org, brauner@kernel.org, david@fromorbit.com, chandan.babu@oracle.com Cc: hare@suse.de, ritesh.list@gmail.com, john.g.garry@oracle.com, ziy@nvidia.com, linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-mm@kvack.org, linux-block@vger.kernel.org, gost.dev@samsung.com, p.raghav@samsung.com, kernel@pankajraghav.com, mcgrof@kernel.org Subject: [PATCH v5 00/11] enable bs > ps in XFS Date: Fri, 3 May 2024 02:53:42 -0700 Message-ID: <20240503095353.3798063-1-mcgrof@kernel.org> X-Mailer: git-send-email 2.44.0 MIME-Version: 1.0 X-Stat-Signature: 7ecg8p3s8xgzf1ybx1yjugoixzgcfekh X-Rspam-User: X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 42DAF18001C X-HE-Tag: 1714733735-546966 X-HE-Meta: U2FsdGVkX19a6I8lSgXiJJ0PSgrj73uHkogA5WZMY1g1xlXVO8a4dXIaMsV+ldrQdga1hk4k5S5I9n91V9xBec9Zm4pVDnK0QBrpZm8dIy/Skh7vu7883XEj3ec4WI2BfRYoNzFbj/yU4DJk+piwO4Fbn1Su+R1wAdzTLHb4Pn7wQsJIxZeN7ufPat4bzq8wJ7J2uKg1QB4ujT3AVy0rOPRhXeopaGy85Y8Adx64O4cuPGRcB4sPfV6MRvPddlZBTpkNcqkzSVa2gMf7CTqR99nfhFWIQYLMYLwjSw/g/Q2QrF3Dd2m6hw11dcmK9TncxD51+rfvfWp24vXZmuh2RTmwWDuJfG5oOyuom6wafLVOD6SrZLo9kCZyti2RQp6YtoIa67YnOaMBKFBrODbJLivF2Nm6EeKzMNVteGbM9jVTqgSiYwZFPhLc7DezvZVAeybLd+PXvvNCJWYWKE4y8EzlZ+eM9gdAxCNGc1QLF8h0Y3SGav3M0/a17oYctlmv5YGzDMcYBdD6zqwSq1SMnz2MMUpRCqt4Bgodwzt47sGY22g4UJEIXK1qX6o0AZWzFAz1QKDQS0hI+q2OrOiE+/ZPZ8DgtHXYffuCr4VZ71RM1S4qGp52tx2lRevbdPGQI+uAwqNg8WglK51/nLRy6cxxqgEcYtDPYad906DHfIzSxBCaUF0PxuLAyHkJuUhDcJ5m+6u20qrCPqTjmkTPOrsv/wwJCGYN+5Lu9uly6sbDjKZvmvG58f+qeYDB7ez+IDsHiFUcj1HwtDOB8XstklvvkyY7nEHJM1kqKIDNP8IJ+2QaqszBQa0JWb07Z6K86Ek+L7Ya0NXqlHoPk6bVvKKt5fZr7Dl80EYMbI5aZ9jMXcqSjHhMs+3XBVuc94hnMAtqLoPp5P8Py9bURT16UiNsBldl+NUPu4Awex0way5WoNLd1DJp6SXAwjURMKYb5dYJLLLHW6hdeXtj2xe lzy5Cmop f7xvRYEmPy0NkfceKGRYqAtfzfh6h+uGheK4dm1eevUQzZ9arx2ihOjnzlsL/b9QxwO/ojRAcOM8cB4NCbOMeVOmSTnFEFldNwygbWS5m52drlV9+Hacb3fuwFtVC1FpQ/1NnNMpdPaVywNwUwtl5ARSxv7TLmvpPvOSQkHhOqddoeIC9t6M2P+auV24AyX3RpOr004MSEIRMvaCZBhriUG1r037A8sDaeLOrEbmoRUcXiTuJJ6CDkCtJrzWbYDHOEWG6J5MpFFLBag1uyV2f7GXv0ntfi8k7cTpul2u021lfZ+LKlpBXKtV2wxOmdXI5ULN0PyVIgghKSp+iRWq3nR8Vmvoe3FX0E/OMol7S1/83OtAGDbIxX6HZOCc5NdldHB97vT6ZbN92VUrtcO7YSIkG7a1NXIhSR0mIokM0C/2av6iHFVSc1iHwmgHNl2DsCJPUGJlMBgW+Lbogxk1aPWtp4iLGtOVbupEc5P7+8CxT31Nagmk3ie6V4SHQ19Hm92FFjm+sfGAFVGpP4P1N7NugOR5C7qn72WrC4tdijmrdzcqjU9Ho0xjXWnjrFM4Ermgbfs+GNKIeGZe13OquCcCqQrjUivy0GctsAt3O1wafFdTFGqsBR38Nx7GFa7q2EV2N X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: [ I was asked by Pankaj to post this v5 as he's out right now. ] This is the fifth 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. The major change on this v5 is truncation to min order now included and has been tested. The main issue which was observed was root cuased, and Matthew was able to identify a fix for it in xarray, that fix is now queued up on mm-hotfixes-unstable [2]. 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. 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 20240503-large-block-minorder branch [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 [7] https://github.com/linux-kdevops/linux/tree/20240503-large-block-minorder Changes since v4: - Added new Reviewed-by tags - Truncation is now enabled, this depends on Matthew Wilcox xarray fix being merged and its already on its way - filemap_map_pages() simplification as suggested by Matthew Wilcox - minor variable forward declration ordering as suggested by Matthew Wilcox Changes since v3: - Cap the PTE range to i_size for LBS configuration in folio_map_range() - Added Chinners kvmalloc xattr patches - Moved Hannes patches before adding the minorder patches to avoid confusion. - Added mapping_set_folio_order_range(). - Return EINVAL instead EAGAIN in split_huge_page_to_list_to_order() Changes since v2: - Simplified the filemap and readahead changes. (Thanks willy) - Removed DEFINE_READAHEAD_ALIGN. - Added minorder support to readahead_expand(). Changes since v1: - Round up to nearest min nr pages in ra_init - Calculate index in filemap_create instead of doing in filemap_get_pages - Remove unnecessary BUG_ONs in the delete path - Use check_shl_overflow instead of check_mul_overflow - Cast to uint32_t instead of unsigned long in xfs_stat_blksize Changes since RFC v2: - Move order 1 patch above the 1st patch - Remove order == 1 conditional in `fs: Allow fine-grained control of folio sizes`. This fixed generic/630 that was reported in the previous version. - Hide the max order and expose `mapping_set_folio_min_order` instead. - Add new helper mapping_start_index_align and DEFINE_READAHEAD_ALIGN - don't call `page_cache_ra_order` with min order in do_mmap_sync_readahead - simplify ondemand readahead with only aligning the start index at the end - Don't cap ra_pages based on bdi->io_pages - use `checked_mul_overflow` while calculating bytes in validate_fsb - Remove config lbs option - Add a warning while mounting a LBS kernel - Add Acked-by and Reviewed-by from Hannes and Darrick. Changes since RFC v1: - Added willy's patch to enable order-1 folios. - Unified common page cache effort from Hannes LBS work. - Added a new helper min_nrpages and added CONFIG_THP for enabling mapping_large_folio_support - Don't split a folio if it has minorder set. Remove the old code where we set extra pins if it has that requirement. - Split the code in XFS between the validation of mapping count. Put the icache code changes with enabling bs > ps. - Added CONFIG_XFS_LBS option - align the index in do_read_cache_folio() - Removed truncate changes - Fixed generic/091 with iomap changes to iomap_dio_zero function. - Took care of folio truncation scenario in page_cache_ra_unbounded() that happens after read_pages if a folio was found. - Sqaushed and moved commits around - Rebased on top of v6.8-rc4 Dave Chinner (1): xfs: use kvmalloc for xattr buffers Hannes Reinecke (1): readahead: rework loop in page_cache_ra_unbounded() Luis Chamberlain (2): filemap: allocate mapping_min_order folios in the page cache mm: split a folio in minimum folio order chunks Matthew Wilcox (Oracle) (1): fs: Allow fine-grained control of folio sizes Pankaj Raghav (6): 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/direct-io.c | 13 +++- 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 | 10 ++- fs/xfs/xfs_super.c | 10 +-- include/linux/huge_mm.h | 12 ++-- include/linux/pagemap.h | 116 ++++++++++++++++++++++++++++------ mm/filemap.c | 31 ++++++--- mm/huge_memory.c | 50 ++++++++++++++- mm/readahead.c | 94 +++++++++++++++++++++------ 13 files changed, 290 insertions(+), 77 deletions(-)