From patchwork Thu Apr 13 10:40:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yosry Ahmed X-Patchwork-Id: 82903 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp938881vqo; Thu, 13 Apr 2023 03:48:49 -0700 (PDT) X-Google-Smtp-Source: AKy350bJCFgAjRokbCiDGa906cjfPT63ozH2brVt3Y251BuZwP6f/OsKJEorvsFVtO08ufAIAD6g X-Received: by 2002:aa7:c744:0:b0:506:6c4d:328d with SMTP id c4-20020aa7c744000000b005066c4d328dmr2110482eds.10.1681382928839; Thu, 13 Apr 2023 03:48:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681382928; cv=none; d=google.com; s=arc-20160816; b=w/wSDndSGda8u3qFK7p79TerX5kCBz9WkjeN2QKHOxiSIEEy4+86mT3LAL+K+C+dOG IIXE0wvwf9naCGXWqb2BmxBtz7wyxWV9yuZ8Ijf/9zmLpjPKmIHdzvurV2L/m9YS0n9Q uixay3d756IxkzfkScAG5FEDnZp3ksrlYBJXTjI2qj0xJGTAlylSLj19AGhjTAzwuCT0 2EmZJWGLNLwDhgHzCtAVA5U0I/bKiesbtEkEZ8pmZ0xZMxIU/UtffzygD1P9V7grJXaL TeHfmBf5ylhQpeLXvsSdj7EccQH4ryAnKyQ27V6GoNdqdiGqydKY8VRyQ7q9HrOl5EN/ eIfg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:dkim-signature; bh=5OCAYSthWCELWDD+mYmXa9NvWHtbEH3UT/IFpudVmH4=; b=wbQE9p9s0Pgk6Q+Vv/usqT53An+RQXhE06Yny/k/Yy3oquy7dYsMJ9CSSRuvK6Ijuq uys3xqpLOyHnUJckSSwgtz1iD0/E+3ZX0HJk3gWE4r4LAHbXw6dzwMYVWNH6uUQ2Uwl3 5JdesE6tSZPOMzNzQm9EyQTm2MUN6T7XLjUvOYmJWS1uujLpjoWJvhZaOF98fFBPHru6 ju/fYZpDTWJs91yZDXl+583FoCO6uZa/uyKKqc4g2s7WqfgmYhIChmqC0kTcpMRfiEM/ JAwSxfuPgAV9kQCpl6DgQFmrQBs6p9cwnPuMbAOOT+sYGJmUa3UZLjo7Jf/xczQbJD7S GMDQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=tNgjpd2v; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e6-20020aa7d7c6000000b005044fb23651si1568673eds.173.2023.04.13.03.48.23; Thu, 13 Apr 2023 03:48:48 -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=@google.com header.s=20221208 header.b=tNgjpd2v; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230385AbjDMKlL (ORCPT + 99 others); Thu, 13 Apr 2023 06:41:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50776 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230495AbjDMKko (ORCPT ); Thu, 13 Apr 2023 06:40:44 -0400 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DBE281B6 for ; Thu, 13 Apr 2023 03:40:42 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id 84-20020a251457000000b00b8f59a09e1fso1375596ybu.5 for ; Thu, 13 Apr 2023 03:40:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1681382442; x=1683974442; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=5OCAYSthWCELWDD+mYmXa9NvWHtbEH3UT/IFpudVmH4=; b=tNgjpd2vJ5sYdihexJ27wp/pJdtBdkGoDWlKPI+Qxip+uc94atiC4v8qSoBRSDpXnF 2H1eFR4AE43zDnf3vSAC6PM4Yzv5eOl4FnSZ87ySrNsQr00bC+1pP0q2NisEbs11XCfK wfmIAOuWTU7ukaHpLHwHLoguS2c0haEBvsc03OpVoC1wgoCMAvA/kO8UJucX9FKOKJPQ FUpRKC72wJ0M5aFsenyPyMH3rc7A+TUAdQgnGrgJs85bN23klJx4wsrqR1AZvj2NJaOn RSlnCkB73DeUMUXx2hJ8njcRovku/drtS2o23klZqkp9a4zr1WrXp8WQJA7orQxM0t6d M7ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681382442; x=1683974442; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=5OCAYSthWCELWDD+mYmXa9NvWHtbEH3UT/IFpudVmH4=; b=ecM5V5YQztviINhcsz9UXuPzzIDUh+/ulpPw1G6eI+16qGu2RqZ1eDK46t/kNAD3mB MqlcMuVno+KAH5V8VSlxlXb+KpSGe7rKuJQwyfI5EINvFktl9cwMt1Bs1yqPQ55lXlVD YkGONTMi5H/TnXNUwbw/AE4f5uOxud97RDGwwhKCtmSd49efx//PMWjUxLEq72ostCAK qk9ZeBYjSRN1FHkRPnUVGJY8znCeVX3WwW7QQgLlnqJxqZCPLPYmCuosBT7kz+/6Gxjh F/01GOl/yVUqTHvCkvbsKKizxr9nleaXoqK2S8rtKrphbdR2r2uOqQSnN36OT0sfz5+G V8AQ== X-Gm-Message-State: AAQBX9fazqaKB4vVM4lBHcGSDLUqz1pNfvV7NCY/NeWfP6SIwVrUn/rR /1VYzki3j2cWjcBNhype8uTv911z1NkXUe8Y X-Received: from yosry.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:2327]) (user=yosryahmed job=sendgmr) by 2002:a25:dad2:0:b0:ac9:cb97:bd0e with SMTP id n201-20020a25dad2000000b00ac9cb97bd0emr904171ybf.5.1681382442136; Thu, 13 Apr 2023 03:40:42 -0700 (PDT) Date: Thu, 13 Apr 2023 10:40:34 +0000 In-Reply-To: <20230413104034.1086717-1-yosryahmed@google.com> Mime-Version: 1.0 References: <20230413104034.1086717-1-yosryahmed@google.com> X-Mailer: git-send-email 2.40.0.577.gac1e443424-goog Message-ID: <20230413104034.1086717-4-yosryahmed@google.com> Subject: [PATCH v6 3/3] mm: vmscan: refactor updating current->reclaim_state From: Yosry Ahmed To: Andrew Morton , Alexander Viro , "Darrick J. Wong" , Christoph Lameter , David Rientjes , Joonsoo Kim , Vlastimil Babka , Roman Gushchin , Hyeonggon Yoo <42.hyeyoo@gmail.com>, "Matthew Wilcox (Oracle)" , Miaohe Lin , David Hildenbrand , Johannes Weiner , Peter Xu , NeilBrown , Shakeel Butt , Michal Hocko , Yu Zhao , Dave Chinner , Tim Chen Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-mm@kvack.org, Yosry Ahmed X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL 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?1763057785682653773?= X-GMAIL-MSGID: =?utf-8?q?1763057785682653773?= During reclaim, we keep track of pages reclaimed from other means than LRU-based reclaim through scan_control->reclaim_state->reclaimed_slab, which we stash a pointer to in current task_struct. However, we keep track of more than just reclaimed slab pages through this. We also use it for clean file pages dropped through pruned inodes, and xfs buffer pages freed. Rename reclaimed_slab to reclaimed, and add a helper function that wraps updating it through current, so that future changes to this logic are contained within include/linux/swap.h. Signed-off-by: Yosry Ahmed Acked-by: Michal Hocko --- fs/inode.c | 3 +-- fs/xfs/xfs_buf.c | 3 +-- include/linux/swap.h | 17 ++++++++++++++++- mm/slab.c | 3 +-- mm/slob.c | 6 ++---- mm/slub.c | 5 ++--- 6 files changed, 23 insertions(+), 14 deletions(-) diff --git a/fs/inode.c b/fs/inode.c index 4558dc2f1355..e60fcc41faf1 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -864,8 +864,7 @@ static enum lru_status inode_lru_isolate(struct list_head *item, __count_vm_events(KSWAPD_INODESTEAL, reap); else __count_vm_events(PGINODESTEAL, reap); - if (current->reclaim_state) - current->reclaim_state->reclaimed_slab += reap; + mm_account_reclaimed_pages(reap); } iput(inode); spin_lock(lru_lock); diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c index 54c774af6e1c..15d1e5a7c2d3 100644 --- a/fs/xfs/xfs_buf.c +++ b/fs/xfs/xfs_buf.c @@ -286,8 +286,7 @@ xfs_buf_free_pages( if (bp->b_pages[i]) __free_page(bp->b_pages[i]); } - if (current->reclaim_state) - current->reclaim_state->reclaimed_slab += bp->b_page_count; + mm_account_reclaimed_pages(bp->b_page_count); if (bp->b_pages != bp->b_page_array) kmem_free(bp->b_pages); diff --git a/include/linux/swap.h b/include/linux/swap.h index 209a425739a9..e131ac155fb9 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h @@ -153,13 +153,28 @@ union swap_header { * memory reclaim */ struct reclaim_state { - unsigned long reclaimed_slab; + /* pages reclaimed outside of LRU-based reclaim */ + unsigned long reclaimed; #ifdef CONFIG_LRU_GEN /* per-thread mm walk data */ struct lru_gen_mm_walk *mm_walk; #endif }; +/* + * mm_account_reclaimed_pages(): account reclaimed pages outside of LRU-based + * reclaim + * @pages: number of pages reclaimed + * + * If the current process is undergoing a reclaim operation, increment the + * number of reclaimed pages by @pages. + */ +static inline void mm_account_reclaimed_pages(unsigned long pages) +{ + if (current->reclaim_state) + current->reclaim_state->reclaimed += pages; +} + #ifdef __KERNEL__ struct address_space; diff --git a/mm/slab.c b/mm/slab.c index dabc2a671fc6..64bf1de817b2 100644 --- a/mm/slab.c +++ b/mm/slab.c @@ -1392,8 +1392,7 @@ static void kmem_freepages(struct kmem_cache *cachep, struct slab *slab) smp_wmb(); __folio_clear_slab(folio); - if (current->reclaim_state) - current->reclaim_state->reclaimed_slab += 1 << order; + mm_account_reclaimed_pages(1 << order); unaccount_slab(slab, order, cachep); __free_pages(&folio->page, order); } diff --git a/mm/slob.c b/mm/slob.c index fe567fcfa3a3..79cc8680c973 100644 --- a/mm/slob.c +++ b/mm/slob.c @@ -61,7 +61,7 @@ #include #include -#include /* struct reclaim_state */ +#include /* mm_account_reclaimed_pages() */ #include #include #include @@ -211,9 +211,7 @@ static void slob_free_pages(void *b, int order) { struct page *sp = virt_to_page(b); - if (current->reclaim_state) - current->reclaim_state->reclaimed_slab += 1 << order; - + mm_account_reclaimed_pages(1 << order); mod_node_page_state(page_pgdat(sp), NR_SLAB_UNRECLAIMABLE_B, -(PAGE_SIZE << order)); __free_pages(sp, order); diff --git a/mm/slub.c b/mm/slub.c index 39327e98fce3..7aa30eef8235 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -11,7 +11,7 @@ */ #include -#include /* struct reclaim_state */ +#include /* mm_account_reclaimed_pages() */ #include #include #include @@ -2063,8 +2063,7 @@ static void __free_slab(struct kmem_cache *s, struct slab *slab) /* Make the mapping reset visible before clearing the flag */ smp_wmb(); __folio_clear_slab(folio); - if (current->reclaim_state) - current->reclaim_state->reclaimed_slab += pages; + mm_account_reclaimed_pages(pages); unaccount_slab(slab, order, s); __free_pages(&folio->page, order); }