From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 619083B813F; Tue, 12 May 2026 14:36:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596618; cv=none; b=ejCM2XYKI+SLJIadT26CWwrD0MzWdY0hKC3hipQ1W1AfIs87DGW0cUHnWpQ7+n6PqoGt2ZldAY5udixRlbPNhArNnvLAAD4kbKmkFH6nj6kGRRDY8ZKuD8CWBdicoLmLaslkCZ4kiLFiuHtLFWngnBol6NMj7gZUTteQzAfA7gY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596618; c=relaxed/simple; bh=Kv/gTWHqRbjarAkUDYzqDqtowKyfqdWveUKMXCNryl4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nmd+nja6rRYcP+8K4ad2f/3ZKSItIhtC++jnWaoUHx6csRmpKIaoIjRKXtsNZ5MiQUDdnEWjXjX9msybvZDvjCxcUMe/aekRAOlJRNkF3kodF1wFpcfA6TQ+zKqzuuAeTaWooITnZYreEo0L50l43baLkaPZgRlGka3F2D1X7tE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=u8AlupVL; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="u8AlupVL" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 276F6C2BCB0; Tue, 12 May 2026 14:36:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596618; bh=Kv/gTWHqRbjarAkUDYzqDqtowKyfqdWveUKMXCNryl4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=u8AlupVLS1/yOZDBq/YBHs6Etf1hzyDcoDgyGOywrrbHpKek6miAl160dXWIV/axo USjQNX8qlTa2CtPD2MmEvaJJSHpO7wpwqFO3UIz8w+ybbqatFdNSVXKB2jzPiqWiK7 nn9HuL/R6aPJGnvjDveabwfs5EY8V4CxUjtVAEyeX51gX1fUxmoCZrGeLo87uyOg+y PJnvvjvOAjqe6Lis/onqkS4hWs5G8KE81O9FhaAwFol+Ue/X6HibYtLI4b9Pmn33UD E0SCs8jb0riZTbQGQOzECIKM8s4mxgIUfIWeehWjdXBqnK5BITutYf15csztKw1hP9 jF0Zgv4lQMpKg== From: SeongJae Park To: Cc: SeongJae Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 01/28] mm/damon/core: introduce struct damon_probe Date: Tue, 12 May 2026 07:36:16 -0700 Message-ID: <20260512143645.113201-2-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Introduce a data structure for data attribute probe. It is just a linked list header at this step. It will be extended in a way that it can determine if a given memory has a specific data attribute. Signed-off-by: SeongJae Park --- include/linux/damon.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/include/linux/damon.h b/include/linux/damon.h index 4d4f031bcb453..4794931fa2ea3 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -730,6 +730,15 @@ struct damon_intervals_goal { unsigned long max_sample_us; }; =20 +/** + * struct damon_probe - Data region attribute probe. + * + * @list: Siblings list. + */ +struct damon_probe { + struct list_head list; +}; + /** * struct damon_attrs - Monitoring attributes for accuracy/overhead contro= l. * --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 B065C3B83F0; Tue, 12 May 2026 14:36:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596618; cv=none; b=ScBYimzv4NkqSBO9Kty9iLhN+Iy1yXDrpVzsUCTCLmNzlFC7L4Kbzwjrul2ztxvxpVk3YepjQQnpEsiDrzOf2IyHYv8OzMjHEvHk63/NDcowjRhK5wYn1iqje2hUkjfr++UiM7VQWoVUomc2xTAJ3HIjPGbt+GzpigHhemSqTwQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596618; c=relaxed/simple; bh=zvNnkp+6yNBQFjvFCmCTyrnoUvo/qS1CeDP5FbHiLzc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jtuUY436rOybTiugX23ErsXacyVcGUiGiwTo/Qqw2qsS6/ptCpY2A+VpELGDvz8fW+gBzHIFK6BwNOdTPEqB40YIRDTcSKrWFOSZjuSUhrUxN//bBR58HZoiFuRIYFuQA6m38WIRZV4iRPUTfmuR+Io8sVvIcnGC7Pp8iPpaoaw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=CNyq5rfb; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="CNyq5rfb" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6D3A5C2BCFD; Tue, 12 May 2026 14:36:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596618; bh=zvNnkp+6yNBQFjvFCmCTyrnoUvo/qS1CeDP5FbHiLzc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CNyq5rfbKZVfqc1DB9XZ1pKACnvfOTmEVeiW63YXgyMw1dXW89CybvQRdmrglQ55n YxrYuJBxxVgZbCGHdfxOTaS+4cL4gDYu1BYwjDnqEhcNMUzmXUnmu8rL5ApI1jUU4R diO6iridatd4jHFtZEoPCa8ny5RaNHMJH5xtnzlI4HnOiOG4RqRb5jSUeecdPJxh7r AC8mKvNdOWrsFT4f0KGSz989+AWuvM7uYMceGhd+e2hEN4hTURMZsKgVYCUnav73tq W3nCOJtz1Bl7Ajeom8XXfEnY+W8V+Z1by0C9wZ543Fa9HZq1omDkmHa4ApBIiRw7qP x53DFlZ53CeDw== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 02/28] mm/damon/core: embed damon_probe objects in damon_ctx Date: Tue, 12 May 2026 07:36:17 -0700 Message-ID: <20260512143645.113201-3-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Let damon_probe objects be able to be installed on a given damon_ctx, by adding a linked list header for storing the objects. Add initialization and cleanup of the new field with helper functions, too. Signed-off-by: SeongJae Park --- include/linux/damon.h | 9 +++++++++ mm/damon/core.c | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/include/linux/damon.h b/include/linux/damon.h index 4794931fa2ea3..dc53bc3da74b3 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -857,6 +857,7 @@ struct damon_ctx { =20 /* public: */ struct damon_operations ops; + struct list_head probes; unsigned long addr_unit; unsigned long min_region_sz; bool pause; @@ -909,6 +910,11 @@ static inline unsigned long damon_sz_region(struct dam= on_region *r) return r->ar.end - r->ar.start; } =20 +#define damon_for_each_probe(p, ctx) \ + list_for_each_entry(p, &ctx->probes, list) + +#define damon_for_each_probe_safe(p, next, ctx) \ + list_for_each_entry_safe(p, next, &ctx->probes, list) =20 #define damon_for_each_region(r, t) \ list_for_each_entry(r, &t->regions_list, list) @@ -951,6 +957,9 @@ static inline unsigned long damon_sz_region(struct damo= n_region *r) =20 #ifdef CONFIG_DAMON =20 +struct damon_probe *damon_new_probe(void); +void damon_add_probe(struct damon_ctx *ctx, struct damon_probe *probe); + struct damon_region *damon_new_region(unsigned long start, unsigned long e= nd); =20 /* diff --git a/mm/damon/core.c b/mm/damon/core.c index 3a8725e400c6b..8a55cc61d2972 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -113,6 +113,38 @@ int damon_select_ops(struct damon_ctx *ctx, enum damon= _ops_id id) return err; } =20 +struct damon_probe *damon_new_probe(void) +{ + struct damon_probe *p; + + p =3D kmalloc_obj(*p); + if (!p) + return NULL; + INIT_LIST_HEAD(&p->list); + return p; +} + +void damon_add_probe(struct damon_ctx *ctx, struct damon_probe *probe) +{ + list_add_tail(&probe->list, &ctx->probes); +} + +static void damon_del_probe(struct damon_probe *p) +{ + list_del(&p->list); +} + +static void damon_free_probe(struct damon_probe *p) +{ + kfree(p); +} + +static void damon_destroy_probe(struct damon_probe *p) +{ + damon_del_probe(p); + damon_free_probe(p); +} + #ifdef CONFIG_DAMON_DEBUG_SANITY static void damon_verify_new_region(unsigned long start, unsigned long end) { @@ -605,6 +637,8 @@ struct damon_ctx *damon_new_ctx(void) ctx->attrs.min_nr_regions =3D 10; ctx->attrs.max_nr_regions =3D 1000; =20 + INIT_LIST_HEAD(&ctx->probes); + ctx->addr_unit =3D 1; ctx->min_region_sz =3D DAMON_MIN_REGION_SZ; =20 @@ -627,12 +661,16 @@ static void damon_destroy_targets(struct damon_ctx *c= tx) void damon_destroy_ctx(struct damon_ctx *ctx) { struct damos *s, *next_s; + struct damon_probe *p, *next_p; =20 damon_destroy_targets(ctx); =20 damon_for_each_scheme_safe(s, next_s, ctx) damon_destroy_scheme(s); =20 + damon_for_each_probe_safe(p, next_p, ctx) + damon_destroy_probe(p); + kfree(ctx); } =20 --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 193EC394EA2; Tue, 12 May 2026 14:36:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596619; cv=none; b=A4H0hlBnj9mEJiL5J3mBmpZuSOXvbcYImG6ih/HpG2v8Pfdjgrm8MBu88fEZ0mS2VIzFqURBT1oa/IU9e/BkYtItbiYK2cBx07L4S/b+aVaSMAPpZtBa6Rm251z8osG0G7hmdXBSvbU3ziXB4G9a/4JunItTGbJzk61cOxHB+N8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596619; c=relaxed/simple; bh=bOFWp1WguP8IVmbjiUHmaSxJjCXFrz74gfek9x1LLRk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LrUGBds6BnzLs2e42RMElZ2bfwwOC5wA8lfpmlID+g1pRoI1PSHTFUOA+XfGcsVW6ffFgTNz7LyqumXS9oCtjm47bN/k+2xkkZllCcwMUh000lWR5GxFkWWyd9xZHaNIiKZ1aQ+fWqy7ldZ+SMGjEuxTm9feHj2f2Esijd1TfgU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=CFrwpjEX; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="CFrwpjEX" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BF48CC2BCF5; Tue, 12 May 2026 14:36:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596618; bh=bOFWp1WguP8IVmbjiUHmaSxJjCXFrz74gfek9x1LLRk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CFrwpjEXx3QjHpm3n3Wfpcr8jHjY5MblZBpGiSvjljRutze62QvaU1vckEVgeynfD QdHyIZASpO0/iNJxNdJ+C1s8yMvWfJUSAwU/i5+8BhGlHYO9K9CCDiZZSg9CpeYTMX cdGlodUVWGveioUSBm8rV4iPgBWIwvpk4Gg+T4UyclJRqquRhVWcU8plKdAwZxtSbw eqYT6eqV6B6z+Lhq4BNd8P2AB5mbm9blirI5HMKQORw4XIV5rGSAyS3Hu1PzxPKcVp Qp06UwYbzeiy8/UUkAh0XqR6ZvYXUKttvTOfSlKJpUW1zDZ7EhS6t3mdX+aOhWqdOz BZry8gZ+Qvqzg== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 03/28] mm/damon/core: introduce damon_filter Date: Tue, 12 May 2026 07:36:18 -0700 Message-ID: <20260512143645.113201-4-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Define a data structure for constructing damon_probe's attributes check, namely damon_filter. It is very similar to damos_filter but works only for monitoring purposes. Also embed that into damon_probe, implement essential handling of the link, with fundamental helpers. Signed-off-by: SeongJae Park --- include/linux/damon.h | 36 ++++++++++++++++++++++++++++++++++++ mm/damon/core.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/include/linux/damon.h b/include/linux/damon.h index dc53bc3da74b3..95b2c508a63ea 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -730,12 +730,38 @@ struct damon_intervals_goal { unsigned long max_sample_us; }; =20 +/** + * enum damon_filter_type - Type of &struct damon_filter + * + * @DAMON_FILTER_TYPE_ANON: Anonymous pages. + */ +enum damon_filter_type { + DAMON_FILTER_TYPE_ANON, +}; + +/** + * struct damon_filter - DAMON region filter for &struct damon_probe. + * + * @type: Type of the region. + * @matcing: Whether this filter is for the type-matching ones. + * @allow: Whether the @type-@matching ones should pass this filter. + * @list: Siblings list. + */ +struct damon_filter { + enum damon_filter_type type; + bool matching; + bool allow; + struct list_head list; +}; + /** * struct damon_probe - Data region attribute probe. * + * @filters: Filters for assessing if a given region is for this probe. * @list: Siblings list. */ struct damon_probe { + struct list_head filters; struct list_head list; }; =20 @@ -910,6 +936,12 @@ static inline unsigned long damon_sz_region(struct dam= on_region *r) return r->ar.end - r->ar.start; } =20 +#define damon_for_each_filter(f, p) \ + list_for_each_entry(f, &p->filters, list) + +#define damon_for_each_filter_safe(f, next, p) \ + list_for_each_entry_safe(f, next, &p->filters, list) + #define damon_for_each_probe(p, ctx) \ list_for_each_entry(p, &ctx->probes, list) =20 @@ -957,6 +989,10 @@ static inline unsigned long damon_sz_region(struct dam= on_region *r) =20 #ifdef CONFIG_DAMON =20 +struct damon_filter *damon_new_filter(enum damon_filter_type type, + bool matching, bool allow); +void damon_add_filter(struct damon_probe *probe, struct damon_filter *f); + struct damon_probe *damon_new_probe(void); void damon_add_probe(struct damon_ctx *ctx, struct damon_probe *probe); =20 diff --git a/mm/damon/core.c b/mm/damon/core.c index 8a55cc61d2972..d01417955a3b4 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -113,6 +113,31 @@ int damon_select_ops(struct damon_ctx *ctx, enum damon= _ops_id id) return err; } =20 +struct damon_filter *damon_new_filter(enum damon_filter_type type, + bool matching, bool allow) +{ + struct damon_filter *filter; + + filter =3D kmalloc_obj(*filter); + if (!filter) + return NULL; + filter->type =3D type; + filter->matching =3D matching; + filter->allow =3D allow; + INIT_LIST_HEAD(&filter->list); + return filter; +} + +void damon_add_filter(struct damon_probe *p, struct damon_filter *f) +{ + list_add_tail(&f->list, &p->filters); +} + +static void damon_free_filter(struct damon_filter *f) +{ + kfree(f); +} + struct damon_probe *damon_new_probe(void) { struct damon_probe *p; @@ -120,6 +145,7 @@ struct damon_probe *damon_new_probe(void) p =3D kmalloc_obj(*p); if (!p) return NULL; + INIT_LIST_HEAD(&p->filters); INIT_LIST_HEAD(&p->list); return p; } @@ -136,6 +162,10 @@ static void damon_del_probe(struct damon_probe *p) =20 static void damon_free_probe(struct damon_probe *p) { + struct damon_filter *f, *next; + + damon_for_each_filter_safe(f, next, p) + damon_free_filter(f); kfree(p); } =20 --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 614303B8416; Tue, 12 May 2026 14:36:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596619; cv=none; b=aj8bQIdC7ozXWGF88KKzkGjKNhxLMYcjWEwTi6xNrN41fWMhlYDv/ki5deY1kBkyjbZfHDX6LCijV5XKkuKgrX34jHlFYI/umK1K6ASpDZ72a9xHs6/oWx9IDrRkmLLiJm+h/CaFRPCx2lJXHFQr7JvX3qfp/8GW4UZR5txzlhI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596619; c=relaxed/simple; bh=OKhmfytBqX/7un5Obh/JeNbzocTBgyUdokH+J+a21+E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Ct0m2VkdLK6ydoyi2R0zwm+D03LJn7JPVqVz60lJMXNb/BlW+STnyok84ivRhWHx2cw5EDBKQtVIbloaa3Tk2ZR5lfe/0cV5PU0PXI47CRNa6gFSFXkQwBd3rtXZqzUjxezLBrA7vlGA0wE9IlQv0nnMTjwPl/qb3sFdxqmfcBc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ppLexMir; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ppLexMir" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1BAD6C2BCF6; Tue, 12 May 2026 14:36:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596619; bh=OKhmfytBqX/7un5Obh/JeNbzocTBgyUdokH+J+a21+E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ppLexMirhSeD9E+SCsqA39/jd0rc9uOgTn8XQSvvohheJ4uFm1wYys1uncpVtJJdJ ZfQXviR97WUSVWsXSAmIpJejuiuTNgy+IEyjQhEbYok5qXsEu7FOXfKzT4JGuSmESU E2afXBz6oCWTqdKUQuzRKRMSpw7PnOgdxEmsnlHFtys3wYOD7hTS3S44J25Tsbz40C VjX0TUn/Sm8QK1k2sBHwGU37CjpBSo/oEMH5v01E1M97S5jpbERbTYCWwQXadfwQpE DVfSRlzEp2zVwliP4CJubiVlO9zLbylhoUV2ylJNemGyKZIEoczNgm4ARSrqBkiP8W 5xAadZlukYt1Q== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 04/28] mm/damon/core: commit probes Date: Tue, 12 May 2026 07:36:19 -0700 Message-ID: <20260512143645.113201-5-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Update damon_commit_ctx() to commit installed data probes, too. Signed-off-by: SeongJae Park --- mm/damon/core.c | 104 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/mm/damon/core.c b/mm/damon/core.c index d01417955a3b4..240cae1420c12 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -133,11 +133,34 @@ void damon_add_filter(struct damon_probe *p, struct d= amon_filter *f) list_add_tail(&f->list, &p->filters); } =20 +static void damon_del_filter(struct damon_filter *f) +{ + list_del(&f->list); +} + static void damon_free_filter(struct damon_filter *f) { kfree(f); } =20 +static void damon_destroy_filter(struct damon_filter *f) +{ + damon_del_filter(f); + damon_free_filter(f); +} + +static struct damon_filter *damon_nth_filter(int n, struct damon_probe *p) +{ + struct damon_filter *f; + int i =3D 0; + + damon_for_each_filter(f, p) { + if (i++ =3D=3D n) + return f; + } + return NULL; +} + struct damon_probe *damon_new_probe(void) { struct damon_probe *p; @@ -175,6 +198,18 @@ static void damon_destroy_probe(struct damon_probe *p) damon_free_probe(p); } =20 +static struct damon_probe *damon_nth_probe(int n, struct damon_ctx *ctx) +{ + struct damon_probe *p; + int i =3D 0; + + damon_for_each_probe(p, ctx) { + if (i++ =3D=3D n) + return p; + } + return NULL; +} + #ifdef CONFIG_DAMON_DEBUG_SANITY static void damon_verify_new_region(unsigned long start, unsigned long end) { @@ -1386,6 +1421,72 @@ static int damon_commit_targets( return 0; } =20 +static void damon_commit_filter(struct damon_filter *dst, + struct damon_filter *src) +{ + dst->type =3D src->type; + dst->matching =3D src->matching; + dst->allow =3D src->allow; +} + +static int damon_commit_filters(struct damon_probe *dst, + struct damon_probe *src) +{ + struct damon_filter *dst_filter, *next, *src_filter, *new_filter; + int i =3D 0, j =3D 0; + + damon_for_each_filter_safe(dst_filter, next, dst) { + src_filter =3D damon_nth_filter(i++, src); + if (src_filter) + damon_commit_filter(dst_filter, src_filter); + else + damon_destroy_filter(dst_filter); + } + + damon_for_each_filter_safe(src_filter, next, src) { + if (j++ < i) + continue; + + new_filter =3D damon_new_filter(src_filter->type, + src_filter->matching, src_filter->allow); + if (!new_filter) + return -ENOMEM; + damon_add_filter(dst, new_filter); + } + return 0; +} + +static int damon_commit_probes(struct damon_ctx *dst, struct damon_ctx *sr= c) +{ + struct damon_probe *dst_probe, *next, *src_probe, *new_probe; + int i =3D 0, j =3D 0, err; + + damon_for_each_probe_safe(dst_probe, next, dst) { + src_probe =3D damon_nth_probe(i++, src); + if (src_probe) { + err =3D damon_commit_filters(dst_probe, src_probe); + if (err) + return err; + } else { + damon_destroy_probe(dst_probe); + } + } + + damon_for_each_probe_safe(src_probe, next, src) { + if (j++ < i) + continue; + + new_probe =3D damon_new_probe(); + if (!new_probe) + return -ENOMEM; + damon_add_probe(dst, new_probe); + err =3D damon_commit_filters(new_probe, src_probe); + if (err) + return err; + } + return 0; +} + /** * damon_commit_ctx() - Commit parameters of a DAMON context to another. * @dst: The commit destination DAMON context. @@ -1442,6 +1543,9 @@ int damon_commit_ctx(struct damon_ctx *dst, struct da= mon_ctx *src) } dst->pause =3D src->pause; dst->ops =3D src->ops; + err =3D damon_commit_probes(dst, src); + if (err) + return err; dst->addr_unit =3D src->addr_unit; dst->min_region_sz =3D src->min_region_sz; =20 --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 B2BC13B992C; Tue, 12 May 2026 14:36:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596619; cv=none; b=OA+epjyfhvHnAKrEEaZk9eLLWHnpkKAsiJH/p4QYMbxyJip3DLokb3SysXmAjItgD1zjg5jWFGWcgAtvJ9m8gBJXB344zhhmjWNPu0kYdf8/IfG/7bfmN712hrUCz4Y/wGwD3OsAofTX0B8+hYvMnPIXv2i3oAHB7DAmKsjecMI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596619; c=relaxed/simple; bh=sqTfJo5eyZfIgPieldGgPDsesotOxkPfGODr6Semhvg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YBHno5655nv+5/4t/3BEdw3dRfHvy+SRqdFjUXcU0Mw9LPD0mTOnoKexaCkTYgKeltN5NK3kSwC58rccx/I03x0At5bfxCM+LDyn5edDNTtkYlwWYROtlklfPtlJjfryKJc4YwqjrnRSiY1LhCI44BVAbd6UloGL345OglHAFdA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=AvCucv5B; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="AvCucv5B" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6C0DBC2BCB0; Tue, 12 May 2026 14:36:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596619; bh=sqTfJo5eyZfIgPieldGgPDsesotOxkPfGODr6Semhvg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=AvCucv5BnfwStN8bnkbrx8qW6MAFLmXHFk8Lz4P3dUPAmmvG6cRLR9twBgi22e7yy blKIN3ZS2qREWyurMfrguoqHa1cu14dobPyOvvrJO4EWFBX1pkKDtxlH7ikwZ9IKD8 ahd6Us4+KjL3By0ez9gIEQjIosh/TKnxb1uR8Gm6NZ7MTxTvxpdzjMa3nCBabFfTsT ivmC5sIKc1VmdxpRIvNwzVZiwGKYmrWc5pAyEzCbSH8nN0dxzKrtmi5IB6l+a6wizo skSwbszm/+iJqfOxusaJvqvtKi/1MrO+XRrR+2qICEeBML55B+zvmZsElPRmhhaoBK TRAwQ6xiJwUTQ== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 05/28] mm/damon/core: introduce damon_region->probe_hits Date: Tue, 12 May 2026 07:36:20 -0700 Message-ID: <20260512143645.113201-6-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Add an array for the per-region per-probe positive samples count. For simple and efficient implementation, add a limit to the number of data probes and set the array to support only the limited number of counters. Signed-off-by: SeongJae Park --- include/linux/damon.h | 4 ++++ mm/damon/core.c | 3 +++ 2 files changed, 7 insertions(+) diff --git a/include/linux/damon.h b/include/linux/damon.h index 95b2c508a63ea..19b780bfab051 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -17,6 +17,8 @@ =20 /* Minimal region size. Every damon_region is aligned by this. */ #define DAMON_MIN_REGION_SZ PAGE_SIZE +/* Maximum number of monitoring probes. */ +#define DAMON_MAX_PROBES (4) /* Max priority score for DAMON-based operation schemes */ #define DAMOS_MAX_SCORE (99) =20 @@ -47,6 +49,7 @@ struct damon_size_range { * @nr_accesses: Access frequency of this region. * @nr_accesses_bp: @nr_accesses in basis point (0.01%) that updated for * each sampling interval. + * @probe_hits: Number of probe-positive region samples. * @list: List head for siblings. * @age: Age of this region. * @@ -75,6 +78,7 @@ struct damon_region { unsigned long sampling_addr; unsigned int nr_accesses; unsigned int nr_accesses_bp; + unsigned char probe_hits[DAMON_MAX_PROBES]; struct list_head list; =20 unsigned int age; diff --git a/mm/damon/core.c b/mm/damon/core.c index 240cae1420c12..72acdeb8c478e 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -229,6 +229,7 @@ static void damon_verify_new_region(unsigned long start= , unsigned long end) struct damon_region *damon_new_region(unsigned long start, unsigned long e= nd) { struct damon_region *region; + int i; =20 damon_verify_new_region(start, end); region =3D kmem_cache_alloc(damon_region_cache, GFP_KERNEL); @@ -239,6 +240,8 @@ struct damon_region *damon_new_region(unsigned long sta= rt, unsigned long end) region->ar.end =3D end; region->nr_accesses =3D 0; region->nr_accesses_bp =3D 0; + for (i =3D 0; i < DAMON_MAX_PROBES; i++) + region->probe_hits[i] =3D 0; INIT_LIST_HEAD(®ion->list); =20 region->age =3D 0; --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 096D93B8139; Tue, 12 May 2026 14:37:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596620; cv=none; b=LIRUkw409zOMQxNY9xBFJXic7FQ8t+gMA3yNuIVueacGGRcjS8n7jesoPsw9IgcIbeuGgyq98P3N6TAWeVmH99gTBiOKNIOU5CDmzd7Fy1FfXE2vFgaG2txG3uqfGfM8sWpthKClhO9T0dUoTd5rxSQoqXAZloFgC6RJrNBruA4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596620; c=relaxed/simple; bh=T23N/ChU1TyBSEMb1nXX6ZXwE6Ou5N0n+X87B8zILMU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HYpuuLtZtPbAbnNWHO8mcYV2UMld6bg3tuZBKlHgk6NhTBkGBzKRSIb7GoZS+9Yzh7bEx4SX9C0hW4StXJoP/mJx/k/nslhFZmSfja2LHPEh80GxfmVu5UsFKWsI92TpA1yU/EU929M5mq1rzwfOKyAe280/14VbFnbLKGIYJrg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=gChnE+XI; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="gChnE+XI" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BD50FC2BCF7; Tue, 12 May 2026 14:36:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596619; bh=T23N/ChU1TyBSEMb1nXX6ZXwE6Ou5N0n+X87B8zILMU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gChnE+XIXVjHYSTSrJzhzIrChrpMfeVc28ptzi1qVaYtsdly1g0MvYt9NX8MY/SE4 EO5ozSd5Ddxi/+iuZAhDTPC1AhW/aYGjPNmy3pGG0JbrI/s9VnHPWryKQ/oVzEuXXn +uAQ9g54Qcg2TfbrLvHqr7o35pki/UWCjqYz9s13XxTxKAYJKULE1PVtQm+06fpupq b+594UHL4Tx6rh+Vc6sLVqyZOqu338vNaLH18d2uwRlIs5vvpEQ16ZKy/qzQ/y3Pzb yEmcCOi8fsiL2/18Mo86a1yZDrRi6KR1wiP8UBDzDAGpOZiq3zf2kIeYuGw5HPX31o Ci6a2CeYyLHvw== From: SeongJae Park To: Cc: SeongJae Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 06/28] mm/damon/core: introduce damon_ops->apply_probes Date: Tue, 12 May 2026 07:36:21 -0700 Message-ID: <20260512143645.113201-7-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Extend damon_operations struct with a new callback, namely apply_probe. The callback will be invoked for data attributes monitoring. More specifically, the callback will apply damon_probe objects to each region and update the per-region per-probe counters for the number of encountered probe-positive samples. Signed-off-by: SeongJae Park --- include/linux/damon.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/linux/damon.h b/include/linux/damon.h index 19b780bfab051..e9ca40cdd9102 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -630,6 +630,7 @@ enum damon_ops_id { * @update: Update operations-related data structures. * @prepare_access_checks: Prepare next access check of target regions. * @check_accesses: Check the accesses to target regions. + * @apply_probes: Apply probes for each region. * @get_scheme_score: Get the score of a region for a scheme. * @apply_scheme: Apply a DAMON-based operation scheme. * @target_valid: Determine if the target is valid. @@ -673,6 +674,7 @@ struct damon_operations { void (*update)(struct damon_ctx *context); void (*prepare_access_checks)(struct damon_ctx *context); unsigned int (*check_accesses)(struct damon_ctx *context); + void (*apply_probes)(struct damon_ctx *context); int (*get_scheme_score)(struct damon_ctx *context, struct damon_region *r, struct damos *scheme); unsigned long (*apply_scheme)(struct damon_ctx *context, --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 7E08F3BB664; Tue, 12 May 2026 14:37:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596620; cv=none; b=sj3T7V+HoqKKK9qzFjNgErTh4OJLmtsAgU8TGO6F40RKMeAG30Z5fhb4LaAqkIAfMBcyNFRvZ9pzJeBpfWiEw4HrdR5KiIIoUMmSINZuTHZWhkWuQB8tFJhOyPFPwolKH8IP7yIt0FmhShoRvnqzzC6XuqxmFs51Dah2uQLlpeU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596620; c=relaxed/simple; bh=SGvDGH8HeHXn8zTVaCZsyhJzQGptwbmD0KfHLczQ4ao=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rzZqlUGfttmZynoVYVEBp/X2UoRCFpnBrczsFRCmVmRf1eqKdr+DVFx5O0GWRnrBzV8Acg5+bSrkl/7xohqACAaB6HyWbg0E5PJ+VKff3RLc4Hw4kvZVqDAEyTndlySGsRAOU5fAKZIIzsinigvJVg+LSvaq8MbGeFBcVm+VAHE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=SHr6kjg9; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="SHr6kjg9" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3898DC4AF0B; Tue, 12 May 2026 14:37:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596620; bh=SGvDGH8HeHXn8zTVaCZsyhJzQGptwbmD0KfHLczQ4ao=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SHr6kjg97yrhddopCh8SrS0cwoGVIPtpCqP5/w4RUiObXCcA3wmwpgxqte3SYsJPn X9BUHP6Oup1PCbFOBXJgiCcxuircBIQLf7Xh+GBaWXYOmk+dflW1dlupl3s/uYevFp xN+10+EOp8rmU3yhqZMufXwuNrono7E4FdDODyi3HAFJ4ZD+/ZSi/bkAoNPPEX06ao 9tUNu/nNdEfddhknATnywZ1JFtzJywaZwg13YitlJVhXcAt7g/0YZjnG7/npKSHS1+ dghbEosUoqHDr0GBCgxeovXUzuJzod/OCt/aVTfHrDLccx1ujIKMYDnnrlK1iFsIi8 ArW2pUWni0raQ== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 07/28] mm/damon/core: do data attributes monitoring Date: Tue, 12 May 2026 07:36:22 -0700 Message-ID: <20260512143645.113201-8-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Implement the data attributes monitoring execution. Update kdamond to invoke the probes application callback, and reset the aggregated number of per-region per-probe positive samples for every aggregation interval. Signed-off-by: SeongJae Park --- mm/damon/core.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mm/damon/core.c b/mm/damon/core.c index 72acdeb8c478e..fe6c789f2cecb 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -1910,10 +1910,14 @@ static void kdamond_reset_aggregated(struct damon_c= tx *c) struct damon_region *r; =20 damon_for_each_region(r, t) { + int i; + trace_damon_aggregated(ti, r, damon_nr_regions(t)); damon_warn_fix_nr_accesses_corruption(r); r->last_nr_accesses =3D r->nr_accesses; r->nr_accesses =3D 0; + for (i =3D 0; i < DAMON_MAX_PROBES; i++) + r->probe_hits[i] =3D 0; damon_verify_reset_aggregated(r, c); } ti++; @@ -3400,6 +3404,8 @@ static int kdamond_fn(void *data) =20 if (ctx->ops.check_accesses) max_nr_accesses =3D ctx->ops.check_accesses(ctx); + if (ctx->ops.apply_probes) + ctx->ops.apply_probes(ctx); =20 if (time_after_eq(ctx->passed_sample_intervals, next_aggregation_sis)) { --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 CAADF3BB67B; Tue, 12 May 2026 14:37:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596620; cv=none; b=k5QxL8wxTYhETz+IUkOslj5ZCaq/0fQTa3cilL8WxNqF1E8MsLyZyu+cVFuD6r7GM2OIYRn0gj3YSRy9rAlr3v01J3klfCb4WFjzi/ZsqbPRt6jvAFR1ygOX2jEW5MP22N0wrCvY+7yFuIA3AvLOkUm5CkfHMZA4CIypvc/BT9s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596620; c=relaxed/simple; bh=rzjMv8caD4Lt/pj2/Puwk16Om6tdIYt4pV2QDp5f+Xs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UnbpBraWfuhCMpO+PAG41cW3DMf+KMYyhILu4ciaGFi31hqgZB70f6dNUvzZ5pdRUZc7JFjY91M/DlYHhCrvsILJo3quHe1bVjTE+pTG2aMoB5Yy0hgFkEwj6BWWo+A2GVazK5CsE9fDOwNYosoZFaD55KlYHLZvcyB1KAvJoYQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=p4ICceRA; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="p4ICceRA" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 875E8C2BCB0; Tue, 12 May 2026 14:37:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596620; bh=rzjMv8caD4Lt/pj2/Puwk16Om6tdIYt4pV2QDp5f+Xs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=p4ICceRAbBffvDG9myKtbeCFfZMPjBeJhpxt40NJZFu8JcOfWccI1H5xfmFfVqlo/ wQHeO4Ujlv2DgLvLN+P5JtHVzOiPqwLPKW+yXXqi8soEVkfkagqyAXrpJUTyHdEtrh f3Hpdz2yIbLx8ZIXPW79UCk/2pFIsRHyKtUxWLEaDrcyD686rW2BKQ9De4WjS3OR5o oVEL7bKuBrGh5DEHh2xKzSHY/UZZeinXYafPw4SWBo4VzulEiXEQeW6Xh0qpmnUSGp n57NMdQCq0g9jWpgqaJCrG/jfIvC90pXmkx9jj6w1Ef4M5yeJhd0Ljd2kOyaIZnB3D uWs8X7p7PnbSw== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 08/28] mm/damon/paddr: support data attributes monitoring Date: Tue, 12 May 2026 07:36:23 -0700 Message-ID: <20260512143645.113201-9-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Implement and register damon_operations->apply_probes() callback to support data attributes monitoring. Signed-off-by: SeongJae Park --- mm/damon/paddr.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/mm/damon/paddr.c b/mm/damon/paddr.c index c4738cd5e221e..e60af2cbc1089 100644 --- a/mm/damon/paddr.c +++ b/mm/damon/paddr.c @@ -120,6 +120,67 @@ static unsigned int damon_pa_check_accesses(struct dam= on_ctx *ctx) return max_nr_accesses; } =20 +static bool damon_pa_filter_match(struct damon_filter *filter, + struct folio *folio) +{ + bool matched =3D false; + + switch (filter->type) { + case DAMON_FILTER_TYPE_ANON: + if (!folio) { + matched =3D false; + break; + } + matched =3D folio_test_anon(folio); + break; + default: + break; + } + return matched =3D=3D filter->matching; +} + +static bool damon_pa_filter_pass(phys_addr_t pa, struct damon_probe *p) +{ + struct damon_filter *f; + struct folio *folio; + bool pass =3D true; + + folio =3D damon_get_folio(PHYS_PFN(pa)); + damon_for_each_filter(f, p) { + if (damon_pa_filter_match(f, folio)) { + pass =3D f->allow; + break; + } + pass =3D !f->allow; + } + if (folio) + folio_put(folio); + return pass; +} + +static void damon_pa_apply_probes(struct damon_ctx *ctx) +{ + struct damon_target *t; + struct damon_region *r; + struct damon_probe *p; + + damon_for_each_target(t, ctx) { + damon_for_each_region(r, t) { + int i =3D 0; + + damon_for_each_probe(p, ctx) { + phys_addr_t pa; + + pa =3D damon_pa_phys_addr(r->sampling_addr, + ctx->addr_unit); + if (damon_pa_filter_pass(pa, p)) + r->probe_hits[i]++; + i++; + } + } + } +} + /* * damos_pa_filter_out - Return true if the page should be filtered out. */ @@ -371,6 +432,7 @@ static int __init damon_pa_initcall(void) .update =3D NULL, .prepare_access_checks =3D damon_pa_prepare_access_checks, .check_accesses =3D damon_pa_check_accesses, + .apply_probes =3D damon_pa_apply_probes, .target_valid =3D NULL, .apply_scheme =3D damon_pa_apply_scheme, .get_scheme_score =3D damon_pa_scheme_score, --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 332713B8131; Tue, 12 May 2026 14:37:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596621; cv=none; b=WTEMuWEf0QsnqJDp0ZMIU6r1KxOXVIbc8nQT1er6zZ9PNoF0TwAM/N97WGHu96ylmE6CwWRJlRpnw2Wh6f7Nl3KTWptu64J4uqQPQA5w9cBPgfgnx9UK39fyg2ChYn6hekktLeTCC98JDLr4yiRh87pGht9wBuhAEY65+3wrInY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596621; c=relaxed/simple; bh=MsWu2zyYAy4V2rgxAX8KgVIMloArlsZthg7SEALRXSU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=l4EG+YF/YbqZrYohyePP321STU7+tdzyh/cv7VqxPiklUBavud/gYV4CrdKIlpU6rzyNOjm+sJDQIZZgpNwxr1VWxLNySg4Mjkff4MbhYit1UdiXvufUNlVitFmpqyoHTLFuzGv1WrZzPxJ0aL8pcGHlHB0h/v/CTkkbeBA0TGM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=t6WNwwQv; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="t6WNwwQv" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D8147C2BCF7; Tue, 12 May 2026 14:37:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596621; bh=MsWu2zyYAy4V2rgxAX8KgVIMloArlsZthg7SEALRXSU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=t6WNwwQvGd4KqutwoIYQ2sBnmm/3oYmk78Mtm6HYhHckxSakRl4ARm0b7uwRfd/Ko v8Uv67OlLLlrEflPV7ZJiJ1MV/BofNocP6xoPRfR/xmHvzc+Pb2WKh9cDJZdqPUVeJ SusGM1c1eAfrXbLfEuhrqUCBwDYI02hqlbrgipo3Rwp1MNoQUEfwZjY2xuTJsqBGm3 uuL5uJ2iruOrcbPQkz4WT5mikUeF2dg4jVkBQpcegkKtrBuw3SYsK1rM4f/HUG153h n/E7SG/EFG1trclw1lyF+JBTwXNLIo1fNV2IpFJwo5t0k6siz97SValGPt9HPLE4gs +McRVtnOb/Xjw== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 09/28] mm/damon/sysfs: implement probes dir Date: Tue, 12 May 2026 07:36:24 -0700 Message-ID: <20260512143645.113201-10-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Implement sysfs directory that can be used by the users to install data probes. Signed-off-by: SeongJae Park --- mm/damon/sysfs.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c index d5863cc33d230..ccd19fc062f31 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -747,6 +747,35 @@ static const struct kobj_type damon_sysfs_intervals_kt= ype =3D { .default_groups =3D damon_sysfs_intervals_groups, }; =20 +/* + * probes directory + */ + +struct damon_sysfs_probes { + struct kobject kobj; +}; + +static struct damon_sysfs_probes *damon_sysfs_probes_alloc(void) +{ + return kzalloc_obj(struct damon_sysfs_probes); +} + +static void damon_sysfs_probes_release(struct kobject *kobj) +{ + kfree(container_of(kobj, struct damon_sysfs_probes, kobj)); +} + +static struct attribute *damon_sysfs_probes_attrs[] =3D { + NULL, +}; +ATTRIBUTE_GROUPS(damon_sysfs_probes); + +static const struct kobj_type damon_sysfs_probes_ktype =3D { + .release =3D damon_sysfs_probes_release, + .sysfs_ops =3D &kobj_sysfs_ops, + .default_groups =3D damon_sysfs_probes_groups, +}; + /* * monitoring_attrs directory */ @@ -755,6 +784,7 @@ struct damon_sysfs_attrs { struct kobject kobj; struct damon_sysfs_intervals *intervals; struct damon_sysfs_ul_range *nr_regions_range; + struct damon_sysfs_probes *probes; }; =20 static struct damon_sysfs_attrs *damon_sysfs_attrs_alloc(void) @@ -771,6 +801,7 @@ static int damon_sysfs_attrs_add_dirs(struct damon_sysf= s_attrs *attrs) { struct damon_sysfs_intervals *intervals; struct damon_sysfs_ul_range *nr_regions_range; + struct damon_sysfs_probes *probes; int err; =20 intervals =3D damon_sysfs_intervals_alloc(5000, 100000, 60000000); @@ -799,8 +830,22 @@ static int damon_sysfs_attrs_add_dirs(struct damon_sys= fs_attrs *attrs) if (err) goto put_nr_regions_intervals_out; attrs->nr_regions_range =3D nr_regions_range; + + probes =3D damon_sysfs_probes_alloc(); + if (!probes) { + err =3D -ENOMEM; + goto put_nr_regions_intervals_out; + } + err =3D kobject_init_and_add(&probes->kobj, + &damon_sysfs_probes_ktype, &attrs->kobj, "probes"); + if (err) + goto put_probes_out; + attrs->probes =3D probes; return 0; =20 +put_probes_out: + kobject_put(&probes->kobj); + attrs->probes =3D NULL; put_nr_regions_intervals_out: kobject_put(&nr_regions_range->kobj); attrs->nr_regions_range =3D NULL; @@ -817,6 +862,7 @@ static void damon_sysfs_attrs_rm_dirs(struct damon_sysf= s_attrs *attrs) kobject_put(&attrs->nr_regions_range->kobj); damon_sysfs_intervals_rm_dirs(attrs->intervals); kobject_put(&attrs->intervals->kobj); + kobject_put(&attrs->probes->kobj); } =20 static void damon_sysfs_attrs_release(struct kobject *kobj) --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 801573BFAD3; Tue, 12 May 2026 14:37:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596621; cv=none; b=GRIiP69asSNyz2Xft1Q6x4aYxDqHQl2w5GRnkKKp0yxehWPtZrvlne3JoF/eVEb5qTvXWP4La5lQ/smEi/xoWSIAobTdtogT4nN4ITajCmaVYSKQuhPzIaU+h3VzETgVMuPc7gBIYoAcsogorVCi66FXxgBbGIRtUKhCT9oWbx4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596621; c=relaxed/simple; bh=SZZB/8Y34d4c5OpPrN0Tt1+a+YDiqj7LFYZQ5Lka3iE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uO8mmGAFVpcsyQ4pcLe9vdoKwILEmlDbaOnECCSnBdseJwmKMPCHc/pLDeVe0JlsD2SbHgDItqsLhzirdqzKhEHM6jQuCl1jO6lF9On+A0ptB7sZfEEHbCMyXJkcXduj7EGpiJHzwfYRYniRN2Sr9yuHL2gbqmF/ybndMhPcaEI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Y0sv3yot; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Y0sv3yot" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3E078C2BCF6; Tue, 12 May 2026 14:37:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596621; bh=SZZB/8Y34d4c5OpPrN0Tt1+a+YDiqj7LFYZQ5Lka3iE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Y0sv3yotRwx8KtFM5xZjeSoYNFJ9drE6c6th8ir9S7Hu8QUHVRSv3C8r2Oxn+YvHN zg8+3L3byobrA6gvR/9ueyY5xOnJafXXNmAaDlSF2cGWkhaiq6SH6atl1yP0BD8pmA oSNNrVmA2BDyo0ZHfLqCTabMFwxmRyVS/TDQWIfP4AovGDX3m/U81OhKmGaNUdN73l oRNUHQG7ziEGukWVB6egNVPlp5ZY2/oKMMYx5XmQzbUf8ogdvTK58Swefojd5z3a8c Se2OwcYPYYDNwxw3rQg0QVMZb5EQp8eCH6SdkDEqXQADPaJHd8q+9swl98yNVQNwQM Fpxm3Gxti3xnw== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 10/28] mm/damon/sysfs: implement probe dir Date: Tue, 12 May 2026 07:36:25 -0700 Message-ID: <20260512143645.113201-11-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Implement sysfs directory for letting users install each data probe. Signed-off-by: SeongJae Park --- mm/damon/sysfs.c | 119 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c index ccd19fc062f31..fac4e37aa2851 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -747,12 +747,43 @@ static const struct kobj_type damon_sysfs_intervals_k= type =3D { .default_groups =3D damon_sysfs_intervals_groups, }; =20 +/* + * probe directory + */ + +struct damon_sysfs_probe { + struct kobject kobj; +}; + +static struct damon_sysfs_probe *damon_sysfs_probe_alloc(void) +{ + return kzalloc_obj(struct damon_sysfs_probe); +} + +static void damon_sysfs_probe_release(struct kobject *kobj) +{ + kfree(container_of(kobj, struct damon_sysfs_probe, kobj)); +} + +static struct attribute *damon_sysfs_probe_attrs[] =3D { + NULL, +}; +ATTRIBUTE_GROUPS(damon_sysfs_probe); + +const struct kobj_type damon_sysfs_probe_ktype =3D { + .release =3D damon_sysfs_probe_release, + .sysfs_ops =3D &kobj_sysfs_ops, + .default_groups =3D damon_sysfs_probe_groups, +}; + /* * probes directory */ =20 struct damon_sysfs_probes { struct kobject kobj; + struct damon_sysfs_probe **probes_arr; + int nr; }; =20 static struct damon_sysfs_probes *damon_sysfs_probes_alloc(void) @@ -760,12 +791,99 @@ static struct damon_sysfs_probes *damon_sysfs_probes_= alloc(void) return kzalloc_obj(struct damon_sysfs_probes); } =20 +static void damon_sysfs_probes_rm_dirs( + struct damon_sysfs_probes *probes) +{ + struct damon_sysfs_probe **probes_arr =3D probes->probes_arr; + int i; + + for (i =3D 0; i < probes->nr; i++) + kobject_put(&probes_arr[i]->kobj); + probes->nr =3D 0; + kfree(probes_arr); + probes->probes_arr =3D NULL; +} + +static int damon_sysfs_probes_add_dirs( + struct damon_sysfs_probes *probes, int nr_probes) +{ + struct damon_sysfs_probe **probes_arr, *probe; + int err, i; + + damon_sysfs_probes_rm_dirs(probes); + if (!nr_probes) + return 0; + + probes_arr =3D kmalloc_objs(*probes_arr, nr_probes, + GFP_KERNEL | __GFP_NOWARN); + if (!probes_arr) + return -ENOMEM; + probes->probes_arr =3D probes_arr; + + for (i =3D 0; i < nr_probes; i++) { + probe =3D damon_sysfs_probe_alloc(); + if (!probe) { + damon_sysfs_probes_rm_dirs(probes); + return -ENOMEM; + } + + err =3D kobject_init_and_add(&probe->kobj, + &damon_sysfs_probe_ktype, &probes->kobj, + "%d", i); + if (err) { + kobject_put(&probe->kobj); + damon_sysfs_probes_rm_dirs(probes); + return err; + } + + probes_arr[i] =3D probe; + probes->nr++; + } + return 0; +} + +static ssize_t nr_probes_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + struct damon_sysfs_probes *probes =3D container_of(kobj, + struct damon_sysfs_probes, kobj); + + return sysfs_emit(buf, "%d\n", probes->nr); +} + +static ssize_t nr_probes_store(struct kobject *kobj, + struct kobj_attribute *attr, const char *buf, size_t count) +{ + struct damon_sysfs_probes *probes; + int nr, err =3D kstrtoint(buf, 0, &nr); + + if (err) + return err; + if (nr < 0 || nr > DAMON_MAX_PROBES) + return -EINVAL; + + probes =3D container_of(kobj, struct damon_sysfs_probes, kobj); + + if (!mutex_trylock(&damon_sysfs_lock)) + return -EBUSY; + err =3D damon_sysfs_probes_add_dirs(probes, nr); + mutex_unlock(&damon_sysfs_lock); + if (err) + return err; + + return count; +} + static void damon_sysfs_probes_release(struct kobject *kobj) { kfree(container_of(kobj, struct damon_sysfs_probes, kobj)); } =20 +static struct kobj_attribute damon_sysfs_probes_nr_probes =3D + __ATTR_RW_MODE(nr_probes, 0600); + static struct attribute *damon_sysfs_probes_attrs[] =3D { + &damon_sysfs_probes_nr_probes.attr, NULL, }; ATTRIBUTE_GROUPS(damon_sysfs_probes); @@ -862,6 +980,7 @@ static void damon_sysfs_attrs_rm_dirs(struct damon_sysf= s_attrs *attrs) kobject_put(&attrs->nr_regions_range->kobj); damon_sysfs_intervals_rm_dirs(attrs->intervals); kobject_put(&attrs->intervals->kobj); + damon_sysfs_probes_rm_dirs(attrs->probes); kobject_put(&attrs->probes->kobj); } =20 --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 D463D3BFAF7; Tue, 12 May 2026 14:37:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596621; cv=none; b=eVml+8sKAfEsnXvSdXo/ifa5Y8zC+DhACIy5FNNDMHj21klFTgH0eusGCtdlEgmRCvSbypOPeVX71JtdOZt4s6s6FnouNK6Y8s6fXnGxpug02fPFcRGcvzlDE06HFc3/LwJFEz8kq772qIhB2AtkSw8DyHTolNyLND90Kd8EXSw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596621; c=relaxed/simple; bh=1X/9elsFEwb1GaGkMj7npSZAXZWCxyW00t9PKZHBG7M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VzLpuQldOs0OhrIhwN9NdlECJM9gqRzUCEcJZ2TueIHnpxMvTqOIqvlDyDcIl8m2JP4Q24qetin1BxV4mEi9n74Ylo7PAJ/N65RsqmueHMxui7ddFfI92/oTr5T/vWDvnB0RrOnyXyuR9glyzxmSpVggtv2X6sIrcypelu9u8Gk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=udB7T17M; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="udB7T17M" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8DE6FC2BD01; Tue, 12 May 2026 14:37:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596621; bh=1X/9elsFEwb1GaGkMj7npSZAXZWCxyW00t9PKZHBG7M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=udB7T17McUue+rBn6sKZSQ4RXr6c77fO3nYal8+9cDMnrXlNLerfBLGPKey1RpBj4 r1XTA7NmSs8cDOXDAYB1dTwetlEb+yA6SAjqvexxaFq2EQjTmEGlwJph+cNlzZrPKc Eb/g+Dk+kMZVh/rU8j/RLdj1S75SoI+by2on6uC6kvrGQphytTxYGBzYMZ+sbYV6cS H7IvQMpsHU6hnSH5zTt6ZamX5cinUmVl9jeNfO1zqoKvO67xKlva8iYeyO2C0w5i7U nydwrOiPH6cE6wMef7qAxwKX4GjZCpOBANyi3qFyZUCJ6ACHp3x+uqfYg/FVbojnes ojEbVsuP5ejhw== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 11/28] mm/damon/sysfs: implement filters directory Date: Tue, 12 May 2026 07:36:26 -0700 Message-ID: <20260512143645.113201-12-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Implement a directory for letting users to install data probe filters. Signed-off-by: SeongJae Park --- mm/damon/sysfs.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c index fac4e37aa2851..250208d3de21b 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -747,12 +747,42 @@ static const struct kobj_type damon_sysfs_intervals_k= type =3D { .default_groups =3D damon_sysfs_intervals_groups, }; =20 +/* + * filters directory + */ + +struct damon_sysfs_filters { + struct kobject kobj; +}; + +static struct damon_sysfs_filters *damon_sysfs_filters_alloc(void) +{ + return kzalloc_obj(struct damon_sysfs_filters); +} + +static void damon_sysfs_filters_release(struct kobject *kobj) +{ + kfree(container_of(kobj, struct damon_sysfs_filters, kobj)); +} + +static struct attribute *damon_sysfs_filters_attrs[] =3D { + NULL, +}; +ATTRIBUTE_GROUPS(damon_sysfs_filters); + +static const struct kobj_type damon_sysfs_filters_ktype =3D { + .release =3D damon_sysfs_filters_release, + .sysfs_ops =3D &kobj_sysfs_ops, + .default_groups =3D damon_sysfs_filters_groups, +}; + /* * probe directory */ =20 struct damon_sysfs_probe { struct kobject kobj; + struct damon_sysfs_filters *filters; }; =20 static struct damon_sysfs_probe *damon_sysfs_probe_alloc(void) @@ -760,6 +790,30 @@ static struct damon_sysfs_probe *damon_sysfs_probe_all= oc(void) return kzalloc_obj(struct damon_sysfs_probe); } =20 +static int damon_sysfs_probe_add_dirs(struct damon_sysfs_probe *attr) +{ + struct damon_sysfs_filters *filters; + int err; + + filters =3D damon_sysfs_filters_alloc(); + if (!filters) + return -ENOMEM; + attr->filters =3D filters; + + err =3D kobject_init_and_add(&filters->kobj, &damon_sysfs_filters_ktype, + &attr->kobj, "filters"); + if (err) { + kobject_put(&filters->kobj); + attr->filters =3D NULL; + } + return err; +} + +static void damon_sysfs_probe_rm_dirs(struct damon_sysfs_probe *attr) +{ + kobject_put(&attr->filters->kobj); +} + static void damon_sysfs_probe_release(struct kobject *kobj) { kfree(container_of(kobj, struct damon_sysfs_probe, kobj)); @@ -797,8 +851,10 @@ static void damon_sysfs_probes_rm_dirs( struct damon_sysfs_probe **probes_arr =3D probes->probes_arr; int i; =20 - for (i =3D 0; i < probes->nr; i++) + for (i =3D 0; i < probes->nr; i++) { + damon_sysfs_probe_rm_dirs(probes_arr[i]); kobject_put(&probes_arr[i]->kobj); + } probes->nr =3D 0; kfree(probes_arr); probes->probes_arr =3D NULL; @@ -836,6 +892,13 @@ static int damon_sysfs_probes_add_dirs( return err; } =20 + err =3D damon_sysfs_probe_add_dirs(probe); + if (err) { + kobject_put(&probe->kobj); + damon_sysfs_probes_rm_dirs(probes); + return err; + } + probes_arr[i] =3D probe; probes->nr++; } --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 306D53C1F46; Tue, 12 May 2026 14:37:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596622; cv=none; b=eUWixWhFAS7vJR7Iw7fNnyyGmsacg+FJrKhZfqUnmAGV+quW9i7ya+G7l3E4wWI7Tckoekpvg/fbTOuJRlBbp3LdAEtGd/opR0asOYhaZjS9I6QFSeHhqKxaa2Zsu+A69mv0ASkJJbSKeRi7Ts7+SCmkaAUX7E9ED9y1/4fGK9E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596622; c=relaxed/simple; bh=RwyqlL/z+o4fkUQKNxBQap95FJCMMs79UsQe2MpywvU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=J22D7KePcEbQHckz9CuRhW9rRz+PgLrnyH1De35IppPdYKzP5zmtpm9zYlSjd1TlESYpKrmZnAOSYdWHEp1LTlzK+DHdeSKWHlr4lUKuWvDnQxuYNcW10lDDyuLcvWsR4AP7C+rjBW+xvlOntYn9FhSCWanloG2tzLDusbKu9CU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=b/XK5Jtl; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="b/XK5Jtl" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DECBBC2BCFB; Tue, 12 May 2026 14:37:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596622; bh=RwyqlL/z+o4fkUQKNxBQap95FJCMMs79UsQe2MpywvU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=b/XK5JtlGn+52Yv82k+WEkwFLcnORxusI4YBrtpmc5BF0eR3NytVfJmuX1JTFGeyd HvM6kR5K0ixZCPSfyYK3JTLjLj9vowAB3Ypmde9SYbbOvhntcL0RBKKWYkFtaK3Ub+ lMOlzeXlXJaaRnxzPrFwGej41J2C/QHc5WKwOxCTa5SXbtJcSi1kKCu14duJi1rMY1 061pgfBN/c9ILZx4U9k5B1hbocrfeEtK9wahB0eob9v0CtvZ3CLw50UJDXHhDsWcVu /IPyd8ZJcFDBxpGRPoMeimdlU+4MNuWDWo6Xr0MA7Ji2xR3sU/G/zVJ3JQCMojozqt fsCC3bSWFp4Rg== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 12/28] mm/damon/sysfs: implement filter dir Date: Tue, 12 May 2026 07:36:27 -0700 Message-ID: <20260512143645.113201-13-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Implement a sysfs directory for letting the users to configure each data probe filter. Signed-off-by: SeongJae Park --- mm/damon/sysfs.c | 125 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 124 insertions(+), 1 deletion(-) diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c index 250208d3de21b..25487a0268cbe 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -747,12 +747,46 @@ static const struct kobj_type damon_sysfs_intervals_k= type =3D { .default_groups =3D damon_sysfs_intervals_groups, }; =20 +/* + * filter directory + */ + +struct damon_sysfs_filter { + struct kobject kobj; +}; + +static struct damon_sysfs_filter *damon_sysfs_filter_alloc(void) +{ + return kzalloc_obj(struct damon_sysfs_filter); +} + +static void damon_sysfs_filter_release(struct kobject *kobj) +{ + struct damon_sysfs_filter *filter =3D container_of(kobj, + struct damon_sysfs_filter, kobj); + + kfree(filter); +} + +static struct attribute *damon_sysfs_filter_attrs[] =3D { + NULL, +}; +ATTRIBUTE_GROUPS(damon_sysfs_filter); + +static const struct kobj_type damon_sysfs_filter_ktype =3D { + .release =3D damon_sysfs_filter_release, + .sysfs_ops =3D &kobj_sysfs_ops, + .default_groups =3D damon_sysfs_filter_groups, +}; + /* * filters directory */ =20 struct damon_sysfs_filters { struct kobject kobj; + struct damon_sysfs_filter **filters_arr; + int nr; }; =20 static struct damon_sysfs_filters *damon_sysfs_filters_alloc(void) @@ -760,12 +794,98 @@ static struct damon_sysfs_filters *damon_sysfs_filter= s_alloc(void) return kzalloc_obj(struct damon_sysfs_filters); } =20 +static void damon_sysfs_filters_rm_dirs(struct damon_sysfs_filters *filter= s) +{ + struct damon_sysfs_filter **filters_arr =3D filters->filters_arr; + int i; + + for (i =3D 0; i < filters->nr; i++) + kobject_put(&filters_arr[i]->kobj); + filters->nr =3D 0; + kfree(filters_arr); + filters->filters_arr =3D NULL; +} + +static int damon_sysfs_filters_add_dirs( + struct damon_sysfs_filters *filters, int nr_filters) +{ + struct damon_sysfs_filter **filters_arr, *filter; + int err, i; + + damon_sysfs_filters_rm_dirs(filters); + if (!nr_filters) + return 0; + + filters_arr =3D kmalloc_objs(*filters_arr, nr_filters, + GFP_KERNEL | __GFP_NOWARN); + if (!filters_arr) + return -ENOMEM; + filters->filters_arr =3D filters_arr; + + for (i =3D 0; i < nr_filters; i++) { + filter =3D damon_sysfs_filter_alloc(); + if (!filter) { + damon_sysfs_filters_rm_dirs(filters); + return -ENOMEM; + } + + err =3D kobject_init_and_add(&filter->kobj, + &damon_sysfs_filter_ktype, &filters->kobj, + "%d", i); + if (err) { + kobject_put(&filter->kobj); + damon_sysfs_filters_rm_dirs(filters); + return err; + } + + filters_arr[i] =3D filter; + filters->nr++; + } + return 0; +} + +static ssize_t nr_filters_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + struct damon_sysfs_filters *filters =3D container_of(kobj, + struct damon_sysfs_filters, kobj); + + return sysfs_emit(buf, "%d\n", filters->nr); +} + +static ssize_t nr_filters_store(struct kobject *kobj, + struct kobj_attribute *attr, const char *buf, size_t count) +{ + struct damon_sysfs_filters *filters; + int nr, err =3D kstrtoint(buf, 0, &nr); + + if (err) + return err; + if (nr < 0) + return -EINVAL; + + filters =3D container_of(kobj, struct damon_sysfs_filters, kobj); + + if (!mutex_trylock(&damon_sysfs_lock)) + return -EBUSY; + err =3D damon_sysfs_filters_add_dirs(filters, nr); + mutex_unlock(&damon_sysfs_lock); + if (err) + return err; + + return count; +} + static void damon_sysfs_filters_release(struct kobject *kobj) { kfree(container_of(kobj, struct damon_sysfs_filters, kobj)); } =20 +static struct kobj_attribute damon_sysfs_filters_nr_attr =3D + __ATTR_RW_MODE(nr_filters, 0600); + static struct attribute *damon_sysfs_filters_attrs[] =3D { + &damon_sysfs_filters_nr_attr.attr, NULL, }; ATTRIBUTE_GROUPS(damon_sysfs_filters); @@ -811,7 +931,10 @@ static int damon_sysfs_probe_add_dirs(struct damon_sys= fs_probe *attr) =20 static void damon_sysfs_probe_rm_dirs(struct damon_sysfs_probe *attr) { - kobject_put(&attr->filters->kobj); + if (attr->filters) { + damon_sysfs_filters_rm_dirs(attr->filters); + kobject_put(&attr->filters->kobj); + } } =20 static void damon_sysfs_probe_release(struct kobject *kobj) --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 8F0C13C2B8C; Tue, 12 May 2026 14:37:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596622; cv=none; b=NYylMXBekkjaVr6i2rsLKKOmeL49MRkPuF4DrRBau0nRx9CVLyiofH4Mxj/2DN4uMjf/5vgDinI6o6djMLdWYbnxDhWV2jyrH6iKIW/mC0BblxUAcmaoeXuIuFNKgdFjSc7kAfAbEdNu3iLPsw9+M0O8lk04FfKTIdufOtn3iSk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596622; c=relaxed/simple; bh=xxAnM/x521/ipQQKxInfDno6KUEv3MR4zVVk+LBGBIk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=etTmn7EReuwQJjExHLzOXeKz+OG2yXNogFjYjb9ysbcnUZlpHa+3gq+K0VdI/MeyV4ZTEqZJI/B1BuGRzhXSwn+IoLsJByhQi7GZOPL00jM/7XIkYssmtZeWqMQfF2OslTYaxNG0/jdGxffK83o0MtxX+w+baaE9zIqudsJ3QcY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=SHMVRwn/; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="SHMVRwn/" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 429F6C2BCF7; Tue, 12 May 2026 14:37:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596622; bh=xxAnM/x521/ipQQKxInfDno6KUEv3MR4zVVk+LBGBIk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SHMVRwn/Zeq/e9kwvzPieilOrUAThIlto2cdeb1Wer75RXW9pVv2dxib7XoLbdgc5 uIpXH5vn+w6f32RZ5L3CAGnggs7C2n9ETWUc5zS0bLVydTu0Tr/Ur85iyS5LShlX01 mOOWrGz3izK4JkIh1JUioFtrExhQswzF+HgGD01eH/uhAaFW6amHiISOW9fTrRVh6C sN6IdHSZ6oyr1zRnw394QDRqbn3a3MtgR4f64evB41gS39KxxIDm0qXyk8acpqiuS5 LTRZ+Av0JPyydd9OeE1QdmMCX3re8QTLuYkPN0SZwJVtsefkNSfwFjAWGNEjQUhctM Mb30YvG80/3/g== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 13/28] mm/damon/sysfs: implement filter dir files Date: Tue, 12 May 2026 07:36:28 -0700 Message-ID: <20260512143645.113201-14-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Implement sysfs files under the data probe filter directory for letting users to configure each filter. Signed-off-by: SeongJae Park --- mm/damon/sysfs.c | 114 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c index 25487a0268cbe..ed7bb734a236b 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -753,6 +753,9 @@ static const struct kobj_type damon_sysfs_intervals_kty= pe =3D { =20 struct damon_sysfs_filter { struct kobject kobj; + enum damon_filter_type type; + bool matching; + bool allow; }; =20 static struct damon_sysfs_filter *damon_sysfs_filter_alloc(void) @@ -760,6 +763,105 @@ static struct damon_sysfs_filter *damon_sysfs_filter_= alloc(void) return kzalloc_obj(struct damon_sysfs_filter); } =20 +struct damon_sysfs_filter_type_name { + enum damon_filter_type type; + char *name; +}; + +static const struct damon_sysfs_filter_type_name +damon_sysfs_filter_type_names[] =3D { + { + .type =3D DAMON_FILTER_TYPE_ANON, + .name =3D "anon", + }, +}; + +static ssize_t type_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + struct damon_sysfs_filter *filter =3D container_of(kobj, + struct damon_sysfs_filter, kobj); + int i; + + for (i =3D 0; i < ARRAY_SIZE(damon_sysfs_filter_type_names); i++) { + const struct damon_sysfs_filter_type_name *type_name; + + type_name =3D &damon_sysfs_filter_type_names[i]; + if (type_name->type =3D=3D filter->type) + return sysfs_emit(buf, "%s\n", type_name->name); + } + return -EINVAL; +} + +static ssize_t type_store(struct kobject *kobj, + struct kobj_attribute *attr, const char *buf, size_t count) +{ + struct damon_sysfs_filter *filter =3D container_of(kobj, + struct damon_sysfs_filter, kobj); + ssize_t ret =3D -EINVAL; + int i; + + for (i =3D 0; i < ARRAY_SIZE(damon_sysfs_filter_type_names); i++) { + const struct damon_sysfs_filter_type_name *type_name; + + type_name =3D &damon_sysfs_filter_type_names[i]; + if (sysfs_streq(buf, type_name->name)) { + filter->type =3D type_name->type; + ret =3D count; + break; + } + } + return ret; +} + +static ssize_t matching_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + struct damon_sysfs_filter *filter =3D container_of(kobj, + struct damon_sysfs_filter, kobj); + + return sysfs_emit(buf, "%c\n", filter->matching ? 'Y' : 'N'); +} + +static ssize_t matching_store(struct kobject *kobj, + struct kobj_attribute *attr, const char *buf, size_t count) +{ + struct damon_sysfs_filter *filter =3D container_of(kobj, + struct damon_sysfs_filter, kobj); + bool matching; + int err =3D kstrtobool(buf, &matching); + + if (err) + return err; + + filter->matching =3D matching; + return count; +} + +static ssize_t allow_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + struct damon_sysfs_filter *filter =3D container_of(kobj, + struct damon_sysfs_filter, kobj); + + return sysfs_emit(buf, "%c\n", filter->allow ? 'Y' : 'N'); +} + +static ssize_t allow_store(struct kobject *kobj, + struct kobj_attribute *attr, const char *buf, size_t count) +{ + struct damon_sysfs_filter *filter =3D container_of(kobj, + struct damon_sysfs_filter, kobj); + bool allow; + int err =3D kstrtobool(buf, &allow); + + if (err) + return err; + + filter->allow =3D allow; + return count; +} + static void damon_sysfs_filter_release(struct kobject *kobj) { struct damon_sysfs_filter *filter =3D container_of(kobj, @@ -768,7 +870,19 @@ static void damon_sysfs_filter_release(struct kobject = *kobj) kfree(filter); } =20 +static struct kobj_attribute damon_sysfs_filter_type_attr =3D + __ATTR_RW_MODE(type, 0600); + +static struct kobj_attribute damon_sysfs_filter_matching_attr =3D + __ATTR_RW_MODE(matching, 0600); + +static struct kobj_attribute damon_sysfs_filter_allow_attr =3D + __ATTR_RW_MODE(allow, 0600); + static struct attribute *damon_sysfs_filter_attrs[] =3D { + &damon_sysfs_filter_type_attr.attr, + &damon_sysfs_filter_matching_attr.attr, + &damon_sysfs_filter_allow_attr.attr, NULL, }; ATTRIBUTE_GROUPS(damon_sysfs_filter); --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 DD8213C2BB9; Tue, 12 May 2026 14:37:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596623; cv=none; b=eA5br2uy7Tk8IAxI6lGnoT9Nw2Vb8m2c2LWYrVLGJ8XcAZc2g5k8Eq0nHhjCZCkx8Hm/4C60g46JD8g+R5JxptqfZixFV8915jTq8jOhREcHg1PzA4HGm38AuLxm0GCCyeIKTWSO8hp6aAttDaH0JpDIL3R5wy2t/c7ZO8LDgmw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596623; c=relaxed/simple; bh=zKIsD2XzT0n1kqH382+eAnv1kjGpY3pJ2uKfaHDPajo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=E1b4vSZ2NGBcK9bT542LiB2LvFLYK8D1F4xheesSJdfNDR1wbRDgh16T5u/GXX2d6X0aQF5+EKXO76CQSdgGP0NkNMD73ShxxkflKayGMpEh5eEhv2WxFZ8DRAG9tkykAsJXHNJjX/Lfz2yr+TlaAujBvzmxJ6tBGS11tr3gnDM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kkxKTfbE; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="kkxKTfbE" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 94E30C2BD04; Tue, 12 May 2026 14:37:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596622; bh=zKIsD2XzT0n1kqH382+eAnv1kjGpY3pJ2uKfaHDPajo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kkxKTfbEGdR12BcEFjd8QaEFjwCBGpqhwHJ+e0n6xuObobVTgDrPTD+XrPEY7ZG9I wC4T98O4CwDSXie8I8b9AdXv1C7wq2iKFzjRHfgJiThE3yX/m0hSAodjE64xRePwWO Nvi4ZvHGS6Puu31DfzmilaD2i80BAkr6GlA3odf0o7sw8pC8qjxJY7fcb2nzN3koAs OuJrVx+tRwUDFCvu0fjeh4oPDrfiU+d8c90aIS+3Gt6ie/rJ65kZBXqa1ZWns/7lYv oWVHJb8QGkouXMZr10Ak1SsGXvHMC8CYcYRyCw9Rk3fzVXk1MKHan5FxaxSouVpRH8 7l117rTFnQoZQ== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 14/28] mm/damon/sysfs: setup probes on DAMON core API parameters Date: Tue, 12 May 2026 07:36:29 -0700 Message-ID: <20260512143645.113201-15-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Add user-installed data probes to DAMON core API parameters, so that user inputs for data probes are passed to DAMON core. Signed-off-by: SeongJae Park --- mm/damon/sysfs.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c index ed7bb734a236b..e4dbf85feadc2 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -1855,6 +1855,40 @@ static int damon_sysfs_set_attrs(struct damon_ctx *c= tx, return damon_set_attrs(ctx, &attrs); } =20 +static int damon_sysfs_set_probes(struct damon_ctx *ctx, + struct damon_sysfs_probes *sys_probes) +{ + int i; + + for (i =3D 0; i < sys_probes->nr; i++) { + struct damon_sysfs_filters *sys_filters =3D + sys_probes->probes_arr[i]->filters; + struct damon_probe *c; + int j; + + if (!sys_filters) + continue; + c =3D damon_new_probe(); + if (!c) + return -ENOMEM; + damon_add_probe(ctx, c); + + for (j =3D 0; j < sys_filters->nr; j++) { + struct damon_sysfs_filter *sys_filter =3D + sys_filters->filters_arr[j]; + struct damon_filter *filter; + + filter =3D damon_new_filter(sys_filter->type, + sys_filter->matching, + sys_filter->allow); + if (!filter) + return -ENOMEM; + damon_add_filter(c, filter); + } + } + return 0; +} + static int damon_sysfs_set_regions(struct damon_target *t, struct damon_sysfs_regions *sysfs_regions, unsigned long min_region_sz) @@ -1967,6 +2001,9 @@ static int damon_sysfs_apply_inputs(struct damon_ctx = *ctx, DAMON_MIN_REGION_SZ / sys_ctx->addr_unit, 1); ctx->pause =3D sys_ctx->pause; err =3D damon_sysfs_set_attrs(ctx, sys_ctx->attrs); + if (err) + return err; + err =3D damon_sysfs_set_probes(ctx, sys_ctx->attrs->probes); if (err) return err; err =3D damon_sysfs_add_targets(ctx, sys_ctx->targets); --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 44B5F3C37A4; Tue, 12 May 2026 14:37:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596623; cv=none; b=AScfOyAzB0HImec9TOOUc4n4wfKOQq3DQWtWR7P3fyl0gxhkjLZD6leseM6d1nLOAsy0w7lUJl8JuAfz7/4VAYjJAoHJqapnDCeU6ggckACUfx8l+4o1wCmWrxBOw+C+QcBGzv3+MqOPFLGFlS+lP0qU0+GxBFVSmmLE5IYgQVU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596623; c=relaxed/simple; bh=9wtcGKd2TuBKZzqqapx90lRnyNtTZA2HcxLo0K3VUw8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FcUSKngwKHwvaX29roN5Tvp7cjM6eQ8dpZI5ck9Yr4hVuBz3t/0DpHv+JApxKIgP1+TPSoVskJW9ggjzzdzvoo5m2a3pDteV+8Su1PvZaepa1lhVyILuxJcY+BlQ/jibpTt5YIjmGc/3q6WQF4Sl5BgD94xIiYBYmE0YPHLgLgg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=H2Y4UCes; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="H2Y4UCes" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E7049C2BCFA; Tue, 12 May 2026 14:37:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596623; bh=9wtcGKd2TuBKZzqqapx90lRnyNtTZA2HcxLo0K3VUw8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=H2Y4UCesOy+wGS0CfoGDjUOwM9unW/5gtT+8MjUcQMjvBOCdeXJijU4KYWHX3fjRL 8ldeztL79sTfhJjpR9WET45TZhiY1XDl5YIx+1GXRP2hhjkt7YTGnjZv/7+U4yjM7T 6VudPGcxRF7Wy+2eM0/t+v0a9AU7PFD9PWKD+UzhpeEvU9JMyqgKYY+TZ8NRBzhPyD k+qxrPis8998X5cl4z6ZfX10p7/NlZS6Gona85BoJWHQZ/9LyIomYG95WwlJoVItnc 7Mh5WSkZWdyo6EU1xthtq+oRpb9MT0BABr7WHaXFvUs5pfrGh4Gm/ao9ollbCm8eDb tEYbOq7lYhYhg== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 15/28] mm/damon/sysfs-schemes: implement tried_regions//probes/ Date: Tue, 12 May 2026 07:36:30 -0700 Message-ID: <20260512143645.113201-16-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Implement a sysfs directory for showing the per-region probe hit counts. It is named 'probes/' and located under the DAMOS tried region directory. Signed-off-by: SeongJae Park --- mm/damon/sysfs-schemes.c | 65 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 3 deletions(-) diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index 5d966ac864193..b2dcbdf1840e4 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -10,6 +10,32 @@ =20 #include "sysfs-common.h" =20 +/* + * probes directory + */ + +struct damos_sysfs_probes { + struct kobject kobj; +}; + +static struct damos_sysfs_probes *damos_sysfs_probes_alloc(void) +{ + return kzalloc_obj(struct damos_sysfs_probes); +} + +static void damos_sysfs_probes_release(struct kobject *kobj) +{ + struct damos_sysfs_probes *probes =3D container_of(kobj, + struct damos_sysfs_probes, kobj); + + kfree(probes); +} + +static const struct kobj_type damos_sysfs_probes_ktype =3D { + .release =3D damos_sysfs_probes_release, + .sysfs_ops =3D &kobj_sysfs_ops, +}; + /* * scheme region directory */ @@ -20,6 +46,7 @@ struct damon_sysfs_scheme_region { unsigned int nr_accesses; unsigned int age; unsigned long sz_filter_passed; + struct damos_sysfs_probes *probes; struct list_head list; }; =20 @@ -34,10 +61,36 @@ static struct damon_sysfs_scheme_region *damon_sysfs_sc= heme_region_alloc( sysfs_region->ar =3D region->ar; sysfs_region->nr_accesses =3D region->nr_accesses_bp / 10000; sysfs_region->age =3D region->age; + sysfs_region->probes =3D NULL; INIT_LIST_HEAD(&sysfs_region->list); return sysfs_region; } =20 +static int damos_sysfs_region_add_dirs( + struct damon_sysfs_scheme_region *region) +{ + struct damos_sysfs_probes *probes =3D damos_sysfs_probes_alloc(); + int err; + + if (!probes) + return -ENOMEM; + err =3D kobject_init_and_add(&probes->kobj, &damos_sysfs_probes_ktype, + ®ion->kobj, "probes"); + if (err) { + kobject_put(&probes->kobj); + return err; + } + + region->probes =3D probes; + return 0; +} + +static void damos_sysfs_region_rm_dirs( + struct damon_sysfs_scheme_region *region) +{ + kobject_put(®ion->probes->kobj); +} + static ssize_t start_show(struct kobject *kobj, struct kobj_attribute *att= r, char *buf) { @@ -165,6 +218,7 @@ static void damon_sysfs_scheme_regions_rm_dirs( =20 list_for_each_entry_safe(r, next, ®ions->regions_list, list) { /* release function deletes it from the list */ + damos_sysfs_region_rm_dirs(r); kobject_put(&r->kobj); regions->nr_regions--; } @@ -2998,9 +3052,14 @@ void damos_sysfs_populate_region_dir(struct damon_sy= sfs_schemes *sysfs_schemes, if (kobject_init_and_add(®ion->kobj, &damon_sysfs_scheme_region_ktype, &sysfs_regions->kobj, "%d", - sysfs_regions->nr_regions)) { - kobject_put(®ion->kobj); - } + sysfs_regions->nr_regions)) + goto out; + if (damos_sysfs_region_add_dirs(region)) + goto out; + return; + +out: + kobject_put(®ion->kobj); } =20 int damon_sysfs_schemes_clear_regions( --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 8F9733C415B; Tue, 12 May 2026 14:37:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596623; cv=none; b=doj/HJepPqV9NOfolULKtm+8kw8jATV3fKjTzLU5CKoc2DMZlzOCG0oo+FdaI9U++cpuRJFia1ozDpT/qjDQUNBRc20b9+oqWuoexFNnbubHk5UFDQuA1vp3MHbCyvRevy/D5I6i99xs/D/nrk0H7UJ5gYnp6cphGygQqGnj/qA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596623; c=relaxed/simple; bh=TC56CsSb/enHtMc5P6wnTRbCZbDbhhiRuOMQ+HlenHM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=anB3bHJUrtSDbVuTk4tJAaPr63N8ZCG7rMEDU0Xtlg5jzWvYTRx89LpGaenhtvK2ArKASBuhgGfEqyGS6rAdTyCL3w2vzLog8HLHOr5HgHnP/jDPMlNayxldywCD5KZm2SYS5Asfeo6OJo2ujDHVKifLrOUWXlq6jcRt0HRsle0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=CyMgSyua; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="CyMgSyua" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 47AE4C2BCF7; Tue, 12 May 2026 14:37:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596623; bh=TC56CsSb/enHtMc5P6wnTRbCZbDbhhiRuOMQ+HlenHM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CyMgSyuaR+Dqi3/VepjfWdFo15Kk5zbPgy/fMmKJFbS8jSYnhLPqkoejsBCUY1YPl q0aUfb8AnuXqI2h57l4/XgjvgsE7zbw6iN7bO2AxS27T9I9w88PUPiEgPvXMGpg4Vm c0o4sK74Oia7MbFr/nq+3RQiDHo0Pc7pqVsnHXR+Nua7hjJVjIODwXZ0vE6JUKmicr FgEdyF8Ot2baM0DnkApa4/eoXIXBe3AFMOqdsbvHZyMgNTKmjUvO1quQNI7I2NIYT/ EzJ2oR1h6zaw5d1ePflhA71KYmLPNQoraZcavp5vz9xoCDhMTfmoI2iYciU3mNGx1Y SNBx9wmYarKWw== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 16/28] mm/damon/sysfs-schemes: implement probe dir Date: Tue, 12 May 2026 07:36:31 -0700 Message-ID: <20260512143645.113201-17-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Implement sysfs directory for showing per-probe hits count of each region. Signed-off-by: SeongJae Park --- mm/damon/sysfs-schemes.c | 101 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 95 insertions(+), 6 deletions(-) diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index b2dcbdf1840e4..91d6ddcf1b32d 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -10,12 +10,40 @@ =20 #include "sysfs-common.h" =20 +/* + * probe directory + */ + +struct damos_sysfs_probe { + struct kobject kobj; +}; + +static struct damos_sysfs_probe *damos_sysfs_probe_alloc(void) +{ + return kzalloc_obj(struct damos_sysfs_probe); +} + +static void damos_sysfs_probe_release(struct kobject *kobj) +{ + struct damos_sysfs_probe *probe =3D container_of(kobj, + struct damos_sysfs_probe, kobj); + + kfree(probe); +} + +static const struct kobj_type damos_sysfs_probe_ktype =3D { + .release =3D damos_sysfs_probe_release, + .sysfs_ops =3D &kobj_sysfs_ops, +}; + /* * probes directory */ =20 struct damos_sysfs_probes { struct kobject kobj; + struct damos_sysfs_probe **probes_arr; + int nr; }; =20 static struct damos_sysfs_probes *damos_sysfs_probes_alloc(void) @@ -23,6 +51,60 @@ static struct damos_sysfs_probes *damos_sysfs_probes_all= oc(void) return kzalloc_obj(struct damos_sysfs_probes); } =20 +static void damos_sysfs_probes_rm_dirs(struct damos_sysfs_probes *probes) +{ + struct damos_sysfs_probe **probes_arr =3D probes->probes_arr; + int i; + + for (i =3D 0; i < probes->nr; i++) + kobject_put(&probes_arr[i]->kobj); + probes->nr =3D 0; + kfree(probes_arr); + probes->probes_arr =3D NULL; +} + +static int damos_sysfs_probes_add_dirs(struct damos_sysfs_probes *probes, + struct damon_ctx *ctx) +{ + struct damon_probe *probe; + struct damos_sysfs_probe **probes_arr; + int i =3D 0; + + damon_for_each_probe(probe, ctx) + i++; + + if (!i) + return 0; + + probes_arr =3D kmalloc_objs(*probes_arr, i); + if (!probes_arr) + return -ENOMEM; + probes->probes_arr =3D probes_arr; + + i =3D 0; + damon_for_each_probe(probe, ctx) { + struct damos_sysfs_probe *sys_probe; + int err; + + sys_probe =3D damos_sysfs_probe_alloc(); + if (!sys_probe) { + damos_sysfs_probes_rm_dirs(probes); + return -ENOMEM; + } + err =3D kobject_init_and_add(&sys_probe->kobj, + &damos_sysfs_probe_ktype, &probes->kobj, "%d", + i); + if (err) { + kobject_put(&sys_probe->kobj); + damos_sysfs_probes_rm_dirs(probes); + return err; + } + probes_arr[i++] =3D sys_probe; + probes->nr++; + } + return 0; +} + static void damos_sysfs_probes_release(struct kobject *kobj) { struct damos_sysfs_probes *probes =3D container_of(kobj, @@ -67,7 +149,8 @@ static struct damon_sysfs_scheme_region *damon_sysfs_sch= eme_region_alloc( } =20 static int damos_sysfs_region_add_dirs( - struct damon_sysfs_scheme_region *region) + struct damon_sysfs_scheme_region *region, + struct damon_ctx *ctx) { struct damos_sysfs_probes *probes =3D damos_sysfs_probes_alloc(); int err; @@ -76,18 +159,24 @@ static int damos_sysfs_region_add_dirs( return -ENOMEM; err =3D kobject_init_and_add(&probes->kobj, &damos_sysfs_probes_ktype, ®ion->kobj, "probes"); - if (err) { - kobject_put(&probes->kobj); - return err; - } + if (err) + goto fail; + err =3D damos_sysfs_probes_add_dirs(probes, ctx); + if (err) + goto fail; =20 region->probes =3D probes; return 0; + +fail: + kobject_put(&probes->kobj); + return err; } =20 static void damos_sysfs_region_rm_dirs( struct damon_sysfs_scheme_region *region) { + damos_sysfs_probes_rm_dirs(region->probes); kobject_put(®ion->probes->kobj); } =20 @@ -3054,7 +3143,7 @@ void damos_sysfs_populate_region_dir(struct damon_sys= fs_schemes *sysfs_schemes, &sysfs_regions->kobj, "%d", sysfs_regions->nr_regions)) goto out; - if (damos_sysfs_region_add_dirs(region)) + if (damos_sysfs_region_add_dirs(region, ctx)) goto out; return; =20 --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 EA24C3C4B68; Tue, 12 May 2026 14:37:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596624; cv=none; b=XQZ1IkrsaWVJzFFcla7PfGPfygkDuNqtxqvzHnR0m7Z3qbPwHlJomzI2AjnCA9utNlyUS0Uldecw+yXMjX/XO1PENxmjCj1h1BWqV4b3FuYDJfy3vpciW+hi5pJBwAdjcxo9WPDbbSTBZIgxxR0jZkgYv0WFXm3wUcFHrgBxpUo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596624; c=relaxed/simple; bh=89p7VKEE57qMrXeaBH1JYG+SiM8t+cBg5/D++ThSauo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aY1UmqYpb/mZHg5SsXsJ3Mwy0uGxZZjBTeonUdd9FP08oSt7UM5GVi4M/puqPANtbhVSmoa6xYNwiY8S7WVqeMvDD+CsS1hvrNEX1OWDL2Ds38QeHKhROf1TDHH4ZJVI/CZj0UJVIhYrPHouG8IRwJrYNlQHM2iJZ3bstK/QLg0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JP1u2VxR; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="JP1u2VxR" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 98D44C2BCFA; Tue, 12 May 2026 14:37:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596623; bh=89p7VKEE57qMrXeaBH1JYG+SiM8t+cBg5/D++ThSauo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JP1u2VxRyoXl5WrUPagJC9d9rn8nyHY8H4jDSwk1qH+qEKcY/q4QSCXDTq7ct/VcV APhVghtuetxSJFrgQiNkwJ4KqddJFjPwAcuziaE1BA7GVKTuROIqJ339i38H+hDZxr Oz+t4IpQh6YpiTa5HHddBqV/N3y2IDNCJWUaCO9PBlvdRpe7bO8zAQQ5oyEyIfd5sf DHn4iIq78MV3mwpepwc+QWt/yxclCYyn1rdeSArUdI4Dlzz0VmiWNtGdL/6Hllg6yp MkYgU352Ae+bdWw5mYyHZoJYfGldeLVIpmLt7rU5IfF7+oU0G1JBlSjsa1MEOC39c5 ENh3RK6oPEzVg== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 17/28] mm/damon/sysfs-schemes: implement probe/hits file Date: Tue, 12 May 2026 07:36:32 -0700 Message-ID: <20260512143645.113201-18-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Implement sysfs file for showing the per-region per-probe hits count. Signed-off-by: SeongJae Park --- mm/damon/sysfs-schemes.c | 41 +++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index 91d6ddcf1b32d..43a8224d991e8 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -16,11 +16,27 @@ =20 struct damos_sysfs_probe { struct kobject kobj; + unsigned char hits; }; =20 -static struct damos_sysfs_probe *damos_sysfs_probe_alloc(void) +static struct damos_sysfs_probe *damos_sysfs_probe_alloc(unsigned char hit= s) { - return kzalloc_obj(struct damos_sysfs_probe); + struct damos_sysfs_probe *probe; + + probe =3D kzalloc_obj(*probe); + if (!probe) + return NULL; + probe->hits =3D hits; + return probe; +} + +static ssize_t hits_show(struct kobject *kobj, struct kobj_attribute *attr, + char *buf) +{ + struct damos_sysfs_probe *probe =3D container_of(kobj, + struct damos_sysfs_probe, kobj); + + return sysfs_emit(buf, "%hhu\n", probe->hits); } =20 static void damos_sysfs_probe_release(struct kobject *kobj) @@ -31,9 +47,19 @@ static void damos_sysfs_probe_release(struct kobject *ko= bj) kfree(probe); } =20 +static struct kobj_attribute damos_sysfs_probe_hits_attr =3D + __ATTR_RO_MODE(hits, 0400); + +static struct attribute *damos_sysfs_probe_attrs[] =3D { + &damos_sysfs_probe_hits_attr.attr, + NULL, +}; +ATTRIBUTE_GROUPS(damos_sysfs_probe); + static const struct kobj_type damos_sysfs_probe_ktype =3D { .release =3D damos_sysfs_probe_release, .sysfs_ops =3D &kobj_sysfs_ops, + .default_groups =3D damos_sysfs_probe_groups, }; =20 /* @@ -64,7 +90,7 @@ static void damos_sysfs_probes_rm_dirs(struct damos_sysfs= _probes *probes) } =20 static int damos_sysfs_probes_add_dirs(struct damos_sysfs_probes *probes, - struct damon_ctx *ctx) + struct damon_ctx *ctx, struct damon_region *region) { struct damon_probe *probe; struct damos_sysfs_probe **probes_arr; @@ -86,7 +112,7 @@ static int damos_sysfs_probes_add_dirs(struct damos_sysf= s_probes *probes, struct damos_sysfs_probe *sys_probe; int err; =20 - sys_probe =3D damos_sysfs_probe_alloc(); + sys_probe =3D damos_sysfs_probe_alloc(region->probe_hits[i]); if (!sys_probe) { damos_sysfs_probes_rm_dirs(probes); return -ENOMEM; @@ -150,7 +176,8 @@ static struct damon_sysfs_scheme_region *damon_sysfs_sc= heme_region_alloc( =20 static int damos_sysfs_region_add_dirs( struct damon_sysfs_scheme_region *region, - struct damon_ctx *ctx) + struct damon_ctx *ctx, + struct damon_region *dregion) { struct damos_sysfs_probes *probes =3D damos_sysfs_probes_alloc(); int err; @@ -161,7 +188,7 @@ static int damos_sysfs_region_add_dirs( ®ion->kobj, "probes"); if (err) goto fail; - err =3D damos_sysfs_probes_add_dirs(probes, ctx); + err =3D damos_sysfs_probes_add_dirs(probes, ctx, dregion); if (err) goto fail; =20 @@ -3143,7 +3170,7 @@ void damos_sysfs_populate_region_dir(struct damon_sys= fs_schemes *sysfs_schemes, &sysfs_regions->kobj, "%d", sysfs_regions->nr_regions)) goto out; - if (damos_sysfs_region_add_dirs(region, ctx)) + if (damos_sysfs_region_add_dirs(region, ctx, r)) goto out; return; =20 --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 75C1E3C5835; Tue, 12 May 2026 14:37:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596624; cv=none; b=FT3OzWTQGIjzslA12iJQ9Yv5LnLm7t5SrfxOpB1Ktmvk0KeXbOe50iWK+XCrlXlPGKpKrh0qInGronpLKZu1urS+JmKJWH4zOlZMJHGEKFjDpLmigitGYUhEtq0LjpiPbOBeJK/skDU+7Qw7tPCGfoA5FSKXeNojMSd0GvHbEig= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596624; c=relaxed/simple; bh=kbCsWU0mjnq37gAs52jkDtzKMzPSB8TXwCEtlj7DRH8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MfIbdf//rwY5ZDvhqPgYsHZi1qe0XbYAaIGt3f46ipO9/zqLUeqrVPddjdC3AHsN+bzCQ7l9rG7EDNQhqFyffetcbS6TNbmGJc+n6GLJLJ0637eCx6lFuyfDYxV98QgTzIDnXz0dkNXt+E8jRqfZxKXtU6fUiDXYU/t/g+iELiM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=spSgCZBl; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="spSgCZBl" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EF347C2BCF7; Tue, 12 May 2026 14:37:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596624; bh=kbCsWU0mjnq37gAs52jkDtzKMzPSB8TXwCEtlj7DRH8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=spSgCZBlv4Hw/H2wyZrkqs9weh8VNtljwJlInhjXMHp673abph/08TnrZHosupZl5 HRXgvXApLzfbzFhDrDX+TT6poh+nVz7hMM/IpOkO2h690KQqsPfJ+xoKDUB1Yf3uqI zuU3zFXMDtcn1WU6O17k7dy3Liz3xcCFiiACcUWoPzZvf6arPSEkYuIQVQrq6NY0D/ 5IbhcHhGzsb3QZv4BzpIPxPc4dORLDFo8kW066JPz9i08qlhJSObnhefma5HAVFVT/ iFbVG60r0Dznc2myihg9RO1m/LiOJRBvM+iuN69Kn5nMqxiwlYiJBJ0zZWSmxGU0ip F1rH8Cj/gsphw== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , Masami Hiramatsu , Mathieu Desnoyers , Steven Rostedt , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-trace-kernel@vger.kernel.org Subject: [RFC PATCH v2 18/28] mm/damon: trace probe_hits Date: Tue, 12 May 2026 07:36:33 -0700 Message-ID: <20260512143645.113201-19-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Introduce a new tracepoint for exposing the per-region per-probe positive sample count via tracefs. Signed-off-by: SeongJae Park --- include/trace/events/damon.h | 36 ++++++++++++++++++++++++++++++++++++ mm/damon/core.c | 7 +++++++ 2 files changed, 43 insertions(+) diff --git a/include/trace/events/damon.h b/include/trace/events/damon.h index 7e25f4469b81b..d7b94c7640217 100644 --- a/include/trace/events/damon.h +++ b/include/trace/events/damon.h @@ -130,6 +130,42 @@ TRACE_EVENT(damon_monitor_intervals_tune, TP_printk("sample_us=3D%lu", __entry->sample_us) ); =20 +TRACE_EVENT(damon_aggregated_v2, + + TP_PROTO(unsigned int target_id, struct damon_region *r, + unsigned int nr_regions, unsigned int nr_probes), + + TP_ARGS(target_id, r, nr_regions, nr_probes), + + TP_STRUCT__entry( + __field(unsigned long, target_id) + __field(unsigned long, start) + __field(unsigned long, end) + __field(unsigned int, nr_regions) + __field(unsigned int, nr_accesses) + __field(unsigned int, age) + __dynamic_array(unsigned char, probe_hits, nr_probes) + ), + + TP_fast_assign( + __entry->target_id =3D target_id; + __entry->start =3D r->ar.start; + __entry->end =3D r->ar.end; + __entry->nr_regions =3D nr_regions; + __entry->nr_accesses =3D r->nr_accesses; + __entry->age =3D r->age; + memcpy(__get_dynamic_array(probe_hits), r->probe_hits, + sizeof(*r->probe_hits) * nr_probes); + ), + + TP_printk("target_id=3D%lu nr_regions=3D%u %lu-%lu: %u %u probe_hits=3D%s= ", + __entry->target_id, __entry->nr_regions, + __entry->start, __entry->end, + __entry->nr_accesses, __entry->age, + __print_hex(__get_dynamic_array(probe_hits), + __get_dynamic_array_len(probe_hits))) +); + TRACE_EVENT(damon_aggregated, =20 TP_PROTO(unsigned int target_id, struct damon_region *r, diff --git a/mm/damon/core.c b/mm/damon/core.c index fe6c789f2cecb..14b15c9876516 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -1905,6 +1905,11 @@ static void kdamond_reset_aggregated(struct damon_ct= x *c) { struct damon_target *t; unsigned int ti =3D 0; /* target's index */ + unsigned int nr_probes =3D 0; + struct damon_probe *probe; + + damon_for_each_probe(probe, c) + nr_probes++; =20 damon_for_each_target(t, c) { struct damon_region *r; @@ -1913,6 +1918,8 @@ static void kdamond_reset_aggregated(struct damon_ctx= *c) int i; =20 trace_damon_aggregated(ti, r, damon_nr_regions(t)); + trace_damon_aggregated_v2(ti, r, damon_nr_regions(t), + nr_probes); damon_warn_fix_nr_accesses_corruption(r); r->last_nr_accesses =3D r->nr_accesses; r->nr_accesses =3D 0; --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 E0E1F3C585F; Tue, 12 May 2026 14:37:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596625; cv=none; b=J9ijE1NHsqGZ5ZKLbVGB0GQgNn473V99j8/Ag+C3zFEPPKDrsBoI9d6Cr0fY+2Yc8q243DJnBTZBwXjVh8qfQNTsyXWXMKleGBGgvXPHGEkoDmmHbNphtd5dr1fm7kLqRKPxinODgfXKUcTDng6E0CSiUjag+Gu1KXeiV0pL/0U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596625; c=relaxed/simple; bh=EauBIBzKjl6rFCRlEGSo/s6NrgLL9HoVh8TIqUsq9vs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=e7B2HFG3J2/cgks2nwRf2K/vQ59f0iMwk810ss7/HG1CVf4dWeXD7/1vJWlGOr5OyBzZqazglo8aqGdu01C5UEwMAmWm/KoYYUa/LWmYUmiOVETcNX4EB4+OlE3NNHXom15c28F0WlwnJLvwSLsyfpQCKX1byyV6uYXDc8pDmys= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mFJZVSu0; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="mFJZVSu0" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 833EAC2BCF5; Tue, 12 May 2026 14:37:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596624; bh=EauBIBzKjl6rFCRlEGSo/s6NrgLL9HoVh8TIqUsq9vs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mFJZVSu0GDYBqvaQBc63EdHHe5GXKyEp9CdmpKL/PB+nApIyvzw5Akctb1w/Xy8r6 7A9I+VMxFFCc0HCWCPzxBkxT+ypJbAyd4C4ZM2OCw2974pDynugyPPuJ4E2xk7kTSG JPBfu/WULl77WKdP98o29HR/uQE+xif1sDGa5YgSC4+LeH3mPsLs/Z6QbNKcjxcDOI zHVpnKzLQiCdkOMkoAJSmasVHliI9sSOhwng+UzFBfctZl0fK9isp6uFl5fZRiiKNd 9yxSrrGvUv5g/zH/+oOAcths8s6xjXowv+QZPKAbDdcCb/ngDOkzJyotlfts3w0aJf VgYJAXwCRY6Cg== From: SeongJae Park To: Cc: SeongJae Park , Shuah Khan , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 19/28] selftests/damon/sysfs.sh: test probes dir Date: Tue, 12 May 2026 07:36:34 -0700 Message-ID: <20260512143645.113201-20-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Add simple existence tests for data probes sysfs directories and files. Signed-off-by: SeongJae Park --- tools/testing/selftests/damon/sysfs.sh | 48 ++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/tools/testing/selftests/damon/sysfs.sh b/tools/testing/selftes= ts/damon/sysfs.sh index 83e3b7f63d81c..1ac3e2ce8e448 100755 --- a/tools/testing/selftests/damon/sysfs.sh +++ b/tools/testing/selftests/damon/sysfs.sh @@ -291,11 +291,59 @@ test_intervals() ensure_file "$intervals_dir/update_us" "exist" "600" } =20 +test_damon_filter() +{ + damon_filter_dir=3D$1 + ensure_file "$damon_filter_dir/type" "exist" "600" + ensure_write_succ "$damon_filter_dir/type" "anon" "valid input" + ensure_write_fail "$damon_filter_dir/type" "foo" "invalid input" + ensure_file "$damon_filter_dir/matching" "exist" "600" + ensure_file "$damon_filter_dir/allow" "exist" "600" +} + +test_damon_filters() +{ + filters_dir=3D$1 + ensure_dir "$filters_dir" "exist" + ensure_file "$filters_dir/nr_filters" "exist" "600" + ensure_write_succ "$filters_dir/nr_filters" "1" "valid input" + test_damon_filter "$filters_dir/0" + + ensure_write_succ "$filters_dir/nr_filters" "2" "valid input" + test_damon_filter "$filters_dir/0" + test_damon_filter "$filters_dir/1" + + ensure_write_succ "$filters_dir/nr_filters" "0" "valid input" + ensure_dir "$filters_dir/0" "not_exist" + ensure_dir "$filters_dir/1" "not_exist" +} + +test_probe() +{ + probe_dir=3D$1 + ensure_dir "$probe_dir" "exist" + test_damon_filters "$probe_dir/filters" +} + +test_probes() +{ + probes_dir=3D$1 + ensure_dir "$probes_dir" "exist" + ensure_file "$probes_dir/nr_probes" "exist" "600" + + ensure_write_succ "$probes_dir/nr_probes" "1" "valid input" + test_probe "$probes_dir/0" + + ensure_write_succ "$probes_dir/nr_probes" "0" "valid input" + ensure_dir "$probes_dir/0" "not_exist" +} + test_monitoring_attrs() { monitoring_attrs_dir=3D$1 ensure_dir "$monitoring_attrs_dir" "exist" test_intervals "$monitoring_attrs_dir/intervals" + test_probes "$monitoring_attrs_dir/probes" test_range "$monitoring_attrs_dir/nr_regions" } =20 --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 C25E33C81B7; Tue, 12 May 2026 14:37:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596625; cv=none; b=JEYBXFJ//LRlzUIRIOEOXAtGxKP7817DctWuomtar2i+qx61NPzUPLla9XBUIXNTVwzcZ03mHraTieLtMs/SYrdTuS6JVFQEwxzpfPA9CCfmZFm9rP+clFsDmkJHERNJ9e5ZmqPOK7n7FtTME4qwQ71rZ3AYuLNGIq5DXnRwU6E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596625; c=relaxed/simple; bh=cN6FA2fDmcwC+JRPicLwVTnBJQclCA8SmpykqguB6yE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NGiyjrzcug+/0jf4KIGstOn0Oq533kXlnvQL3/ppxM5cM49qDcW5qaEBjT9lqWBp/7ooIDItSSIyqFjvccUx+9CRJnSieE6EuWo2YoC+0v2xDeA6BBjPngNwQ+POFafU1jAcN+EsFxZpjX9Ro3XgLh5VxISNxW7uNWqAXcJfO0Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=LTWx/evL; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="LTWx/evL" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E20FEC2BD00; Tue, 12 May 2026 14:37:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596625; bh=cN6FA2fDmcwC+JRPicLwVTnBJQclCA8SmpykqguB6yE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LTWx/evLkEIOQCvFjEkds90ardLj1jICgbB/sGDzJ27fRJvQKLYXZpMtYVbPScrk5 2ryZsSH8EFSpgycvBipXDC/X0qiKrHo5sCzILuX7KOGhSsYSYs0Dqte8qbo/Sfn9DA J/VoC0sCOSmkfZCgI5Ibtza3Nj80WZeUlFp6MzY4JBD1xUqd0SvPNRXnIla4q/Mv+s RTDlRGrrOc7J9rlS+wJCsEB8U8kVJvXiBy6vkx6a4V75tEn9G1B/+G0ylzRepLIGk3 CbaHNK7nI6t5OEkuRv/+/oHXm2+ToS6dWmjZ4yH/6sI9M7huyeM/cYsD0nnodOcK82 nTAVOBSIKs/+A== From: SeongJae Park To: Cc: SeongJae Park , "Liam R. Howlett" , Andrew Morton , David Hildenbrand , Jonathan Corbet , Lorenzo Stoakes , Michal Hocko , Mike Rapoport , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , damon@lists.linux.dev, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 20/28] Docs/mm/damon/design: document data attributes monitoring Date: Tue, 12 May 2026 07:36:35 -0700 Message-ID: <20260512143645.113201-21-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Update DAMON design document for newly added data attributes monitoring feature. Signed-off-by: SeongJae Park --- Documentation/mm/damon/design.rst | 37 +++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/Documentation/mm/damon/design.rst b/Documentation/mm/damon/des= ign.rst index fa7392b5a331d..6731c3102d0ff 100644 --- a/Documentation/mm/damon/design.rst +++ b/Documentation/mm/damon/design.rst @@ -276,6 +276,43 @@ interval``, DAMON checks if the region's size and acce= ss frequency (``nr_accesses``) has significantly changed. If so, the counter is reset = to zero. Otherwise, the counter is increased. =20 +Data Attributes Monitoring +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Data access pattern is only one type of data attributes. In some use case= s, +users need to know more data attributes information. For example, users m= ay +need to know how much of a given hot or cold memory region is backed by +anonymous pages, or belong to a specific cgroup. For such use case, data +attributes monitoring feature is provided. + +Using the feature, users can register data attributes of their interest to= the +DAMON :ref:`context `. = The +registration is made by specifying a probe per attribute. Each of the pro= be +specifies a rule to determine if a given memory region has the related +attribute. The rule is constructed with multiple filters. The filters wo= rk +same to :ref:`DAMOS filters ` except the suppo= rted +filter types. Currently only ``anon`` filter type is supported for data +attributes monitoring. + +If such probes are registered, DAMON executes the probes for each region's +sampling memory when it does the access :ref:`sampling +`. The number of samples that identif= ied +as having the data attribute (hitting the probe) per :ref:`aggregation int= erval +` is accounted in a per-region per-probe counter. +Users can therefore know how much of a given DAMON region has a specific d= ata +attribute by reading the per-region per-probe probe hits counter after each +aggregation interval. + +This is a sampling based mechanism. Hence, it is lightweight but the outp= ut +may include some measurement errors. The output should be used with good +understanding of statistics. + +Another way to do this for higher accuracy is using :ref:`DAMOS filter +` with ``stat`` :ref:`action +` and ``sz_ops_filter_passed`` :ref:`stat +`. This approach provides the data attributes +information in page level. But, because it is operated in page level, the +overhead is proportional to the size of the memory. =20 Dynamic Target Space Updates Handling ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 36EFF3C2BB9; Tue, 12 May 2026 14:37:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596626; cv=none; b=uTA0WY/f9nwzLetMF5FXtfuEjLQNfhEyejz8rEEZNM2kDELPE5L6k1mBZBeu83sG7qYuG8iANHKI5IbhyV1csuJy/yYl5Jxqlak0KYu/hoGBYDZ+99V0YUjdcyw5qc+TywuZPvN/H9DS7fwUflwYFlhrD+7UrB5Hta+Llb+3er4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596626; c=relaxed/simple; bh=XvoG0MYMyxeuNZgWYp28nddVB/e95qmsBgzm52k8D4A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=MZ2dCxzuBuAzuUFl6JH0ZYoDInDK39NpOJBULFis0XkKHvgbd099NVZw76DuWw1I/h+mOk1LZGM4cROJGHmSBR7yyc4JLu4O+i29smqdUqK32QwV7kD44sukLTWh8WdKO95M0rlH/mxd2xyfC3D3NbPMvh2VeOr+MKLWUWYMxio= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=uvQ+Js0D; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="uvQ+Js0D" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9430AC2BCB0; Tue, 12 May 2026 14:37:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596626; bh=XvoG0MYMyxeuNZgWYp28nddVB/e95qmsBgzm52k8D4A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=uvQ+Js0D85bE+lt2V4uOB5sDjKwYR5nMOlSMxaQ1KGtb78VRkW8glTEgyq9qCM+hB XHWWumq9YCy+RTXl1e6JynKOIua2p/A4K2c2pDUgplMCulE99qKoNDxCoMU1lJJQ4b L4/PwqxSvuM+rtRiVY/CDfdaQXPBU1cJgkqBkR+7Fz+bhMEZJUEh3hJvyoE7SEvbol fQ9sHzO0E5IQ1dk6CNH92TOwlaTSS8BHJn5MCabPPDBDhd/gp88uSABZScqx0pA/tO nRMsMFX1JWkZJZmy5bU3j2UeR4KpiKbesJB9Hkq8z6Sv0ShtfyKSJpP/qppSyBdYx9 qtH6o0E3l+yEw== From: SeongJae Park To: Cc: SeongJae Park , "Liam R. Howlett" , Andrew Morton , David Hildenbrand , Jonathan Corbet , Lorenzo Stoakes , Michal Hocko , Mike Rapoport , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , damon@lists.linux.dev, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 21/28] Docs/admin-guide/mm/damon/usage: document data attributes monitoring Date: Tue, 12 May 2026 07:36:36 -0700 Message-ID: <20260512143645.113201-22-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Update DAMON usage document for the newly added data attributes monitoring feature. Signed-off-by: SeongJae Park --- Documentation/admin-guide/mm/damon/usage.rst | 46 +++++++++++++++++--- Documentation/mm/damon/design.rst | 2 + 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/Documentation/admin-guide/mm/damon/usage.rst b/Documentation/a= dmin-guide/mm/damon/usage.rst index 11c75a598393c..465bcdf89b182 100644 --- a/Documentation/admin-guide/mm/damon/usage.rst +++ b/Documentation/admin-guide/mm/damon/usage.rst @@ -72,6 +72,11 @@ comma (","). =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 intervals/= sample_us,aggr_us,update_us =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = intervals_goal/access_bp,aggrs,min_sample_us,max_sample_us =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 nr_regions= /min,max + =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 :ref:`prob= es `/nr_probes + =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = 0/filters/nr_filters + =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = =E2=94=82 =E2=94=82 0/type,matching,allow + =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = =E2=94=82 =E2=94=82 ... + =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = =E2=94=82 ... =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 :ref:`targets `/nr_targets =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 :ref:`0 `/pid_target,obsolete_target =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = :ref:`regions `/nr_regions @@ -97,7 +102,10 @@ comma (","). =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = =E2=94=82 0/id,weight =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = :ref:`stats `/nr_tried,sz_tried,nr_applied,sz_applied,= sz_ops_filter_passed,qt_exceeds,nr_snapshots,max_nr_snapshots =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = :ref:`tried_regions `/total_bytes - =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = =E2=94=82 0/start,end,nr_accesses,age,sz_filter_passed + =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = =E2=94=82 0/start,end,nr_accesses,age,sz_filter_passed, + =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = =E2=94=82 =E2=94=82 probes + =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = =E2=94=82 =E2=94=82 =E2=94=82 0/hits + =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = =E2=94=82 =E2=94=82 =E2=94=82 ... =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = =E2=94=82 ... =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 ... =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 ... @@ -227,8 +235,8 @@ contexts//monitoring_attrs/ =20 Files for specifying attributes of the monitoring including required quali= ty and efficiency of the monitoring are in ``monitoring_attrs`` directory. -Specifically, two directories, ``intervals`` and ``nr_regions`` exist in t= his -directory. +Specifically, two directories, ``intervals``, ``nr_regions`` and ``probes`` +exist in this directory. =20 Under ``intervals`` directory, three files for DAMON's sampling interval (``sample_us``), aggregation interval (``aggr_us``), and update interval @@ -262,6 +270,27 @@ tuning-applied current values of the two intervals can= be read from the ``sample_us`` and ``aggr_us`` files after writing ``update_tuned_intervals= `` to the ``state`` file. =20 +.. _damon_usage_sysfs_probes: + +contexts//monitoring_attrs/probes/ +------------------------------------- + +A directory for registering :ref:`data attributes monitoring +` probes. + +In the beginning, this directory has only one file, ``nr_probes``. Writin= g a +number (``N``) to the file creates the number of child directories named `= `0`` +to ``N-1``. Each directory represents each monitoring probe. + +In each probe directory, one directory, ``filters`` exist. The directory +contains files for installingt filters for the probe, that is used to dete= rmine +the data attribute for the probe. + +In the beginning, ``filters`` directory has only one file, ``nr_filters``. +Writing a number (``N``) to the file creates the number of child directori= es +named ``0`` to ``N-1``. Each directory represents each filter and work in= a +way similar to that for :ref:`DAMOS filter `. + .. _sysfs_targets: =20 contexts//targets/ @@ -614,10 +643,13 @@ set the ``access pattern`` as their interested patter= n that they want to query. tried_regions// ------------------ =20 -In each region directory, you will find five files (``start``, ``end``, -``nr_accesses``, ``age``, and ``sz_filter_passed``). Reading the files wi= ll -show the properties of the region that corresponding DAMON-based operation -scheme ``action`` has tried to be applied. +In each region directory, you will find six files (``start``, ``end``, +``nr_accesses``, ``age``, ``sz_filter_passed`` and ``probe_hits``). Readi= ng +the files will show the properties of the region that corresponding DAMON-= based +operation scheme ``action`` has tried to be applied. + +Reading ``probe_hists`` shows the number of data attributes monitoring +probe-hit positive samples of the region. =20 Example ~~~~~~~ diff --git a/Documentation/mm/damon/design.rst b/Documentation/mm/damon/des= ign.rst index 6731c3102d0ff..887b45cbeb716 100644 --- a/Documentation/mm/damon/design.rst +++ b/Documentation/mm/damon/design.rst @@ -276,6 +276,8 @@ interval``, DAMON checks if the region's size and acces= s frequency (``nr_accesses``) has significantly changed. If so, the counter is reset = to zero. Otherwise, the counter is increased. =20 +.. _damon_design_data_attrs_monitoring: + Data Attributes Monitoring ~~~~~~~~~~~~~~~~~~~~~~~~~~ =20 --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 867D53C988E; Tue, 12 May 2026 14:37:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596626; cv=none; b=kJ+u9e6K5ssmly6tWr0HAgW6sJU72c7n3Hj3ogsEKbXFj0HJ8nlkFGrIJfAo/238+k4s0DrMiMJS4n6iOFAwAXUYXie1ilswx+qdEW7rdT7x9yFtpyxV+kmMvx+KGau7UmhGSrFp+JIS8TWY4v661OGe35Sm+8U6sJG6wC3wg8I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596626; c=relaxed/simple; bh=RDSWBAh50cMai+6acyW+AfVUUR9Eit/eslVnRAs5PH8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sGFRoIluhdtyTK65JvloY/4XE//sQB0nUHZf4Q56f2g1v+fTSccCl78dS3hACMD5tPeyN8Ohm7IMeEIf81jg3Pgt+W+oymHc6v6h/rwTmiC7Lw0kTFVsg7p9o/hez8pAVK4wncjE7TedmMzyjbx8hSpyAKvpmPYV1BOAtGA0XkQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=sjcADgMe; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="sjcADgMe" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 41CB1C2BCFA; Tue, 12 May 2026 14:37:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596626; bh=RDSWBAh50cMai+6acyW+AfVUUR9Eit/eslVnRAs5PH8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sjcADgMeYILQU0boHYv10V+Dio3tUD7L4BXZyaH8N6Fy/Wv3ei35ogEPMmPWNfptz Weu6cImX9OnbWjBATQX7iIB5HZeDsnyweNk7Zr1cvSkOZAwEVsEbTgrfSNOvHZkDvd QMBvrKs3t6z4m0oe0TRm0vJ+U/FlEjY6bye62VJ7yqFojiLJdu5RLt0xAVDJpKzGeT +U8JAKl4SxCdRTNzjScVksA4/wTM5QjaAW+kUmoq99O2wxjb8dwClvHI7H20NlKRiN ziy01Dl+EkbKyvsEOqOJ0Zrn9If8acBZxg0cmvqvtJ8JcsdeptGQpcbpwekL5VU5Jm seyMFVg1NdQSQ== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 22/28] mm/damon/core: introduce DAMON_FILTER_TYPE_MEMCG Date: Tue, 12 May 2026 07:36:37 -0700 Message-ID: <20260512143645.113201-23-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Belonging memory cgoup is another data attribute that can be useful to monitor. Introduce a new DAMON filter type, namely DAMON_FILTER_TYPE_MEMCG, for monitoring of this attribute. Signed-off-by: SeongJae Park --- include/linux/damon.h | 6 ++++++ mm/damon/core.c | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/include/linux/damon.h b/include/linux/damon.h index e9ca40cdd9102..3dec0947b93f0 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -740,9 +740,11 @@ struct damon_intervals_goal { * enum damon_filter_type - Type of &struct damon_filter * * @DAMON_FILTER_TYPE_ANON: Anonymous pages. + * @DAMON_FILTER_TYPE_MEMCG: Specific memcg's pages. */ enum damon_filter_type { DAMON_FILTER_TYPE_ANON, + DAMON_FILTER_TYPE_MEMCG, }; =20 /** @@ -751,12 +753,16 @@ enum damon_filter_type { * @type: Type of the region. * @matcing: Whether this filter is for the type-matching ones. * @allow: Whether the @type-@matching ones should pass this filter. + * @memcg_id: Memcg id of the question if @type is DAMON_FILTER_MEMCG. * @list: Siblings list. */ struct damon_filter { enum damon_filter_type type; bool matching; bool allow; + union { + u64 memcg_id; + }; struct list_head list; }; =20 diff --git a/mm/damon/core.c b/mm/damon/core.c index 14b15c9876516..ef751898a3c06 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -1430,6 +1430,13 @@ static void damon_commit_filter(struct damon_filter = *dst, dst->type =3D src->type; dst->matching =3D src->matching; dst->allow =3D src->allow; + switch (dst->type) { + case DAMON_FILTER_TYPE_MEMCG: + dst->memcg_id =3D src->memcg_id; + break; + default: + break; + } } =20 static int damon_commit_filters(struct damon_probe *dst, --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 008453C98A4; Tue, 12 May 2026 14:37:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596627; cv=none; b=UVufDO5/fumpwz4PuVFRYUUNxE+4C7qDaEKxbaMA3VuVlwCMY0jCez2YBCCUiL+UkFBMchVXuEHTWsTFAVPVLCh8J/hD9rZdT9w/DjLjww6bu2PrihpQmyb8K27YPbgUUg5DTjugdcfNpoRyDw5WdKi1h9k/oxGzLs5iVXzmJNo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596627; c=relaxed/simple; bh=nV0BEXAl/A1NtdiYPlzAvpITHMz8pj1VAAgBa/dBAlg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fhPcmQctsFV6b2f8bAd5BEUCAzCejVwWawP5X3E+r1C6z5UsIU5WPPTedJ+YnkCLVaFcwbsRbhQUMmlOcwysUwFIT/DsS0xbvSpvb2FQ40aEDhGmIgBxmUPnIjWsadShPFI3ptp3EFoy5jYMnaURHLCKYZR29TsWspKzqPSrHhw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KsojjOUR; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="KsojjOUR" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9207DC2BCFB; Tue, 12 May 2026 14:37:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596626; bh=nV0BEXAl/A1NtdiYPlzAvpITHMz8pj1VAAgBa/dBAlg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KsojjOUR5FpzuhoMEsiQ74lUTtF3Sd4uHmbZgbxvj+CN35fepwndOghBiOVFw7xO0 Ina4iKV98T2sy2Dl9/ct+GGklfuSC0R28ypUeAVNfyTyvZXbJX9viVYPcDujdLlhlJ fMdeernsOZ2muTPkX9fjxA9IUvBjVb3JUrIDuSA0cy53BnFEXy0WeJFIjVxbqslFze Z5U15cbyGca6bSsK6eJ2xDhpWeWufKtDJcpPofPlrKa1YynmqgbFJvd7fuZ6+a5u77 iaFVyUu91FxnYcnsAH7crC5O+qgR4dRcbzf8l37Wkx+Vvga8b1iTzg8a9f3yWdd+8U k0G98Y2QL1+NA== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 23/28] mm/damon/paddr: support DAMON_FILTER_TYPE_MEMCG Date: Tue, 12 May 2026 07:36:38 -0700 Message-ID: <20260512143645.113201-24-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Implement the support of DAMON_FILTER_TYPE_MEMCG on the DAMON operation set implementation for the physical address space. Signed-off-by: SeongJae Park --- mm/damon/paddr.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/mm/damon/paddr.c b/mm/damon/paddr.c index e60af2cbc1089..f093485fd16a6 100644 --- a/mm/damon/paddr.c +++ b/mm/damon/paddr.c @@ -124,6 +124,7 @@ static bool damon_pa_filter_match(struct damon_filter *= filter, struct folio *folio) { bool matched =3D false; + struct mem_cgroup *memcg; =20 switch (filter->type) { case DAMON_FILTER_TYPE_ANON: @@ -133,6 +134,19 @@ static bool damon_pa_filter_match(struct damon_filter = *filter, } matched =3D folio_test_anon(folio); break; + case DAMON_FILTER_TYPE_MEMCG: + if (!folio) { + matched =3D false; + break; + } + rcu_read_lock(); + memcg =3D folio_memcg_check(folio); + if (!memcg) + matched =3D false; + else + matched =3D filter->memcg_id =3D=3D mem_cgroup_id(memcg); + rcu_read_unlock(); + break; default: break; } --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 37C2C3CAA39; Tue, 12 May 2026 14:37:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596627; cv=none; b=tkydgkVfX9BcrsiG17Nm6h0QLo5GNhk8L2Yd3bCdRpTGkeiNbjgf80fYB63Tbf4pkmngFj92Z4TMS6XumgoDqVm7bzmLTIpfZGlyZLSuPEg+wSLFywgN3F/aj/OQJNk3RLQnLSS8AUg8IJmM/6PwwSn8GoB5x+CVnqrWv+Wm2Fs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596627; c=relaxed/simple; bh=GgqkpGLzfY3SpgNfpQk0ztstdYxBESX4HneypEejd9A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nuCAqABlK1Px2Hfej9LmCkg/Y4mk/S2319MzC9Ry0VmnD95+nRTEHnlBGudKnS8GrEtepLEeLQD+nP02iyul+sXDA18rFRW65Dl0PReGno+FccsQhsrUNn7DYSfRLnItS20oNgz3UtDCSahCgVIvxe+ni7tTpp3AjrZyGPVBLgU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Kr/9bfP2; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Kr/9bfP2" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E0858C2BCB0; Tue, 12 May 2026 14:37:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596627; bh=GgqkpGLzfY3SpgNfpQk0ztstdYxBESX4HneypEejd9A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Kr/9bfP2XO4lLoz6+fwIsfqfH6XcLg/Aj2lluUEaQ+nNluegiP+NcV/fN3UNckTHo iQseqhKX7sGENACO9Q/XVXxq9IS6a5ya3hcombCh0cxIna3nerr9IEvUrPNM8Yo6xw ae1hrESycAolWrNIIQtxTj3WCDIM1BzAApCM37jZlJAeIjNzKCKNVz/iHpQciufkLp j/uJ7zrEV0YsMZg4XWjGTtDiNqkjGgZb+LYEkTMUgzbVhWfENlgPn8BpENrSPQaqkt hX/G4hHjRO5ZEF+Yk4oM/Taz8LHRkGIttS0YZSAzfbeIZYhI6PBOrv6Pr/hYCcTVy+ K/EcSTBsjNQ3Q== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 24/28] mm/damon/sysfs: add filters//path file Date: Tue, 12 May 2026 07:36:39 -0700 Message-ID: <20260512143645.113201-25-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Introduce a new DAMON sysfs file for letting users setup the target memory cgroup of the belonging memory cgroup attribute monitoring. The file is named 'filter', located under the probe filter directory. Users can set the target memory cgroup by writing the path to the memory cgroup from the cgroup mount point to the file. Signed-off-by: SeongJae Park --- mm/damon/sysfs.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c index e4dbf85feadc2..2b68e1a7de451 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -756,6 +756,7 @@ struct damon_sysfs_filter { enum damon_filter_type type; bool matching; bool allow; + char *path; }; =20 static struct damon_sysfs_filter *damon_sysfs_filter_alloc(void) @@ -774,6 +775,10 @@ damon_sysfs_filter_type_names[] =3D { .type =3D DAMON_FILTER_TYPE_ANON, .name =3D "anon", }, + { + .type =3D DAMON_FILTER_TYPE_MEMCG, + .name =3D "memcg", + }, }; =20 static ssize_t type_show(struct kobject *kobj, @@ -862,11 +867,46 @@ static ssize_t allow_store(struct kobject *kobj, return count; } =20 +static ssize_t path_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + struct damon_sysfs_filter *filter =3D container_of(kobj, + struct damon_sysfs_filter, kobj); + int len; + + if (!mutex_trylock(&damon_sysfs_lock)) + return -EBUSY; + len =3D sysfs_emit(buf, "%s\n", filter->path ? filter->path : ""); + mutex_unlock(&damon_sysfs_lock); + return len; +} + +static ssize_t path_store(struct kobject *kobj, + struct kobj_attribute *attr, const char *buf, size_t count) +{ + struct damon_sysfs_filter *filter =3D container_of(kobj, + struct damon_sysfs_filter, kobj); + char *path =3D kmalloc_objs(*path, size_add(count, 1)); + + if (!path) + return -ENOMEM; + strscpy(path, buf, size_add(count, 1)); + if (!mutex_trylock(&damon_sysfs_lock)) { + kfree(path); + return -EBUSY; + } + kfree(filter->path); + filter->path =3D path; + mutex_unlock(&damon_sysfs_lock); + return count; +} + static void damon_sysfs_filter_release(struct kobject *kobj) { struct damon_sysfs_filter *filter =3D container_of(kobj, struct damon_sysfs_filter, kobj); =20 + kfree(filter->path); kfree(filter); } =20 @@ -879,10 +919,14 @@ static struct kobj_attribute damon_sysfs_filter_match= ing_attr =3D static struct kobj_attribute damon_sysfs_filter_allow_attr =3D __ATTR_RW_MODE(allow, 0600); =20 +static struct kobj_attribute damon_sysfs_filter_path_attr =3D + __ATTR_RW_MODE(path, 0600); + static struct attribute *damon_sysfs_filter_attrs[] =3D { &damon_sysfs_filter_type_attr.attr, &damon_sysfs_filter_matching_attr.attr, &damon_sysfs_filter_allow_attr.attr, + &damon_sysfs_filter_path_attr.attr, NULL, }; ATTRIBUTE_GROUPS(damon_sysfs_filter); --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 9E76E3CB8F5; Tue, 12 May 2026 14:37:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596627; cv=none; b=NWExy7RSYG5d8KhfWduLu+1wcBSbkjbxEIiseT/rY2JadFU2ihGriTFCJJl3WhQbcQupTkbEBx5+ivv7h97VKrQdnixTPQTdhZuIVy0pZPFXSKwMBbWQNb+j7TvMTUBo4IF7FI7DOW5fse72+7O2LbXku3hIytM9OrfV1tZw57w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596627; c=relaxed/simple; bh=jW0kOVlO76z3Unib/m3BDQZ8Lhaae0dgTTAXYzXNV0c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=slVmevqv9+GYDBQM/viX3wZMttvJE5fsFlLpwJVWg6iWmXnE3w2Op4Y9z7Bj3LMNIGNLUz+CtDiZqB87cqkLXaeJ3hnp9odzI89PjwWYyUbHZpGP3E19olSetrneMt7Hel/5Z9gwELuWzU0UPmsbXTgj3MAOoaVR3d32Vey+qQI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=l01JjO28; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="l01JjO28" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 450FFC2BCFA; Tue, 12 May 2026 14:37:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596627; bh=jW0kOVlO76z3Unib/m3BDQZ8Lhaae0dgTTAXYzXNV0c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=l01JjO28+FAaW8Vmp3vllMET+9x80dN8OmtZhIZxCVkkCjMfYEDbhTzPACiE/nYBg 2f5sKGQSik7yNKUA4x5GmzbfXIxPdFW/0gIBw/G1KNaJq+Wy7+OtdWurh1O07tytbb FuIFgjiuhw5tztw73N+lcHfCCxKSB79yoZDdmw9/zZ9GFiL2P1El1nZqxMcJJaywbg feQHtsZUhBRAKeCXokwowXuWeJU9saxwVsr65Pdv8mx+e433RGp4mzfSaHIUA7Vjs0 vyhxQ4JAtIXvTET4+qtwbdMBOZfaof+OGKIVcHvqaLGoyWCeZCXuhSwAo/MTQo4Znu DpHjS9NUCGUuA== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 25/28] mm/damon/sysfs-schemes: move memcg_path_to_id() to sysfs-common Date: Tue, 12 May 2026 07:36:40 -0700 Message-ID: <20260512143645.113201-26-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" The next commit will need to find the memcg id from the user-passed path to the memory cgroup, from sysfs.c. memcg_path_to_id() is doing that, but defined in sysfs-schemes.c as a static function. Move the function to sysfs-common.c and mark it as non-static, so that the next commit can reuse the function. Signed-off-by: SeongJae Park --- mm/damon/sysfs-common.c | 41 ++++++++++++++++++++++++++++++++++++++++ mm/damon/sysfs-common.h | 2 ++ mm/damon/sysfs-schemes.c | 41 ---------------------------------------- 3 files changed, 43 insertions(+), 41 deletions(-) diff --git a/mm/damon/sysfs-common.c b/mm/damon/sysfs-common.c index 83e24a9b5a0db..bdc6ae2639e4f 100644 --- a/mm/damon/sysfs-common.c +++ b/mm/damon/sysfs-common.c @@ -104,3 +104,44 @@ const struct kobj_type damon_sysfs_ul_range_ktype =3D { .default_groups =3D damon_sysfs_ul_range_groups, }; =20 + +static bool damon_sysfs_memcg_path_eq(struct mem_cgroup *memcg, + char *memcg_path_buf, char *path) +{ +#ifdef CONFIG_MEMCG + cgroup_path(memcg->css.cgroup, memcg_path_buf, PATH_MAX); + if (sysfs_streq(memcg_path_buf, path)) + return true; +#endif /* CONFIG_MEMCG */ + return false; +} + +int damon_sysfs_memcg_path_to_id(char *memcg_path, u64 *id) +{ + struct mem_cgroup *memcg; + char *path; + bool found =3D false; + + if (!memcg_path) + return -EINVAL; + + path =3D kmalloc_array(PATH_MAX, sizeof(*path), GFP_KERNEL); + if (!path) + return -ENOMEM; + + for (memcg =3D mem_cgroup_iter(NULL, NULL, NULL); memcg; + memcg =3D mem_cgroup_iter(NULL, memcg, NULL)) { + /* skip offlined memcg */ + if (!mem_cgroup_online(memcg)) + continue; + if (damon_sysfs_memcg_path_eq(memcg, path, memcg_path)) { + *id =3D mem_cgroup_id(memcg); + found =3D true; + mem_cgroup_iter_break(NULL, memcg); + break; + } + } + + kfree(path); + return found ? 0 : -EINVAL; +} diff --git a/mm/damon/sysfs-common.h b/mm/damon/sysfs-common.h index 2099adee11d05..3079306966a91 100644 --- a/mm/damon/sysfs-common.h +++ b/mm/damon/sysfs-common.h @@ -59,3 +59,5 @@ int damos_sysfs_set_quota_scores(struct damon_sysfs_schem= es *sysfs_schemes, void damos_sysfs_update_effective_quotas( struct damon_sysfs_schemes *sysfs_schemes, struct damon_ctx *ctx); + +int damon_sysfs_memcg_path_to_id(char *memcg_path, u64 *id); diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index 43a8224d991e8..6b21bbe97d04a 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -2792,47 +2792,6 @@ const struct kobj_type damon_sysfs_schemes_ktype =3D= { .default_groups =3D damon_sysfs_schemes_groups, }; =20 -static bool damon_sysfs_memcg_path_eq(struct mem_cgroup *memcg, - char *memcg_path_buf, char *path) -{ -#ifdef CONFIG_MEMCG - cgroup_path(memcg->css.cgroup, memcg_path_buf, PATH_MAX); - if (sysfs_streq(memcg_path_buf, path)) - return true; -#endif /* CONFIG_MEMCG */ - return false; -} - -static int damon_sysfs_memcg_path_to_id(char *memcg_path, u64 *id) -{ - struct mem_cgroup *memcg; - char *path; - bool found =3D false; - - if (!memcg_path) - return -EINVAL; - - path =3D kmalloc_array(PATH_MAX, sizeof(*path), GFP_KERNEL); - if (!path) - return -ENOMEM; - - for (memcg =3D mem_cgroup_iter(NULL, NULL, NULL); memcg; - memcg =3D mem_cgroup_iter(NULL, memcg, NULL)) { - /* skip offlined memcg */ - if (!mem_cgroup_online(memcg)) - continue; - if (damon_sysfs_memcg_path_eq(memcg, path, memcg_path)) { - *id =3D mem_cgroup_id(memcg); - found =3D true; - mem_cgroup_iter_break(NULL, memcg); - break; - } - } - - kfree(path); - return found ? 0 : -EINVAL; -} - static int damon_sysfs_add_scheme_filters(struct damos *scheme, struct damon_sysfs_scheme_filters *sysfs_filters) { --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 ECFA83CB91E; Tue, 12 May 2026 14:37:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596628; cv=none; b=c/psAkDwVLQ23JW6hl6QMHB6QiZgZ+DzF4gPTz20+IHWI1mzAAau/eMJ27jT+vb5V6HeI1tbjJ87h7Kg5Vt7Vsey2228TDk0gJj0RMUgtUwL0nSPCGgeOr94+z9nuzLAqXJ+qaZ7EA7FehSZp+S6XA2V/4/lVvH5jwz/e7SMESk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596628; c=relaxed/simple; bh=cFvp8t6ODEV3JdI3/2xCA29FAtQcg5JdAkWzfAP5fUM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Mae+yQuryf3d8HKn2SXR6QH/1E6AD1IMIjslvbcAmYy+clAt+2a9ibj/dsqR2UqsnpJEsaP8GVyFBX2XWa1V57eAXFatdld500DozQM8dd1mteWBwuUXD6bPAUPn/nkhCw6fWcEBjn4zFi4DzNZcRkeqLBshEHpkNbHTfertpcM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qXMh6v4S; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="qXMh6v4S" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 99DA9C2BCF5; Tue, 12 May 2026 14:37:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596627; bh=cFvp8t6ODEV3JdI3/2xCA29FAtQcg5JdAkWzfAP5fUM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qXMh6v4S8blyPmQhNSi/jVQnYSmsr/nWTHGVyngriybW3PN7mRYtehiv6Fg/rGNKj HsMtgcAqJu1TmNgoFc4cQNvVZP/PNKBkQzgZvWtHbbjtc2aH25/NmIhYeUguOCeuUM V41/BnERJWQTmiIGjkD9rmkVpEPbgdCtW3kOQtUFMhfpvbS/cy5IH7X6dPM7vtOum1 xN5glbUR+s4DTK7GQR692b6wCz6zklxGq2sNmwb4li1OcsP1pryObrhOoLVeYX8SZr SvJyijxVUDo/J3MXa0gY6W8zvwOULqFnB/bba7+cDrZ1ewoxg2lzOpqhgClZO/OuZN 7gahZmp1+tAcA== From: SeongJae Park To: Cc: SeongJae Park , Andrew Morton , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 26/28] mm/damon/sysfs: setup damon_filter->memcg_id from path Date: Tue, 12 May 2026 07:36:41 -0700 Message-ID: <20260512143645.113201-27-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Find and set the memcg_id for damon_filter from the user-passed memory cgroup path when updating the DAMON input parameters. Signed-off-by: SeongJae Park --- include/linux/damon.h | 1 + mm/damon/core.c | 2 +- mm/damon/sysfs.c | 11 +++++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/include/linux/damon.h b/include/linux/damon.h index 3dec0947b93f0..6935cc3ea00ab 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -1004,6 +1004,7 @@ static inline unsigned long damon_sz_region(struct da= mon_region *r) struct damon_filter *damon_new_filter(enum damon_filter_type type, bool matching, bool allow); void damon_add_filter(struct damon_probe *probe, struct damon_filter *f); +void damon_destroy_filter(struct damon_filter *f); =20 struct damon_probe *damon_new_probe(void); void damon_add_probe(struct damon_ctx *ctx, struct damon_probe *probe); diff --git a/mm/damon/core.c b/mm/damon/core.c index ef751898a3c06..89568f463e556 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -143,7 +143,7 @@ static void damon_free_filter(struct damon_filter *f) kfree(f); } =20 -static void damon_destroy_filter(struct damon_filter *f) +void damon_destroy_filter(struct damon_filter *f) { damon_del_filter(f); damon_free_filter(f); diff --git a/mm/damon/sysfs.c b/mm/damon/sysfs.c index 2b68e1a7de451..0b7b0ef345cc8 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -1927,6 +1927,17 @@ static int damon_sysfs_set_probes(struct damon_ctx *= ctx, sys_filter->allow); if (!filter) return -ENOMEM; + if (filter->type =3D=3D DAMON_FILTER_TYPE_MEMCG) { + int err; + + err =3D damon_sysfs_memcg_path_to_id( + sys_filter->path, + &filter->memcg_id); + if (err) { + damon_destroy_filter(filter); + return err; + } + } damon_add_filter(c, filter); } } --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 965EB3CC338; Tue, 12 May 2026 14:37:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596628; cv=none; b=s+0E41I6l9kT9rM76klDnCucUL+Ctv8TkbnVxrLteTM0VTR8L+UUtxlbiojOFGDq+uXfCasKO6MJvb5YiaglolNjaINP/26XhA0y5y5E2FevE+HEa6KUzwMF/aCmbi5qsXSFwDTVgk/VFWKr9RsPkyfAoaI28OZ+5yXE1pvAz1s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596628; c=relaxed/simple; bh=rQroR8oz509qjIfFzIS58y8CMFJSjy+X56KqeqKaBmA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uP3XxNV3ivPxKKMb7UqYGTpUOs8Z9fT5GSa87X+ej493MzNHgLMn24nYPzpx+9MUE/kYOTTH+Iu19H6v56uT/GoJTMQCbVZDLcx7Y7WFh8R1DBpnq0e5MEypUAGdlTkMaPaQNy3ocDQRq9lI1F72F2bWrT988rR2IqWmeyQymhk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lySn+Q/V; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="lySn+Q/V" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E99C0C2BCB0; Tue, 12 May 2026 14:37:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596628; bh=rQroR8oz509qjIfFzIS58y8CMFJSjy+X56KqeqKaBmA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lySn+Q/VESrFSVgvneHkZvPUuH0oeH/v5CsIOjbXjLI2XNO+e7aQmUL9DWTyON/wg 4BuEJ3UQVJZ6CEBMhjWjpSJBRG1GMK/c0uOdJc9p4jW92qpnEDuEVaYEptORPlsy1F 6k0Ixw/f6PHgVnoNEjFWfq95Q//ImBoYOUdk230L+6GvlyBsgrq1Hf/TFAPgKVF9yC qOGAasX8/lFRurzkMad+W4/wTjoglvMGAyM0+Uf4gZkWaY0FlpGOLghX7KTkyVtXZX 8jgCxdDyv2zbJF3quNdJ9XzQYXeNyCZE8whcPa/COZzUPP2Dy6PWVmzLQhT/sYUR/t 384NfyjTILcsw== From: SeongJae Park To: Cc: SeongJae Park , "Liam R. Howlett" , Andrew Morton , David Hildenbrand , Jonathan Corbet , Lorenzo Stoakes , Michal Hocko , Mike Rapoport , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , damon@lists.linux.dev, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 27/28] Docs/mm/damon/design: update for memcg damon filter Date: Tue, 12 May 2026 07:36:42 -0700 Message-ID: <20260512143645.113201-28-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@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: quoted-printable Content-Type: text/plain; charset="utf-8" Update DAMON design document for the newly added belonging memory cgroup attribute monitoring feature. Signed-off-by: SeongJae Park --- Documentation/mm/damon/design.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Documentation/mm/damon/design.rst b/Documentation/mm/damon/des= ign.rst index 887b45cbeb716..a24f9f00d1837 100644 --- a/Documentation/mm/damon/design.rst +++ b/Documentation/mm/damon/design.rst @@ -293,8 +293,8 @@ registration is made by specifying a probe per attribut= e. Each of the probe specifies a rule to determine if a given memory region has the related attribute. The rule is constructed with multiple filters. The filters wo= rk same to :ref:`DAMOS filters ` except the suppo= rted -filter types. Currently only ``anon`` filter type is supported for data -attributes monitoring. +filter types. Currently only ``anon`` and ``memcg`` filter types are supp= orted +for data attributes monitoring. =20 If such probes are registered, DAMON executes the probes for each region's sampling memory when it does the access :ref:`sampling --=20 2.47.3 From nobody Fri Jun 12 21:29:46 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 3FDFF3CDBA3; Tue, 12 May 2026 14:37:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596629; cv=none; b=K7fjECWi3t2HvPk79ohgF7WOouytW7NSFEcjqopOeeLJYjJplqY/5J/EM6KfxfMLe87yAmQGU8QZNZAzk4Du/X+w0TslzAk0Om57i5fiT9Wy9dwY3YgjYg+ppb5RG1hVlWvsfMwGzJ+khD+Pv97/TvTzr1uicI4dCiqpb9zEV34= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778596629; c=relaxed/simple; bh=QiZyClLpM+jtGeAv4uUzZ2zYrmnjLH6QxsmmjjG7o5M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=QHQapYn/3l93rA/1zgXX1+rr8CakSvYL/fXnQI8E/Frr3KOPiJrgc3iPHuyPk6E67VUlIB1TeEDOTyTrGigTijjPC8PWQeqYdgKIEuApPIpXMaS+0zUy5nGp/7L2qod8ZfLEYoVWTdCwQ7DxnAoSewsigNc2/xO1W0axVmePuJo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=j8bnVnRH; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="j8bnVnRH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 98AA0C2BCF5; Tue, 12 May 2026 14:37:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778596629; bh=QiZyClLpM+jtGeAv4uUzZ2zYrmnjLH6QxsmmjjG7o5M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=j8bnVnRHe0oMq1ecjHuGJ5gFJ+0gNOQuH6/dC+xnhET/c6Y4OvlTL1PpRIpwqy2l9 jZcxe7i8FDDpWSHTHU1ZpMLpLw1MqE0PfoKmoLjMjWib6a9JZTgIaof48NUalaPccm QgczXgD2MUURpkTcAFah3jxP2DxhEubA0B2E3UVbeZ3F/1PeHMvV4LFnAy/Elfw9wL 6itwvyNSOHyLF0m89hwrOMeyU3V5T06EZv0vdIz+T6lxsDCqNL+frXU/sDzXIgDhUd mkkjT/jDJwg2G9crHdHrHhTeZSH0l27Xpwuxl+7OaayCoPnVN5QK0Cx3OFu1TglsDa gahkHk+7+tg3g== From: SeongJae Park To: Cc: SeongJae Park , "Liam R. Howlett" , Andrew Morton , David Hildenbrand , Jonathan Corbet , Lorenzo Stoakes , Michal Hocko , Mike Rapoport , Shuah Khan , Suren Baghdasaryan , Vlastimil Babka , damon@lists.linux.dev, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2 28/28] Docs/admin-guide/mm/damon/usage: update for memcg damon filter Date: Tue, 12 May 2026 07:36:43 -0700 Message-ID: <20260512143645.113201-29-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260512143645.113201-1-sj@kernel.org> References: <20260512143645.113201-1-sj@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Update DAMON usage document for the newly added belonging memory cgroup attribute monitoring feature. Signed-off-by: SeongJae Park --- Documentation/admin-guide/mm/damon/usage.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Documentation/admin-guide/mm/damon/usage.rst b/Documentation/a= dmin-guide/mm/damon/usage.rst index 465bcdf89b182..84741b4cd1877 100644 --- a/Documentation/admin-guide/mm/damon/usage.rst +++ b/Documentation/admin-guide/mm/damon/usage.rst @@ -74,7 +74,7 @@ comma (","). =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 nr_regions= /min,max =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 :ref:`prob= es `/nr_probes =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = 0/filters/nr_filters - =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = =E2=94=82 =E2=94=82 0/type,matching,allow + =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = =E2=94=82 =E2=94=82 0/type,matching,allow,path =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = =E2=94=82 =E2=94=82 ... =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 = =E2=94=82 ... =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 =E2=94=82 :ref:`targets `/nr_targets @@ -289,7 +289,9 @@ the data attribute for the probe. In the beginning, ``filters`` directory has only one file, ``nr_filters``. Writing a number (``N``) to the file creates the number of child directori= es named ``0`` to ``N-1``. Each directory represents each filter and work in= a -way similar to that for :ref:`DAMOS filter `. +way similar to that for :ref:`DAMOS filter `. When the fil= ter +``type`` is ``memcg``, ``path`` file works the role of ``memcg_path`` for +:ref:`DAMOS filter `. =20 .. _sysfs_targets: =20 --=20 2.47.3