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 C2196C54ED1 for ; Sat, 28 Jun 2025 16:52:07 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A49506B00A6; Sat, 28 Jun 2025 12:51:56 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9F94F6B00A7; Sat, 28 Jun 2025 12:51:56 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8E8046B00A8; Sat, 28 Jun 2025 12:51:56 -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 7A6BF6B00A6 for ; Sat, 28 Jun 2025 12:51:56 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 3CE01122FE5 for ; Sat, 28 Jun 2025 16:51:56 +0000 (UTC) X-FDA: 83605401432.04.FBFCA44 Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by imf03.hostedemail.com (Postfix) with ESMTP id CA71D20009 for ; Sat, 28 Jun 2025 16:51:54 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=j1lVM4NS; spf=pass (imf03.hostedemail.com: domain of sj@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751129514; 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:in-reply-to:references:references:dkim-signature; bh=ZC44pFt4Hjxq3y8ykvXMs7N9SRWYoUeGvL7rrophwJs=; b=3NApGF1xEhCh5VeRzWk0qLFEDxvamNAM39eKSdVdIvpc4l8k7fX34BCy3n8iSYfcJTOegw thJZUAAwQsp9RGxtpPFZBYH2BsGYYVC0UD3OF1vBSBN+u+P+wKcZZcVsWZs6sPciNlgjrj yTRWNn6RMuJJLpzI4pqdQeomp98Zkyo= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=j1lVM4NS; spf=pass (imf03.hostedemail.com: domain of sj@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751129514; a=rsa-sha256; cv=none; b=ertmGvMO5ceFPJOc/lZln83osJnrMukGwnkDqrMdGv98/dxLmd6Gzim9Hi99Q2APrySrri 7SIjAL+UOCuIV9EL7zc/ldZQnIBCJHpE3xfKPxI4V+eMca2h/XWUOzqMJFW+mwLrqd5+ZT xLIgXV36AzqfL/UK6K0hlF5E6D3U1Fs= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 4C177A52CC2; Sat, 28 Jun 2025 16:51:54 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E917DC4CEF6; Sat, 28 Jun 2025 16:51:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1751129514; bh=E987cFasn0aqFLcb3GG3lT/UpsHEEEapIGli+ANI810=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=j1lVM4NSUYz57/XIFzh98DET1M+tq3DGlEpvOq5EyyXUJzIS08ity62fiVFsUyC2B ys0uSWXMHJnZsW42GVjJYJxKTpKgp6wIJ3fDzhtuo6i+b593VRJlUZS/c4vm2uc5Vb cnVqsfY0QKcM2Q5oCXKSn5fLmgkgF3m0arKqYF7ToUdZdGGYg9EFhANn5h+iJkJF8x LU5xzKMX+RYx3H4LNyeNEIZU/uAPIfoJCVsPREoDt+zM1CA139tZ62W4c19LT0/y6E OXIJCp68CdGcLpKKlSxSwhZSbF+lXH/eVij3ARttTY+mx6nhDmyZwTT1ZR5Q7NOTjw LuOI2NlK5XJeQ== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, kernel-team@meta.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH 06/11] mm/damon/lru_sort: support young page filters Date: Sat, 28 Jun 2025 09:51:39 -0700 Message-Id: <20250628165144.55528-7-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250628165144.55528-1-sj@kernel.org> References: <20250628165144.55528-1-sj@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Stat-Signature: yyf6yki8fxpwyc1mejfjxx4t1maifdso X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: CA71D20009 X-Rspam-User: X-HE-Tag: 1751129514-459965 X-HE-Meta: U2FsdGVkX1+KEeL0+oSMHGHhGrkkCP4Tz9PWj5UFvQtXvzpEhrYUh+lGmhTqXkQNTtEDLexgYdhGJDHRyQDOMPCIcOnTXevTwAx72WU21wTvWhDt/Ry5e0DJcUC7aLzSyaxlGT/8FkU1vKgH4wLs84eda4uxZ6UbL1vxZI7FHm99WLfnBHJbn3PPp+ashXTyt5sjDWdNxrC7hFKywDJCt7/MHnK2c3dLwAhQZjZo6I/g7nRpEj7yT9LnUIt4iHK57CI9yYHNXTj+jyd8xF+VesHIBc0fnqtweXDShEbmeRpjtV9yeqSq9TvRSysfCxbp2pIaGpJwxkYKYroXv4KDnbGZvMWi43LK+cjWx94sNqObV2zuhtlc6f920CvwSANHz3oo3zWGr0M/kVKUVkdhPpEdjMAHh+/0mwJqBssacZ2WSZuJw31aILHjgsqGW1llnaCCEDnCfTLgbicvz1A6r7ImZcQNez5kwyQyvHCkRpn/JYWUn/a7or8mnsee+U9n1NpeTKBIDF5WXWVwyPF5eWaLb89cHjPttWSc/yR9fm29nXWPwlK0Ov8bIGxbmfb8VU9Ezte0nWpi8MYiFFu/AWyZvRpoRiLEPGpk1Ex5DWZYL6bzxRMIcFiyQAApXbMBTRlYi16OmTO2LULt02X/HLybbRe+aTKxKeXSA2QzK9f64cciUfu3MKjyBFn8kJNNdwahAu9y5OH1F6q2SoJ/9DOcg5icSawg8F1cJnDoG4PuHPFdmhvfUH9noENsXzXM0UUph/pyWGt5wyLus2BnxSA9JnR1smHwqBtbCO6k7y8MCyAuR7BB6uKbxVgk1+Mdj/TTA5nZJxPgEyWv0fdJwpS5BlWk3enQAD20oBaWz7+eXMvcI08tTu4cH4eb8H5MIx7pFISi0OgqWv5MyMYk65oCS6tZNNQIO025mZW1lp9sozZ9w1+AAg== 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: DAMON monitors access pattern in the region level, and hence there could be some page level mismatches. A few hot pages could be located in cold region, and vice versa. Young page filter can be useful for doing additional page level access check before applying some DAMOS action. DAMON_LRU_SORT is not using young page filters, though. Add a parameter for using it. Signed-off-by: SeongJae Park --- mm/damon/lru_sort.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/mm/damon/lru_sort.c b/mm/damon/lru_sort.c index 7513ebc6aeef..3ccde23a8566 100644 --- a/mm/damon/lru_sort.c +++ b/mm/damon/lru_sort.c @@ -41,6 +41,21 @@ static bool enabled __read_mostly; static bool commit_inputs __read_mostly; module_param(commit_inputs, bool, 0600); +/* + * Filter [none-]young pages accordingly for LRU [de]prioritizations. + * + * If this is set, check page level access (youngness) once again before each + * LRU [de]prioritization operation. LRU prioritization operation is skipped + * if the page has not accessed since the last check (not young). LRU + * deprioritization operation is skipped if the page has accessed since the + * last check (young). The feature is enabled or disabled if this parameter is + * set as ``Y`` or ``N``, respectively. + * + * Disabled by default. + */ +static bool filter_young_pages __read_mostly; +module_param(filter_young_pages, bool, 0600); + /* * Access frequency threshold for hot memory regions identification in permil. * @@ -186,6 +201,28 @@ static struct damos *damon_lru_sort_new_cold_scheme(unsigned int cold_thres) return damon_lru_sort_new_scheme(&pattern, DAMOS_LRU_DEPRIO); } +static int damon_lru_sort_add_filters(struct damos *hot_scheme, + struct damos *cold_scheme) +{ + struct damos_filter *filter; + + if (!filter_young_pages) + return 0; + + /* disallow prioritizing not-young pages */ + filter = damos_new_filter(DAMOS_FILTER_TYPE_YOUNG, false, false); + if (!filter) + return -ENOMEM; + damos_add_filter(hot_scheme, filter); + + /* disabllow de-prioritizing young pages */ + filter = damos_new_filter(DAMOS_FILTER_TYPE_YOUNG, true, false); + if (!filter) + return -ENOMEM; + damos_add_filter(cold_scheme, filter); + return 0; +} + static int damon_lru_sort_apply_parameters(void) { struct damon_ctx *param_ctx; @@ -219,6 +256,10 @@ static int damon_lru_sort_apply_parameters(void) damon_set_schemes(param_ctx, &hot_scheme, 1); damon_add_scheme(param_ctx, cold_scheme); + err = damon_lru_sort_add_filters(hot_scheme, cold_scheme); + if (err) + goto out; + err = damon_set_region_biggest_system_ram_default(param_target, &monitor_region_start, &monitor_region_end); -- 2.39.5