From mboxrd@z Thu Jan 1 00:00:00 1970 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 A110AC7EE39 for ; Mon, 30 Jun 2025 08:06:19 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 45A006B0099; Mon, 30 Jun 2025 04:06:19 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 432626B009B; Mon, 30 Jun 2025 04:06:19 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3476D6B009D; Mon, 30 Jun 2025 04:06:19 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 200206B0099 for ; Mon, 30 Jun 2025 04:06:19 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 96376105927 for ; Mon, 30 Jun 2025 08:06:18 +0000 (UTC) X-FDA: 83611334436.21.03EF626 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) by imf18.hostedemail.com (Postfix) with ESMTP id D7B591C000B for ; Mon, 30 Jun 2025 08:06:16 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="K8el/EXQ"; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf18.hostedemail.com: domain of jiahao.kernel@gmail.com designates 209.85.214.181 as permitted sender) smtp.mailfrom=jiahao.kernel@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751270776; a=rsa-sha256; cv=none; b=EKs/UFUE6dCof0Ue8jQdfPV0vuCocC2xiwfXLkk4QRyNsjDoc0ZUwPIeKWNvnuzeNQjQYJ edRZh+iMHSP7jR/6AUYw5+YnrE6BCrYj0Wm6VrgeHCrMueF5B+7RUj42Bdew7dZsEWH0bn RASXP8dHyYnt3kXm89j+tGyyTFcOkUA= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="K8el/EXQ"; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf18.hostedemail.com: domain of jiahao.kernel@gmail.com designates 209.85.214.181 as permitted sender) smtp.mailfrom=jiahao.kernel@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751270776; 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-transfer-encoding:content-transfer-encoding: in-reply-to:references:dkim-signature; bh=qhC93MdNH/UajdLJw5ecd5t+o/SSFcevhmB+meDS1bE=; b=r9Mt25816vplOC2ux8VDy106SFDbzJtw1voN1iE2xHkjzB1dTBrdQJQPfUdhWbIbrX218N /JQOxBaCG7V7AX4KoQRysdxjtbpDsTXu5ia7K3MI3/hVyVBidxnJ2x622C5/3+kWONCEni rHdkp5wYsfMPevJ7bo5f1swfqnytmS0= Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-234bfe37cccso46854125ad.0 for ; Mon, 30 Jun 2025 01:06:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751270776; x=1751875576; darn=kvack.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=qhC93MdNH/UajdLJw5ecd5t+o/SSFcevhmB+meDS1bE=; b=K8el/EXQGYQl1ehZKuTx+wY7qaGpZRadNyk8RzUKg+A89TC42StnBGjsJbTcmNxDuk OMN9A/3mqecJ5FfSqB0gVrmzRRXLV9jpIHst0woAY+fV+54CVRkgVTiiri17I0OO5PcF KKXfEVrMVium9lur47mMLzp/Lj87ou6iz9Ns2NCRMD54FThL+fk72ghTzTrl0mvdhvZ9 uKn/lgadCN/6i8ffjzJiW/IWNt5pf3VsxMQj/WY2GUOpgsPv7Movna8aGF37fwClHVgl 4vGMX1sy11Wc5IZlZ4O8STz1vR1h/Yuc2ck+Hpp7ItXy8s8zAHSuf9sB7RWx3uyhD7JA 7dGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751270776; x=1751875576; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=qhC93MdNH/UajdLJw5ecd5t+o/SSFcevhmB+meDS1bE=; b=kTORNfCJa3CzMRn3sh+yftAbUBo/sejcKoyzsZ8/KlO0j8GQmxpfgBQtM+3S5x0s2o t84Cr2GoPe3GkVc3wnstR3FScG/AQJ0eQCmwYh4mSfNyundm549axqKU8uaW7yXwHBXf btW7IiseHrXOC6ZemNsexDaOzspUaN2IauGM+cFDe7TNWLp+HqOz0/dM0mXnXhCQ1DRl XD1UPYKmcfiE+Eg9c1gAQR6c016k5M/K/pkI2GI7fFVgXMmS0ODlVl6Y3l6xajVQiFwd 8UOMKEtYKTsr9VoGNdEsydKrI6o8LXKOkNYwZ2ExkcHZeQo6Zm2nrAr/YJkn8S6HcCHY Utpg== X-Gm-Message-State: AOJu0YzJI55ugQ4VShQAZ+pfvUdKwZmGqk6jAoi8MegoOiMaml/6LWU5 3GbNd7UsCfwKmg3hGNS4GE4x0YkkjM/K/k6mOLCjyZjZjWvP5BwTWgOp X-Gm-Gg: ASbGncus2WuMWSJK1vc0utFu1wldQcpVpfMX7m/6h+DGNevcmKlQjWAAJiC5J0/ac2K 2rUydv+QobDnhsWkBU9AV918juopPeIHCyEQoFxzKbufDW2CfEtTcUdzV5rOZCmoWml8tGPnFQb KCiin5ootTQ1CPYnL9iZdMgSg/NdaJ0Z4xqWaz6L0yeWa2E80Y/azgHwIEtpFI/cUPSKKk1c2Yt q+UVvylPxRECfiqgIxLL0mO/oKsQOHYAqNdl3bWjcmx6ZK98gD+CnAI+bfclPfw+F81kqmYAtOF lBMELYgPjbTElpRzMyiAOYWY+ZCMRPXN42unHY4Bz4Zm94ucq6H38vT9CVAIL/w7QJbTc1wQ0xy sVoAbllXZ75yyHYRIf08oMok19g== X-Google-Smtp-Source: AGHT+IFYFmTkEVvMadrUbJdKv+7Ssnr4mG3NMLJzWM81hFR4r3jACsts3LwVX1i57j4OWVs3w3Hgsw== X-Received: by 2002:a17:902:ec89:b0:234:8a4a:adad with SMTP id d9443c01a7336-23ac46824a1mr205108515ad.26.1751270775574; Mon, 30 Jun 2025 01:06:15 -0700 (PDT) Received: from localhost.localdomain ([210.184.73.204]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b34e3023a11sm6525673a12.25.2025.06.30.01.06.10 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 30 Jun 2025 01:06:15 -0700 (PDT) From: Hao Jia To: akpm@linux-foundation.org, hannes@cmpxchg.org, yuzhao@google.com, kinseyho@google.com, david@redhat.com, mhocko@kernel.org, zhengqi.arch@bytedance.com, shakeel.butt@linux.dev, lorenzo.stoakes@oracle.com Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Hao Jia Subject: [PATCH] mm/mglru: Stop try_to_inc_min_seq() if the oldest generation LRU lists are not empty Date: Mon, 30 Jun 2025 16:06:03 +0800 Message-Id: <20250630080603.36171-1-jiahao.kernel@gmail.com> X-Mailer: git-send-email 2.39.2 (Apple Git-143) MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Stat-Signature: mcqqyz9zhqoa3ersgm8sz4yiqnrmjwyr X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: D7B591C000B X-Rspam-User: X-HE-Tag: 1751270776-954280 X-HE-Meta: U2FsdGVkX19AS1Xe/d6EshDflRichZ6e+wEiyZaK66dNUNy+K0hEUXvdoqzkyDhWra+FLzxqujw6iG4nf1VSa8BtEF21T+Os5I0aBPUg4a2sT14ZyyW6Smc+twSQ7ENvPC/cZRZo0fuTXAaihpj1jCu2/WC8cPxQe+arSVv/MZyx782KHMw9BO5gV0JkgL1m0MVNjl00dfIxLjs9aVCCxDyx8fn3/pY/A61b6Rwzy1vNm3n9nEgf4vi8vyAfsu5hoK4A16mDp1zHfMI0wsbZGS90qsQ5n9ecJfkF2ny9HqlsePDriNqFjHE2hekolF7NfIF9K2hTSZG1ACD6dqcPxfuej0mz1nhCtxQt8j3Rir/GILKitCrEhDFeGNWMBZw8Yv8xSD1+d39vWLzUmi/SWi1Q5v+4qCaLXmdC5DN7FXuyz4nU+u7My3AE27xWhGyFllJqh6U77zIVgtyV9w27xo9NvYn9a8IspyjZQPwz344giol8qbcjHEAmGugKAH6vCJ+cqefzvyvm06TUVd0FujQJeoS/RkwmczF62C6Bjbdv1lllUlg8dJW5GDMk23vE9rKlPkzWDt6ibEKrNfLv9Co+Axk/NNusCht5DoPLDYGXHg+kf6zm7zBHIsbWCLdJx9okgujKHdD4Pci2F8dHbkgtYwRda3gXQXfgNU3dJ3ey+aafuBmI6ENhRGAER+9bW57ZMG7YsJE+qzcK+QnYEXrdREe1htDDntVgHTO5VIuIr3lE2Ccu4lstB7mnXXuQrcf+OmZrVr+h477CdJl+p1Cuj4tKxQ3nHBnspGdNUx+2ngfeEdnXvC03TWGak7ubFG246c34wfsCBzMR2sqvN4TSmx9hxeoRHTEUxjICy1jwrJ+VkQZaThDW+l3zFRXsxr4hxZyvcbPLqsb6D6UnVP9t1+xzILOQMqWzYYW/GSmrkhDnKNXkUM2doglx+j4Y3p3y2+C7FFCOYvp48Bb Oe+ONVS6 EaN+HC7UUIvfZz51fbOndNccQIsI0YVDZbaVE8gRC9SDc1Zu+WQAFZEiIO/wT2q2HBBXNpshc6H1xaj2mgQcq/voO+AQHSw1+IYxzK+yer1onKssuArmLh/uldGnxINv/EEtxsiKcjI66YMyuOAHrCJjUZ9QFZBPGGdj0UXpxqC9WTTeVV5pWy61nhekBFOurMVxT6D/txSkq717AUwDTTOoSgn8NzJ2JJAEkECZfR6eep2trgTNkCwzSkKfWtJ7HVlYW4KCGaZmkAmymEJDcJ37KxDeUgSnO+Q1B6R4oLfUDzxUf/lXNb474nHzlViHeHr07rzWjreOx5SMz63g0vWlm5hkzLFnujCYrgUcwhacqoFkJiALAL1z9PzIej4cR7V7hK3kpBXfGTtpqUJ9ta07AYAZTKM0OHPlZbass36+95T+3vlzULBJSRB3C/CLmgKDIiZuj8R6SC3ztPHe3BFQuOhzDtaHCM9lu+/Z5/Pq+majxEG9iOg9LW5kmNgRy3j1eMNqChp11i0XU7HsbMjCQM3yzLzBAI1OFM2Alckl6kyUBM2bjKksfCQ== 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: From: Hao Jia In try_to_inc_min_seq(), if the oldest generation of LRU lists (anonymous and file) are not empty. Then we should return directly to avoid unnecessary subsequent overhead. Corollary: If the lrugen->folios[gen][type][zone] lists of both anonymous and file are not empty, try_to_inc_min_seq() will fail. Proof: Taking LRU_GEN_ANON as an example, consider the following two cases: Case 1: min_seq[LRU_GEN_ANON] <= seq (seq is lrugen->max_seq - MIN_NR_GENS) Since min_seq[LRU_GEN_ANON] has not increased, so min_seq[LRU_GEN_ANON] is still equal to lrugen->min_seq[LRU_GEN_ANON]. Therefore, in the following judgment: min_seq[LRU_GEN_ANON] <= lrugen->min_seq[LRU_GEN_ANON] is always true. So, we will not increase the seq of the oldest generation of anonymous, and try_to_inc_min_seq() will return false. case 2: min_seq[LRU_GEN_ANON] > seq (seq is lrugen->max_seq - MIN_NR_GENS) If min_seq[LRU_GEN_ANON] > seq, that is, lrugen->min_seq[LRU_GEN_ANON] > seq Then min_seq[LRU_GEN_ANON] is assigned seq. Therefore, in the following judgment: min_seq[LRU_GEN_ANON] (seq) <= lrugen->min_seq[LRU_GEN_ANON] is always true. So, we will not update the oldest generation seq of anonymous, and try_to_inc_min_seq() will return false. It is similar for LRU_GEN_FILE. Therefore, in try_to_inc_min_seq(), if the oldest generation LRU lists (anonymous and file) are not empty, in other words, min_seq[type] has not increased. we can directly return false to avoid unnecessary checking overhead later. Signed-off-by: Hao Jia --- mm/vmscan.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/mm/vmscan.c b/mm/vmscan.c index f8dfd2864bbf..3ba63d87563f 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -3928,6 +3928,7 @@ static bool try_to_inc_min_seq(struct lruvec *lruvec, int swappiness) int gen, type, zone; bool success = false; struct lru_gen_folio *lrugen = &lruvec->lrugen; + int seq_inc_flags[ANON_AND_FILE] = {0}; DEFINE_MIN_SEQ(lruvec); VM_WARN_ON_ONCE(!seq_is_valid(lruvec)); @@ -3943,11 +3944,20 @@ static bool try_to_inc_min_seq(struct lruvec *lruvec, int swappiness) } min_seq[type]++; + seq_inc_flags[type] = 1; } next: ; } + /* + * If the oldest generation of LRU lists (anonymous and file) + * are not empty, we can directly return false to avoid unnecessary + * checking overhead later. + */ + if (!seq_inc_flags[LRU_GEN_ANON] && !seq_inc_flags[LRU_GEN_FILE]) + return success; + /* see the comment on lru_gen_folio */ if (swappiness && swappiness <= MAX_SWAPPINESS) { unsigned long seq = lrugen->max_seq - MIN_NR_GENS; -- 2.34.1