From patchwork Wed Jun 21 08:38:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pankaj Raghav X-Patchwork-Id: 110868 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp4217220vqr; Wed, 21 Jun 2023 01:54:12 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ48WHu/pVgXxg8iVSu7xMMB/127xAGf0YwwFqXaotx416xz+RG533jMZ3NsXsAtgaqRfDyu X-Received: by 2002:a05:6a00:844:b0:668:8c7a:47e2 with SMTP id q4-20020a056a00084400b006688c7a47e2mr7581887pfk.19.1687337651849; Wed, 21 Jun 2023 01:54:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687337651; cv=none; d=google.com; s=arc-20160816; b=xO+V4loJ5Mj4U6wMtsVFOCEgJbBAZtO1YXro5c4A8eINsjpVPLmT9fvzGs4AZiNsBs 9sduXMtqFb43QnTyxB49tDPCQQMqRnLr+++KDoAILlkdnVluJ5JVX29DIBvUQF4BBkmt NT5pCqOzmnO6e7oU1GR9oQ0xpScfqczqN1eZ0XmwoBYSEpqAFpliItmID27okSDpzD50 rlHyaNUcTNIWRm722dvo2FZRT1Twp+xZyH1WzceDdj5kC357w1YR3KfX0PKxNpkw00l5 L2vd4dkwXRKZouRZpq88GnCrDqMx3Vcnq1AZPSvmz+NrCLtqeH974tQOSww5x8sPUvqF qLWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:cms-type:content-transfer-encoding :mime-version:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:dkim-filter; bh=p3mOYJ8f1hVTCexaglZ7i/L8HoJqlurEbyVlQliHZdg=; b=RvTmjHlNsY0cO8DUcbl4+WrQDbyqQ5UGB8/HdYRU1U6leRzb6bpj0Tp1r7+EHcdPGq rUMQUnHULxCFu1Dqk6J1qGjk6jQVsdYXMQME9SJoZP7veZVl6Ym2uWibGNkd+Zw2vACB bXT3fsWjCHcYMEdwOkEHuRwh0VFNB04NHl+kC7bPN5/W988RPgQzzHWQV13woOMFF7cu RpaTrsjIwao9z0t4JkHvmCyz2Ou2OQOuGChQH2IPLEVh6kfq028tDofm5toSDoyaDqp9 DoDCEEY5QC5Pu96XghDmLh2IHiVmTnG0scohBXJKn2MNDs/lJJNK+BZQpGR07Tj8UZGj 04ig== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@samsung.com header.s=mail20170921 header.b=RaplaNf1; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=samsung.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id t10-20020a056a00138a00b0066a4a09645dsi258533pfg.254.2023.06.21.01.53.56; Wed, 21 Jun 2023 01:54:11 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@samsung.com header.s=mail20170921 header.b=RaplaNf1; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=samsung.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231532AbjFUIin (ORCPT + 99 others); Wed, 21 Jun 2023 04:38:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33474 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231144AbjFUIic (ORCPT ); Wed, 21 Jun 2023 04:38:32 -0400 Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6A1601985 for ; Wed, 21 Jun 2023 01:38:29 -0700 (PDT) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20230621083828euoutp024463c9171911deeb7e614a267002b777~qn8vVwdiJ0615706157euoutp02E for ; Wed, 21 Jun 2023 08:38:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20230621083828euoutp024463c9171911deeb7e614a267002b777~qn8vVwdiJ0615706157euoutp02E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1687336708; bh=p3mOYJ8f1hVTCexaglZ7i/L8HoJqlurEbyVlQliHZdg=; h=From:To:CC:Subject:Date:In-Reply-To:References:From; b=RaplaNf1wD/mwGTQe7KrTATIyCaJoFt2irKviIfjU0pDW6CWKHtrBLCHDHKQvwqpk 6b0rBkL0UzeXgIfPw8hSf11Hfl7g4KDbdK1Tt8Y4hoLoGhAkiKlceQMWHFq6aozxvY S4tAdL5htcY1Q5vHyb4BzPLzcTGONgw3f+gD3JDg= Received: from eusmges1new.samsung.com (unknown [203.254.199.242]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20230621083827eucas1p1911afb01b8e07c4de65ceb9ae1cca543~qn8vFJWSq2121821218eucas1p1Z; Wed, 21 Jun 2023 08:38:27 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges1new.samsung.com (EUCPMTA) with SMTP id 91.2A.42423.307B2946; Wed, 21 Jun 2023 09:38:27 +0100 (BST) Received: from eusmtrp2.samsung.com (unknown [182.198.249.139]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20230621083827eucas1p2948b4efaf55064c3761c924b5b049219~qn8u0qtvQ2799227992eucas1p27; Wed, 21 Jun 2023 08:38:27 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp2.samsung.com (KnoxPortal) with ESMTP id 20230621083827eusmtrp2c2782f3198b3fa03d1bb09a40cf6c73f~qn8u0FFW40288202882eusmtrp2n; Wed, 21 Jun 2023 08:38:27 +0000 (GMT) X-AuditID: cbfec7f2-25927a800002a5b7-93-6492b703aa1d Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 4B.8B.14344.307B2946; Wed, 21 Jun 2023 09:38:27 +0100 (BST) Received: from CAMSVWEXC02.scsc.local (unknown [106.1.227.72]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20230621083827eusmtip239f1c51b1230f7e64d3e672ac51768e8~qn8uq2k3_0773907739eusmtip22; Wed, 21 Jun 2023 08:38:27 +0000 (GMT) Received: from localhost (106.110.32.140) by CAMSVWEXC02.scsc.local (2002:6a01:e348::6a01:e348) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 21 Jun 2023 09:38:26 +0100 From: Pankaj Raghav To: , , CC: , , , , , , Pankaj Raghav Subject: [RFC 2/4] filemap: use minimum order while allocating folios Date: Wed, 21 Jun 2023 10:38:21 +0200 Message-ID: <20230621083823.1724337-3-p.raghav@samsung.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230621083823.1724337-1-p.raghav@samsung.com> MIME-Version: 1.0 X-Originating-IP: [106.110.32.140] X-ClientProxiedBy: CAMSVWEXC02.scsc.local (2002:6a01:e348::6a01:e348) To CAMSVWEXC02.scsc.local (2002:6a01:e348::6a01:e348) X-Brightmail-Tracker: H4sIAAAAAAAAA02Sf0yMcRzHfZ/n6bmn42lPd9FnUXJjUio34Ugk5JDNj8T8k1NPaa6r3ZX8 ijslOqJdfswpWvltXd1dnVLRD8dSGkucX2E6qsmms0lt0vWw9d/r/X2/39v7s30pXHDBxYtK UqSxSoVMLiL5hOXR7/ZA/K4uft554wJJ5aMuJKkr0WGSW3esmORl2ylMUlffQkg67hWSElu+ HUmGBwvJcEr6pASk5pv+UtPtXFJa+1pNSs2tB6UOk89Gcgd/aTwrT9rLKoOX7eTvtl8eJFLv +e1ztH9FatTnq0WuFDAhUKxpxrSITwmYmwi6TZ9JTvxE8KqljHSmBIwDQV1xwv9GxadKFy50 A4HjgwFxYjQ0XPGBx4lKBC+thYQWURTJ+IMml+dsezDhYDYWjrVxpg5Bg2YAcxpCZjVUPcsj nEwws6D8Ys5Yl2ZCocGgdCIw06H0IzgTrsxSMN5qRE6mGXdoudg91sRHI1lVl3COARp7enBu tAjU5jaC40yoz2oYmwnMCAXV2iIXzlgFnY1ZPI6F0Pe48h9Pg5GaKxjHB8FuG8a5cjaCMzXl JDcuFE63yTlcAfYXOzh0A1u/OzfHDXSWCzj3TMOJHEE+mqkfd4B+3AH6cQcUI/w28mTTVcmJ rEqsYDOCVLJkVboiMSguJdmERv9O65/HA9WoqO9HUBPCKNSEgMJFHrS3SRcvoONl+w+wypRY ZbqcVTWhqRQh8qQDwlriBEyiLI3dw7KprPK/i1GuXmosc2skr3+ka+XQ8prrBQuN5ZOOJezK Prkxw7fDgs/kead55fZOClky51xXqLB8zcTtJ709Sqdsmus7O2PN5zsJv4xWka3bWv3GEEFn pya+isJ+mo7e78wNs19dFKXUDvUaDj+MVFhDHN+igmv18wJritQLN+8vCDv7tDVgm3tXTo9o 4Jx+vbYpzP56bfaEKn5seP9ay/pmIm9LdMgig3idW+aRFXb5Es20oudCR8wvn+/B7wYHHamX vXSG6PeRETPmD4UeK/va/q6xd3HKsg3Nf0pviGeU9gYc9xPR6r7oLz4RtkPr8h9kvBWXLCiw dMho+po9bihNaI6JSZImqYzRk/00IkK1Wyb2x5Uq2V87wpuHqgMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrEIsWRmVeSWpSXmKPExsVy+t/xe7rM2yelGOy6qWKx5dg9Ros9iyYx WaxcfZTJ4tqZHiaLPXtPslhc3jWHzeLGhKeMFr9/zGFz4PA4tUjCY/MKLY9NqzrZPHbfbGDz 2Hy62uPzJrkAtig9m6L80pJUhYz84hJbpWhDCyM9Q0sLPSMTSz1DY/NYKyNTJX07m5TUnMyy 1CJ9uwS9jKfzfrAU7NKo+HzuOWMD4yuFLkZODgkBE4kND7ewdjFycQgJLGWUaPy0iQUiISOx 8ctVVghbWOLPtS42iKKPjBLdy14yQThbGCX+PjoM1MHBwSagJdHYyQ7SICLgILF54xywqcwC exglDjR+YgJJCAu4Smy90Au2gUVAVWL9zDawXl4Ba4kD64pATAkBeYnFDyRAKjgFbCQ2rjzI CGILAVW0H58KNp5XQFDi5MwnYFOYgcqbt85mhrAlJA6+eMEMcbOSRMPmM1C/1Ep0vjrNNoFR ZBaS9llI2mchaV/AyLyKUSS1tDg3PbfYSK84Mbe4NC9dLzk/dxMjMDK3Hfu5ZQfjylcf9Q4x MnEwHmKU4GBWEuGV3TQpRYg3JbGyKrUoP76oNCe1+BCjKdCXE5mlRJPzgakhryTe0MzA1NDE zNLA1NLMWEmc17OgI1FIID2xJDU7NbUgtQimj4mDU6qBae/L6W9T1wbu3uCwYNr/ZQ4BNyO1 LQ8wbLL8k5l0rT99ddz/r6sF446+/NF6q3vurennH0e+dvtz48SCsh6B0mm3407ObT77yjH2 svm6SE3e4zdUTgp9uzntoc/G59s3SnQmtpp/v9NZ1623pvP7tyuzTtcX86qkik1i3K80waTz 7/rVPF+b3n2aJSi1v/9HtNIMe8fp00Rmeehk/PZereLMxqCygLV5buT1iWoncjNV+R5ut7nX 1fL33rOb+3Su3zg/+6jiR5Xs63v63wY+fP3o3AHRs/N2qK+wmPvvCqNIfpX9oq4DO9R+BPnq WCyN/r/t2L/T113aufYJcjc9nxxlsntir0ick9u1RQcOLajuV2Ipzkg01GIuKk4EAByVAs1V AwAA X-CMS-MailID: 20230621083827eucas1p2948b4efaf55064c3761c924b5b049219 X-Msg-Generator: CA X-RootMTR: 20230621083827eucas1p2948b4efaf55064c3761c924b5b049219 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20230621083827eucas1p2948b4efaf55064c3761c924b5b049219 References: <20230621083823.1724337-1-p.raghav@samsung.com> X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1769301765597613440?= X-GMAIL-MSGID: =?utf-8?q?1769301765597613440?= Add support to filemap and readahead to use the folio order set by mapping_min_folio_order(). Signed-off-by: Pankaj Raghav --- mm/filemap.c | 9 ++++++--- mm/readahead.c | 34 ++++++++++++++++++++++++---------- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/mm/filemap.c b/mm/filemap.c index 3b73101f9f86..9dc8568e9336 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -1936,7 +1936,8 @@ struct folio *__filemap_get_folio(struct address_space *mapping, pgoff_t index, gfp |= GFP_NOWAIT | __GFP_NOWARN; } - folio = filemap_alloc_folio(gfp, 0); + folio = filemap_alloc_folio(gfp, + mapping_min_folio_order(mapping)); if (!folio) return ERR_PTR(-ENOMEM); @@ -2495,7 +2496,8 @@ static int filemap_create_folio(struct file *file, struct folio *folio; int error; - folio = filemap_alloc_folio(mapping_gfp_mask(mapping), 0); + folio = filemap_alloc_folio(mapping_gfp_mask(mapping), + mapping_min_folio_order(mapping)); if (!folio) return -ENOMEM; @@ -3663,7 +3665,8 @@ static struct folio *do_read_cache_folio(struct address_space *mapping, repeat: folio = filemap_get_folio(mapping, index); if (IS_ERR(folio)) { - folio = filemap_alloc_folio(gfp, 0); + folio = filemap_alloc_folio(gfp, + mapping_min_folio_order(mapping)); if (!folio) return ERR_PTR(-ENOMEM); err = filemap_add_folio(mapping, folio, index, gfp); diff --git a/mm/readahead.c b/mm/readahead.c index 47afbca1d122..090b810ddeed 100644 --- a/mm/readahead.c +++ b/mm/readahead.c @@ -245,7 +245,8 @@ void page_cache_ra_unbounded(struct readahead_control *ractl, continue; } - folio = filemap_alloc_folio(gfp_mask, 0); + folio = filemap_alloc_folio(gfp_mask, + mapping_min_folio_order(mapping)); if (!folio) break; if (filemap_add_folio(mapping, folio, index + i, @@ -259,7 +260,8 @@ void page_cache_ra_unbounded(struct readahead_control *ractl, if (i == nr_to_read - lookahead_size) folio_set_readahead(folio); ractl->_workingset |= folio_test_workingset(folio); - ractl->_nr_pages++; + ractl->_nr_pages += folio_nr_pages(folio); + i += folio_nr_pages(folio) - 1; } /* @@ -311,6 +313,8 @@ void force_page_cache_ra(struct readahead_control *ractl, struct file_ra_state *ra = ractl->ra; struct backing_dev_info *bdi = inode_to_bdi(mapping->host); unsigned long max_pages, index; + unsigned int folio_order = mapping_min_folio_order(mapping); + unsigned int nr_of_pages = (1 << folio_order); if (unlikely(!mapping->a_ops->read_folio && !mapping->a_ops->readahead)) return; @@ -320,6 +324,13 @@ void force_page_cache_ra(struct readahead_control *ractl, * be up to the optimal hardware IO size */ index = readahead_index(ractl); + if (folio_order && (index & (nr_of_pages - 1))) { + unsigned long old_index = index; + + index = round_down(index, nr_of_pages); + nr_to_read += (old_index - index); + } + max_pages = max_t(unsigned long, bdi->io_pages, ra->ra_pages); nr_to_read = min_t(unsigned long, nr_to_read, max_pages); while (nr_to_read) { @@ -795,18 +806,20 @@ void readahead_expand(struct readahead_control *ractl, struct file_ra_state *ra = ractl->ra; pgoff_t new_index, new_nr_pages; gfp_t gfp_mask = readahead_gfp_mask(mapping); + unsigned min_folio_count = 1U << mapping_min_folio_order(mapping); - new_index = new_start / PAGE_SIZE; + new_index = new_start / (min_folio_count * PAGE_SIZE); /* Expand the leading edge downwards */ while (ractl->_index > new_index) { - unsigned long index = ractl->_index - 1; + unsigned long index = ractl->_index - min_folio_count; struct folio *folio = xa_load(&mapping->i_pages, index); if (folio && !xa_is_value(folio)) return; /* Folio apparently present */ - folio = filemap_alloc_folio(gfp_mask, 0); + folio = filemap_alloc_folio(gfp_mask, + mapping_min_folio_order(mapping)); if (!folio) return; if (filemap_add_folio(mapping, folio, index, gfp_mask) < 0) { @@ -818,7 +831,7 @@ void readahead_expand(struct readahead_control *ractl, ractl->_workingset = true; psi_memstall_enter(&ractl->_pflags); } - ractl->_nr_pages++; + ractl->_nr_pages += folio_nr_pages(folio); ractl->_index = folio->index; } @@ -833,7 +846,8 @@ void readahead_expand(struct readahead_control *ractl, if (folio && !xa_is_value(folio)) return; /* Folio apparently present */ - folio = filemap_alloc_folio(gfp_mask, 0); + folio = filemap_alloc_folio(gfp_mask, + mapping_min_folio_order(mapping)); if (!folio) return; if (filemap_add_folio(mapping, folio, index, gfp_mask) < 0) { @@ -845,10 +859,10 @@ void readahead_expand(struct readahead_control *ractl, ractl->_workingset = true; psi_memstall_enter(&ractl->_pflags); } - ractl->_nr_pages++; + ractl->_nr_pages += folio_nr_pages(folio); if (ra) { - ra->size++; - ra->async_size++; + ra->size += folio_nr_pages(folio); + ra->async_size += folio_nr_pages(folio); } } }