From patchwork Thu Feb 27 01:57:46 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SeongJae Park X-Patchwork-Id: 13993523 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 C278EC19776 for ; Thu, 27 Feb 2025 01:58:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5067E6B008A; Wed, 26 Feb 2025 20:58:05 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 48E706B008C; Wed, 26 Feb 2025 20:58:05 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 308A06B0092; Wed, 26 Feb 2025 20:58:05 -0500 (EST) 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 160D96B008A for ; Wed, 26 Feb 2025 20:58:05 -0500 (EST) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id B8D4FB6A3B for ; Thu, 27 Feb 2025 01:58:04 +0000 (UTC) X-FDA: 83164064088.24.AD69C6A Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf28.hostedemail.com (Postfix) with ESMTP id 1CFCAC0003 for ; Thu, 27 Feb 2025 01:58:02 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=js2t26O2; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf28.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740621483; a=rsa-sha256; cv=none; b=MA/Tv1PIcsxSgo9XKKVQrWR0IcrKZoFpzwkusCncTYRtoxVwe2SdZxswBiE1XnqBsQNHZH c+KjBQeV9ktCgSV4DtsZXkBotfOiE7/tmSaWB+9I9pndYzWxlD792oHB8nvxLGpJrU1rdZ QTPDadOZrrsL7n3U5IB3HydSU9W4qYw= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=js2t26O2; dmarc=pass (policy=quarantine) header.from=kernel.org; spf=pass (imf28.hostedemail.com: domain of sj@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740621483; 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=z10a91iFk8ULotbjIzkkUqIMlvVETd7ttU5OIvJZdS0=; b=8fanrRxGNaBiv9SUoU3AxxUA5ZpS8ctWhBSLIRwsltKS6o0jXOR4dsRIs2OLzh5R8sDeYY e4E358X1eLzfL/Ho85m7O2TyA/BjN18+Jsiv1u8Iq4bOe6PnEsMiGcO2aRQo9xjwXxKwXU 1m1L4rBYGTnj2YsVJ0Owpl+GPDbYs2M= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 818C75C7628; Thu, 27 Feb 2025 01:57:23 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E6F20C4CED6; Thu, 27 Feb 2025 01:58:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740621482; bh=rhFsNhRUaSQHgawNxfN1Ke4vP/OFw5KgXJOej1ppOTE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=js2t26O2XKtZGE3Dz4T21JiIIrbyHgstsd9l+raa3zsams1DBAgkQLkYwPi0NyhRI q4ldhoGPKcn51cyoqXBfa241uVi4FuI0GkLDtQTqv6fOeOKZ9we1erdUXNZQDoJTgS dxsQ8tRhCKepDOSGM+pbDpHllMX4mXc4BllITmwitSgviys/u6csxyHxEdALwpIpZR i4X82CfixbZv4fpJALo0oUbF0LwikzrkVKhQIwo2KodrClxrSO/lyZ8IbGDHnBmFGk GjrHenlFCJrjUDy9GHEPykIBZ/GF/NuiVphMdYE1Eth3aYmkkPr/6LzCVfYcjfpOFo AJ+zQgiMnBp9g== 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 v2 1/9] mm/damon/core: introduce damos->ops_filters Date: Wed, 26 Feb 2025 17:57:46 -0800 Message-Id: <20250227015754.38789-2-sj@kernel.org> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250227015754.38789-1-sj@kernel.org> References: <20250227015754.38789-1-sj@kernel.org> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Queue-Id: 1CFCAC0003 X-Rspamd-Server: rspam12 X-Stat-Signature: ns4tt7nqcqzg6x5jwaajgwhogpc8bmr4 X-HE-Tag: 1740621482-753178 X-HE-Meta: U2FsdGVkX19tjRwXRgCubP/EF0Wf3inoxL0kl/ZlKEICSUZpjMaL2pUvSsVGvtdYAFUFwehu8GUvAXgWO53sHnLRJFdsC9qrxZpMCnlA3AyW6G/4b92C1QCYMk9VGnvU0pZvhdLiv11/U3f79lMevWq5gUkJl2JX7p8qPTyvENVsR3dvkEaICSemeAw+Kgr+ETuN8y3zruDluhstZc8GNnj+8R01wvAMJFR853fP3IXhSsMPkYDLGV0OiIwd9MlYef2eIGgHhLr+0ZFGPW24hyJxZzFjWGHHXpJuRv8YYmGKS8EAeIVqeXiokGs0j9DEpEMSwiCSvvDsT87RYkoOZZOYbe2s5OF6CQhKkMwxPAedgKj6eYeYgTuIVRcWkpkP/sw1knqu6EpfpSywJXu3TDg5kfaAY6WRLFKsfcEUO5tRJKXXkyuk54dv6NoxgqyytM/49riagro4LqyTrLA4Qpaco7NlPL2USOmPvlp+f99MbfAP2MQf1d8l+Y4mUqBd7QoFP5Jr77P8IuzYsROTLBX0+DBTuoCi6/vwBpHotZ3PMPb0X/vWD70jnBZSB1zCycAY0ZiEhiMkFypac4oT6kREmOrYvsOEohRV7lOyZ8kjbrByb29r9DuBeESlWrw1RdtKXAag77a6ZiVg9Ls8TZJi6G2RuQlUIFCQfwCJh4f21BfTX5f7oV7sAG248lvsknHxHYrPO6u+S4D7HVYyXc9fY8eCZZA/PrUqNDkQ7WKpFS3T++xX16/4Naz5Kh9nSURHCx0/7RuPPB5PwXK7ojXSiAN5XUOPTnzTdWp5aD9+jPmxNsN01QE1wZAWI5ZS0dbYuZ75pEMF6J1upo/YrMZb5vVweFF01tnk1gFKMOQJEoc/8HSoOL6/NfXqBT662ZmcKfPnkzUyMEWXuec50juqBsialWGKubW6E3WeMUCJPUOSvjKt0dKGW2lnD45eAf9/DosBMeUsZfkWnW0 K0wW7spY 8CwiF17zFlI01tlaN4qDQGLQEkhtyha1jXikZN8cTjf+VVPwCO0vyGr2Vw/F5qkVBFBBSNfGSBRlJME75+R3DneidE+Z3AjN6DQJuKO4/pOoJCzETrL9G+Ddu8AVt5/pvEzyW7UwfBuoNnzri+p7KKB7pRmvT14aQQDoOMq8Icc5YeEucY8RKEqH4GvilfrB0mUHbq4RPsK+92Eg5/l27f+CDUeEUzk7cun4zmp436C+nCOJw4+s51S0DXcUNF2C+11n0pSJrABUxPfvlvom/RWUaDQ== 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: DAMOS filters can be categorized into two groups depending on which layer they are handled, namely core layer and ops layer. The groups are important because the evaluation sequence of filters decides the overall behavior, and core layer-handled filters are evaluated before operations layer-handled ones. Currently, all filters are maintained in a single list (damos->filters) in mix. Filters evaluation logics in core layer and operations layer iterates all the filters on the list, while skipping filters that should be not handled by the layer of the logic. It is inefficient. Making future extensions having differentiations for filters of different handling layers will also be complicated. Add a new list that will be used for having all operations layer-handled DAMOS filters to DAMOS scheme data structure, with support of its initialization and basic traversals. Signed-off-by: SeongJae Park --- include/linux/damon.h | 8 ++++++++ mm/damon/core.c | 1 + 2 files changed, 9 insertions(+) diff --git a/include/linux/damon.h b/include/linux/damon.h index 795ca09b1107..add82fdc1117 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -448,6 +448,7 @@ struct damos_access_pattern { * @wmarks: Watermarks for automated (in)activation of this scheme. * @target_nid: Destination node if @action is "migrate_{hot,cold}". * @filters: Additional set of &struct damos_filter for &action. + * @ops_filters: ops layer handling &struct damos_filter objects list. * @last_applied: Last @action applied ops-managing entity. * @stat: Statistics of this scheme. * @list: List head for siblings. @@ -503,6 +504,7 @@ struct damos { int target_nid; }; struct list_head filters; + struct list_head ops_filters; void *last_applied; struct damos_stat stat; struct list_head list; @@ -810,6 +812,12 @@ static inline unsigned long damon_sz_region(struct damon_region *r) #define damos_for_each_filter_safe(f, next, scheme) \ list_for_each_entry_safe(f, next, &(scheme)->filters, list) +#define damos_for_each_ops_filter(f, scheme) \ + list_for_each_entry(f, &(scheme)->ops_filters, list) + +#define damos_for_each_ops_filter_safe(f, next, scheme) \ + list_for_each_entry_safe(f, next, &(scheme)->ops_filters, list) + #ifdef CONFIG_DAMON struct damon_region *damon_new_region(unsigned long start, unsigned long end); diff --git a/mm/damon/core.c b/mm/damon/core.c index 38f545fea585..bcb7e42098dc 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -374,6 +374,7 @@ struct damos *damon_new_scheme(struct damos_access_pattern *pattern, */ scheme->next_apply_sis = 0; INIT_LIST_HEAD(&scheme->filters); + INIT_LIST_HEAD(&scheme->ops_filters); scheme->stat = (struct damos_stat){}; INIT_LIST_HEAD(&scheme->list);