From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2D17137C0E6 for ; Tue, 18 Aug 2026 22:59:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787093968; cv=none; b=ENN976nJXzDsdADDyfZ6S6zVaPNfXasBqYj721sYliw6NYwzsiAOCuF76wwgzSVhxHUnyhW3QhcE7o3DjWiODu3GZiIqgRCTIdGq4W1eOA40I7wa9yv1YMK0JDUd53HdHsAj/W1/l4JdYoRZWoSL4mxLPhRSnhwupdnDYzmZkOE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787093968; c=relaxed/simple; bh=QOVu8KeQ2sCJjPQBhVXY9WkAUtIxG1RoWv3Uido1YsU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=nCTU2wBAkaGWEgjHiib54bqvM3A/2fSTzzJWmYjI78y2J2QdnCCRNAGudMVjFTu3WwY4JyKNulUdmznPIdiFgH5AcSu57mIVdRTRyLHmV8yLVwGJzSJvqMXnCSTZKuGwCqRA4IfYEScUzhZtKf9+7bWxozCHDQxlv0OKed/zios= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KxELYPG8; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="KxELYPG8" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 253B41F00A3A; Tue, 18 Aug 2026 22:59:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1787093966; bh=yUofJYBF2fURCSwAJxaMXCKNOjPJX7Leg5CtfjoSIGM=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=KxELYPG8qHof9ElVwEt5AvXIWstk4g2vuciaR9mz+HHHKZAevxhwpjn3PC7g+5b8u idDhwphSoISj/ZtlrAzOg9bWnp4G0RCu8zsYDffKb0DboP5ViKLkO6cCETn7to87Zr NanootF6LqHwSCIM1p4Rto2judFYjXHYmuKarh74Yqfc/9cM8WpI34vZ7thJbK5/yA f69rD8w80OA6DT9AcwvGlMwKFFEZpMaDWV5nDb8DeSAl0ypHiEbeNzit20+cIYBp1R xKllKcv8abq6uN1QYDJR5cPxORgjL07/2TTKOK8tjnFDAkSiun6UC0TYTzeqWT5EQ5 iIx2jSDEic36Q== From: "Barry Song (Xiaomi)" To: akpm@linux-foundation.org, linux-mm@kvack.org Cc: baolin.wang@linux.alibaba.com, david@kernel.org, dev.jain@arm.com, lance.yang@linux.dev, liam@infradead.org, linux-kernel@vger.kernel.org, ljs@kernel.org, mhocko@suse.com, npache@redhat.com, rppt@kernel.org, ryan.roberts@arm.com, surenb@google.com, vbabka@kernel.org, ziy@nvidia.com, hughd@google.com, ackerleytng@google.com, usama.arif@linux.dev, joannelkoong@gmail.com, hannes@cmpxchg.org, "Barry Song (Xiaomi)" Subject: [RFC PATCH v3 2/4] mm: improve large folio reuse for LRU-cached folios Date: Wed, 19 Aug 2026 06:59:02 +0800 Message-Id: <20260818225904.55236-3-baohua@kernel.org> X-Mailer: git-send-email 2.39.3 (Apple Git-146) In-Reply-To: <20260818225904.55236-1-baohua@kernel.org> References: <20260818225904.55236-1-baohua@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Large folios may now reside in the per-CPU LRU cache. Before attempting to reuse them, drain the local LRU cache, which can still be beneficial in cases where the folios are likely to remain in this CPU's LRU cache: int main(int argc, char *argv[]) { int i; while (1) { volatile int *p = mmap(0, SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); for (int i = 0; i < SIZE / sizeof(int); i++) p[i] = i; madvise((void *)p, SIZE, MADV_PAGEOUT); if (!fork()) _exit(0); for (int i = 0; i < SIZE / sizeof(int); i++) p[i] = i; munmap((void *)p, SIZE); } return 0; } Signed-off-by: Barry Song (Xiaomi) --- mm/memory.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mm/memory.c b/mm/memory.c index 4134ac607ee0..efdf82b3c418 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -4275,6 +4275,12 @@ static bool __wp_can_reuse_large_anon_folio(struct folio *folio, folio_unlock(folio); } + if (folio_may_be_lru_cached(folio) && !folio_test_lru(folio)) { + if (folio_ref_count(folio) != folio_large_mapcount(folio) + 1) + return false; + lru_add_drain(); + } + if (folio_large_mapcount(folio) != folio_ref_count(folio)) return false; -- 2.34.1