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: 13210093 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 8B97FC77B76 for ; Thu, 13 Apr 2023 10:40:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 25D97900004; Thu, 13 Apr 2023 06:40:46 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 146CD6B0075; Thu, 13 Apr 2023 06:40:46 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F29DE900004; Thu, 13 Apr 2023 06:40:45 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id E63616B0074 for ; Thu, 13 Apr 2023 06:40:45 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id B0F7C40352 for ; Thu, 13 Apr 2023 10:40:45 +0000 (UTC) X-FDA: 80676024450.27.E704352 Received: from mail-yw1-f202.google.com (mail-yw1-f202.google.com [209.85.128.202]) by imf08.hostedemail.com (Postfix) with ESMTP id EC3A316000A for ; Thu, 13 Apr 2023 10:40:42 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=tNgjpd2v; spf=pass (imf08.hostedemail.com: domain of 3Ktw3ZAoKCOkjZdcjLSXPORZZRWP.NZXWTYfi-XXVgLNV.ZcR@flex--yosryahmed.bounces.google.com designates 209.85.128.202 as permitted sender) smtp.mailfrom=3Ktw3ZAoKCOkjZdcjLSXPORZZRWP.NZXWTYfi-XXVgLNV.ZcR@flex--yosryahmed.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1681382443; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=5OCAYSthWCELWDD+mYmXa9NvWHtbEH3UT/IFpudVmH4=; b=XZ3yQW3tMnl3B3V1vKEz5wd4nNWxOgFpFolFN8AD9fPMsCxIaZLtqyJEmGwFu9m4kidnyr TpHwD2GjFfOwTLuq9lS4p+ay1K0Sog8yAivNs/iF0vXAUo/epBPbg0h3kBdqa89fcgfSTj K2VBJ5HqjbbSGCi6Uf9nJF5jbtpdWMU= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=tNgjpd2v; spf=pass (imf08.hostedemail.com: domain of 3Ktw3ZAoKCOkjZdcjLSXPORZZRWP.NZXWTYfi-XXVgLNV.ZcR@flex--yosryahmed.bounces.google.com designates 209.85.128.202 as permitted sender) smtp.mailfrom=3Ktw3ZAoKCOkjZdcjLSXPORZZRWP.NZXWTYfi-XXVgLNV.ZcR@flex--yosryahmed.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1681382443; a=rsa-sha256; cv=none; b=wZAoPd+myINrC8YJwLeLvIm+wPpvs2pGjjf/onpSZHL4SVqjtZq+0DTd1PGIceJc0C5/RL dlyonZ72jVe97+zBwfMRO3Mpd1Ul/bWAh7Ng4YdHPvAaayj2+jtHDNuduPIi7V9f9R5OQ8 DS6UMbtYF307KdxY+hF/GwTWUf2WNas= Received: by mail-yw1-f202.google.com with SMTP id 00721157ae682-54fbb2ee579so18356907b3.14 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=G2SMtSWfBrl5DfON3Po4oIIlS76v3PtflfENQxQ3Z+b8NlxB+8gsolvvpO51ibOY1b kfYf5bOeAE5jcoH9Ff19A5NbTGwEqWZ7A4NAnsIVy7LU2YTNrX4HWJpd/WoU4p3GxqSh eYukyDZb+m9VrN4JGTyUITr9FlqRaospW2In2B1C4eStknZAl1VPq0QuN1VEYJHxya6B qDIxL+z2ExKvEHgXpK0oSATvKPXcmxnuTPTSSxVWYE7olri1cxH02lMFSWcBfXIYSjkn +46rbizHI0X/UwUtZOtiOgISjFGF10WD6VRJLAl1gJShdKw9KUnPvalX0tHQE5rHtZzb lyoQ== X-Gm-Message-State: AAQBX9cxUrAwwf6WKIV+V4XHUs9gjL8a9upU3AuOKAJib0OTrRL5Myek nM7ugOD1/zn6U/0yuu+td3a0No4kZZjqHOzy X-Google-Smtp-Source: AKy350ato23F52bhKncBfpzqlbDSBjiTYHoOr/++AUIP1InXFnH0R1Cd3N+S/780qX9+qoWZd0rLQvVMvNIOlXzG 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-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: EC3A316000A X-Rspam-User: X-Stat-Signature: xumjmg1k833ppxruxwf6rpwq31iqija7 X-HE-Tag: 1681382442-570948 X-HE-Meta: U2FsdGVkX1/DUOiwgx0RYsDXIAZIa/gSK2dW1wMZKNmnOVQ1Ju2pmdd3RQb3mqTKKuNVz5HFZypo8WCF3qiL/eDxztVZqBa3cDcpdCOtLHsof9d5A8ORG4eLuT4IsT1Mehuy5ajT+GFmmF/tBVCsw70L8R9NHFuJNH3A996wQiYGv9j7PnG0Nac7GQ6vokanksOIVgHX0gPeG1c4PpVDn+b7stbK14SimVnaU8f2Lt0QA8z9r0Q/oA6kS7pF5CJP/odDZb8FcYRwHJUlrifzTmFgzayYjJyYuGfeIcx35S4ZMLvWYfmSkcz2p2XYmfpGJj10Gol2lDy/asug+82AihxmjTLL5p2uycJMgEGjjLxNI2EYRrE9EbfiaGkojiTVwQ+g310SAzAta20KF2ax88lmXK35hNZet9Cva+C3NUHsBY/tAI7e6Ar21st8IUhYZlaxll+eNSVw9uozwjXxXK5VkL+OfQuDVbeCv9eNb42Tv9IMPkZMpDJfLsI4k/8MKRvSJ5oNkIz8Onyhyhc8r0FBcmZGRqpQuzQHokqHaWG9Xliqf/YNCe3l1LHISJmRXmniH9T+qES8+VYJRT0chAnV2sEK0QugYn3/DTYoVR5tt1kgKB3WVR4poCROZ2BL9GiPeT9/eTF7hkzUuqgsqPCODxABaSAtxR3fXua1adeBue7/AfTRmA/xRDFW5Rcta7Io0A6vZNAobTvUiL2Z3XnYEQn3ckLDPa+OYp8+ohbohnH6WACByl2N5VfXkD+4xpTkg0GWEX6FmpM6ZQEdRId/PnQSJP7ly+zpmJUCPQI3xl+3UOApAmQi5cT3fR+NyWMJolVBykg9mQ+iWEQQSroGryCvhlhQgu7c8XMtd62a4IvOb6d/ZLp4Pl5G3JB+qME9jAzMeDvE8Q29djH7yOFIkEQijsL5A0QMOlrshbh1a3mlUhb3RHH38B8ChFjxfgOzubR/ze3kP50jbTV LKb2e+8Z okU5wGACo2KGYE/4S8eaCYD4MUQDWyC4jTovxhQ+ZHRZkqG3ltXW7x+5Gt0YxynSW2NXtAh02QnElWVdRMrTaExr6N6AGrd+cYqJCvCVnxG9x7FirF5lvXD0vOOqhxiQtoi18ssxIZwgioN6SmcuuNcytN6vHYt349H/ZKkrECxFHC80+XD0kPhRkeEkI6+Mgul2C9nTHsifdyKLu0ZYxK98b3KXgier0J530HYRTmsEOMm/aF8srnvoN77Ki6CUqJL9dLl0K1gzA4u54MloIkiKeH6PZ8TBQ9+VJlu1JsKn6BjDLifAFsp3zCVeLLpa17zQTQ/W7ZPb7FOKcLpmHxEhKVxb0wwFrzZxjboCASgeEryWb4FWNeqo+mOZEJjXrvvC34vwzz5tyYlDITKhEqyjWhYKVyZ5owmM3jxcyf4zFXdQr8Yt3el7pxMJtPY+JaP/OyJSBynuHGRcjiQv2VPY0tw7nD1PxHJLFdMsgZpY4Xv28QAnRxLSabO6B2YG0oWD39kaXGXgQH3ClCZE/53+7UeMvW8rFsRQwxyHmGvNDhftw7BFROnPfZMQFpVhDyUTBypDkcbOsqb0TrbntaGr63ToIWr0DeqWDoeIKCdLFSN0D+XXi3kwiwWZRKPjWVWQ4NCPA5XJ6ioNMpT81VQa1FuPNYFtZM1pwrb4NiqTFOKglDR7jr1l36B1G5pxtHnVUH5KLH7M8afJtmQ36Pi2Eg4hUsM7Fg51nbwQ8tXiyEmKsi8F1fecJJNj6u24y8q23e5C15qRnBN742RAtb0AgcA== 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: 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); }