From nobody Fri Jun 12 12:42:39 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 1DAFF34B437; Fri, 15 May 2026 00:44:45 +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=1778805885; cv=none; b=ABDP5/NJ+4rEx2Gz9NHdhsqQ+sDWFeZ0DCHXYRIyJ8ltnf/Q7No9XG6Yf+4UHLSkWYf6psL+x0lgGW+osZzxuW/ljtLLqshe2I/ph/BrOyVWkNLYU9wlsDItgV3977SQndK8qQlqDL/5M0J+SVoZaE6FmQllXWsD+7VCt16aINk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805885; c=relaxed/simple; bh=8LT/D7TOnQRawE1lXMWBuu0a3XIQelloreA4qB43lWw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SPoFJTc50tKoSc4Gp0TdZ2xJD3O8omEChpkSlTBoh2eEo+SAsQ1nP61MrJ+D2An0W3losfuZd29PAraFnjFBzEA1TTVfSokJzy5YhPoJPNIkB7ypfNnWFq3aORPTMXIM8K7Rer+AcNuHprLgjrtGflUX1jsVKilcttQaODbPt94= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=F++H+KOl; 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="F++H+KOl" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C7A52C2BCF6; Fri, 15 May 2026 00:44:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805884; bh=8LT/D7TOnQRawE1lXMWBuu0a3XIQelloreA4qB43lWw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=F++H+KOlO8MkMRFskBBG0uJWm7L5IQ1LPJ09nhxBk6XE0A7rwOF/Z3+ayz0m0/Lxn jajmFr4tcELhu1v+vGb9IXiX3JPeBbBxG49JXmsOAT4BnSQacCKpoFNU3Ef9x/V77n OZd7nu1mgTrfG7hPtD6cEvHqM0k/cp7j8+EEgi8XdaakFOrlHBNV0wKM+pwD4V8HFE 0SQquwLoAsL5cZnPW101qK5/1Pjzr081BUFQXysh//fXYxWdk393r3Qtajz84zesWM 5RKGjwTzHIuTAG1okjniO1BM5lNLjTVvOUlCMOCvbNoOf3w251Ip5hp7hJenv742Nc aREvz/5OIvPHQ== From: SeongJae Park To: Cc: SeongJae Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2.2 01/28] mm/damon/core: introduce struct damon_probe Date: Thu, 14 May 2026 17:44:02 -0700 Message-ID: <20260515004433.128933-2-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 f2cdb7c3f5e6c..a8fff5325b010 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -721,6 +721,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 12:42:39 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 C4A8A2F28EA; Fri, 15 May 2026 00:44:46 +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=1778805886; cv=none; b=unqQfa897j25swFCDDDE0h01Oi0DHgFPxPfZO4EGm+oTzFr1fgysWZnSmf0cZGCJEhFwypeK1ftfujgtI197XywlBXfLfrpU1YQceYojUE45gm0GEcGDobmTHwzQh3lr2+ZNQWdXqhTw31QvpOOc+z2ackv045r3U5DR5bU9s84= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805886; c=relaxed/simple; bh=01iJIEtk8jxRwVFE50bS/u85msL+GIHF9+n6SYfgnN0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kk5lcKXy7uOtXRSD5pQ45OwkZDP2EUO9qkkjiRAqnwW4VGLuJZ/Msnn6MEhRzwa1+ZqU7AOnQYsWPDiLQ2ZlXVBYou2BnNxNYVtphFXsducmBlvT/6rFfoTdxTmZyO922mXzM3471HYTmN084WxA6q5m/LO2WjsclYi/V3z09qI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=f9IAxz97; 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="f9IAxz97" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5301BC2BCB3; Fri, 15 May 2026 00:44:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805886; bh=01iJIEtk8jxRwVFE50bS/u85msL+GIHF9+n6SYfgnN0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=f9IAxz9732L+u2X9kM2t69E546JI98VBHv0tsyapmY9RJYt/jVZV7oev1lQPmg1Nx XeC23/5wRZ0RuVW0bj6kI73EKTbOMKkT0PQ2OoJzKnQAqrqdoAEW3FKHoDk8Yl660E x4jDmpOurHwpT70ZQug1LjqszY8spxtHjFb6WM8kuSXHUq8xbySEjzy56ajGUKALb0 6yy1WX77ObnEJwQ6u+9GNCh9dpva4aMcbME2LVPKfr1+MgnlgSzv2Srm/gAR+vhfjT 8YoTBGUyhBHvda2d+dI7OZB+Ix+mfBwjkcLMqMCGOKQ3RPEyyh7+4eNuIwDCMdRo8x Us0S36xE6pTpQ== 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.2 02/28] mm/damon/core: embed damon_probe objects in damon_ctx Date: Thu, 14 May 2026 17:44:03 -0700 Message-ID: <20260515004433.128933-3-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 a8fff5325b010..3ba5a31b51769 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -847,6 +847,7 @@ struct damon_ctx { =20 /* public: */ struct damon_operations ops; + struct list_head probes; unsigned long addr_unit; unsigned long min_region_sz; =20 @@ -879,6 +880,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) @@ -921,6 +927,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 3dbbbfdeff719..0e55fa70fa5b6 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -109,6 +109,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) { @@ -601,6 +633,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 @@ -621,12 +655,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 12:42:39 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 77EC72D838E; Fri, 15 May 2026 00:44:47 +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=1778805887; cv=none; b=COBJjq6gd1oKVoA5ZC8+9xUyGgwgFDwd5mpdd4youe+TZz7vOb4XxHqUzg62suAEiNn60VYSRR3KDo5p8NJ2dZvEMAupUVqjURzwdHh4QXIy3TN6XEGTF9AyBziSp+1tzzffZzW2ELMmFWsB4ktLsnBfi5yoUV5RDd9JiN6eYOc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805887; c=relaxed/simple; bh=qZfBkN0zGN2DLhW9VkA27Q3IfwaCqxHeg4H/ZiPWbqg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qsnlL6GdojZ6PvZbpTdjZ6BJjp5jTFw+AHV1C3foELGrCZw9gz8RB6P4wW5JbwyabFoB+u5hggHW/S9Iy+mXuMPIbc8KTyHT5RWFFmm1yolVFXaBnuFSmiMLxNH/guhTReEpzyFwqJNbYq8lcIaCklqE+y0g/tafGdEO0e58jtI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GCHKvhCv; 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="GCHKvhCv" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2D291C2BCF6; Fri, 15 May 2026 00:44:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805887; bh=qZfBkN0zGN2DLhW9VkA27Q3IfwaCqxHeg4H/ZiPWbqg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GCHKvhCvGTpM/2XpsFz1lLNVSIvTRFQPOdAmbNK7MN01cdQtXR5ZBD0h8tE8hxPg/ e5eeICXUYEGBMhkKG1uN+8Emjzw0tNRvU8VdvlNu9dgpswm+srOShrdP5VDyu7MhDO OMVKm5Z0QoMFCvbJ9mIYi3zG+tfsyMNpaRqmlpeFKKLtUetOB0C2onXBd9UvvmEcVs v6jFEtyspHMeuQhhbxkuFWNfmaVOvO/fU1e5rzLi0va1S3k8Jczb4+HKaa7cN4Jk/9 aP3RVKJzp+mt9GhbzJystaLCMmpfPtSQ8S4GezdOLyAnkbrlDhh/Rl84NLa0KetHD7 l8K/14zCKqwrA== 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.2 03/28] mm/damon/core: introduce damon_filter Date: Thu, 14 May 2026 17:44:04 -0700 Message-ID: <20260515004433.128933-4-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 3ba5a31b51769..9c2576f103767 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -721,12 +721,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 @@ -880,6 +906,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 @@ -927,6 +959,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 0e55fa70fa5b6..44943d654dcce 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -109,6 +109,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; @@ -116,6 +141,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; } @@ -132,6 +158,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 12:42:39 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 859BB357D1A; Fri, 15 May 2026 00:44:48 +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=1778805888; cv=none; b=ezuuTg301sS+ZXgxLLwIICxfCfRNdQErmPKa7tPmR2MFGsY0wvuVxfFeEtEWoz1Njb2oUo5RIn7Lf0m2fAFMpg7k9ak4bPugI//XbxNVmd4Q4GvZzsMxPfOo8tV1vSXkVJ09d9uNVub0qOHpkfN30kOn8yXOPAi/Atu0dfipBqU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805888; c=relaxed/simple; bh=V8jJ5epB+GwJSdNuM2GEIbS33YAdZRISnffFQmMwTmE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=L/NKBj/yWHL7eCxKz2X+rgvtdIYA08CdleO+HbojGRa2ydkevz0RR2YlcZJqtpUDqAPwO0CnTuD9Wkc8G4CVgZYVj5iBeV3MURuQk+9TXVhwyzrWQ5Fw7XbbXyHC3OcNGpGjwS+cjU9laQX7p4XdSqG640ar5NAOe8HsFKVt6SY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=DEag+6Bh; 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="DEag+6Bh" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1D9C6C2BCC7; Fri, 15 May 2026 00:44:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805887; bh=V8jJ5epB+GwJSdNuM2GEIbS33YAdZRISnffFQmMwTmE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DEag+6BhvYJSw028G0t8O1d7yqMVKyRpjB5E1/J++lmoTA6dpKdJ7GA+oy55g7Uzt P36DjO9aKIfGSOHQO02aTSTwlbYPGqdIb4o27ZP35TqAqYVrYqZzKVvBlJdGoqUouj djw/KLj7Pz0GEzKb3FEUMg6jRShh4QzrXGCybNfyAg7Y/ON5A73IUmyQT6n1+9zaTt 8JPHmzr2j3QxMqfiDVY7XK6N10BiSiAbTPFLIQD0SWxxKjMgIbE+V6hYxPF8rwyomp NyfMWJz8PEejdzfsE31a6iVkn8H2mTkEOfsWTKT7T4ZphdoDaTXREaS7Zl464B8sil Fk3x1WDrDjGlg== 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.2 04/28] mm/damon/core: commit probes Date: Thu, 14 May 2026 17:44:05 -0700 Message-ID: <20260515004433.128933-5-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 44943d654dcce..15f2795a1156f 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -129,11 +129,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; @@ -171,6 +194,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) { @@ -1378,6 +1413,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. @@ -1418,6 +1519,9 @@ int damon_commit_ctx(struct damon_ctx *dst, struct da= mon_ctx *src) return err; } 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 12:42:39 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 9933134404A; Fri, 15 May 2026 00:44:48 +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=1778805888; cv=none; b=Io897fqpvLPUw3Ea0ISwz5CS1nTyoivZhQwZtXzPLFzK0p9FKhI77MLoxzsKSCqryk7p83xbQbLI//UE//6yunEjYEKjc9El1q/fN1sllz+ScsfldFqn15sbvjEDww2ll+ReJqcXOzYuxJfv+I6xtycnxs7xjmZIpf9UfkdPsgM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805888; c=relaxed/simple; bh=nUMg5BO3GWRW+rFzmCKpLHBjk9zjtVe3/poBms+RH3g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Z+seXWv/GvqYMU/JnJ3eeGBB2KOHgXik1L4gmK0+0P3Hl4ovHHX7lrwA3G+W8Eflt9jLh8dUf4vfON8r0wYuQ4rFZ8363LO1tVbsPtHXownTLr2v1kWzkcWnMWuY9EVWlsqNPck7dmPuxRcsjH+YBRbEDe3IPmx8v8Zy0EtzG+o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=eJy8/cVJ; 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="eJy8/cVJ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 70F6FC2BCC9; Fri, 15 May 2026 00:44:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805887; bh=nUMg5BO3GWRW+rFzmCKpLHBjk9zjtVe3/poBms+RH3g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eJy8/cVJ81Ae+2eCoSi4N8ohqYC0QqIvbbjba8mrFJOd/qQkvPhB4yjhvbIwjqbhw UCheQXHCUszPehMT6MEus2ROhKegttMtt/GHOEqMmRsEVVepNcVOelR8fRxJlo8alI zLi+heVms3v8nv0gnstcOKjaIDDEHeYkUeEfcvjpdh0QviJxJmy3anIhXhDULEN7en W6/vEXumqA1yiJyAH9k0Cr5KmM+h73tGLjLQtG5W7KKrj8Ra11FWfQJA9e5IZWKacs oB/rSPWu97y/lKHb+dJJqFovmqzkP5fkYSXxESmlGXjx+W2KmSEFSskTYrndslnW6n sMbIwpOvcWszg== 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.2 05/28] mm/damon/core: introduce damon_region->probe_hits Date: Thu, 14 May 2026 17:44:06 -0700 Message-ID: <20260515004433.128933-6-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 9c2576f103767..bf78ad849a9be 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -16,6 +16,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 @@ -52,6 +54,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. * @@ -80,6 +83,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 15f2795a1156f..f6b4beb4b8ecd 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -225,6 +225,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); @@ -235,6 +236,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 12:42:39 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 9BC0735AC09; Fri, 15 May 2026 00:44:48 +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=1778805888; cv=none; b=Uhug4FOtmrS6jZbI/0IWFK924HpyeO+LELDvZywwcRg+5X7+GZtt6iqUinpB3eVQ6dDWZS00kETVCqCRaa8aXrRhb17lCRgnxoNic/FgEQHypTVUcfq7oHScU0c/vy+KI76WvEqc+iPXVdlAQns8JTQZONhhmAVPDRNcJCMCMPY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805888; c=relaxed/simple; bh=RGEbpNfLmShGll7r/qhOT15wBkdAJslIsAuiy+doplM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Utgf6x3YCJUGcpdLReF9b9LNZ0rS24PbUDshdNm2Wf9opIHjgxdemQo394GOa2DabUqIGmA4HZjppoalEBs83+d1fbnRKXzAvRj2KZTdlQYA9qhf2EPcJ2WhHUF+mcphMGZBvTY7cnv0G3FcLBYCWxXw4kaDhvCYh2S+sbUACM8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=m4plHV+z; 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="m4plHV+z" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C51A1C2BCB3; Fri, 15 May 2026 00:44:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805888; bh=RGEbpNfLmShGll7r/qhOT15wBkdAJslIsAuiy+doplM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=m4plHV+zvCHT+StkDPdBBZvBwiNjctrHdOjsCcnY0UeVvnFiaupCWwQXzPFzG0sXr /cA71aZ3g+I7zcPohcXC27wMJoQRyo0wsqFY7tdl87FjyCfhPa2+BryYJldO6hD5Ed zD5W1sLC2YchBOmHBT5Q+3X0cE4qpOfR4aZbSRsKrgTly3VzgahdpqJE6dHCKxQF+y 05RdKOqONQuUcndlANvUKb9RQFV1Tg9BIYJX1HbQN/8AQm7nRpGUoW8jXMRs20qo9s GnuYeJn44Z1yN+zFk+SncLuBAwQ+18N8RyQR9PyUtVpGkVowfNVDspkFYaORGpdNDa 0gcPT9ZxyPmUQ== From: SeongJae Park To: Cc: SeongJae Park , damon@lists.linux.dev, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [RFC PATCH v2.2 06/28] mm/damon/core: introduce damon_ops->apply_probes Date: Thu, 14 May 2026 17:44:07 -0700 Message-ID: <20260515004433.128933-7-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 bf78ad849a9be..36a1162b6185a 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -621,6 +621,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. @@ -664,6 +665,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 12:42:39 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 4F3C135CB95; Fri, 15 May 2026 00:44:49 +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=1778805889; cv=none; b=b4V1epj1zYDne+WqCW3zK+s1EguqBMXOsrSwP/sovFaEF6GcYsmMPBpuiTZvioTaeERKsaPke4Ekb8dhlcZ/er2/hgwTQbarbFmbqCGgeye+U7t+/7O1J81TZTaZCg0O7EkZf2tsKFVYB1mYpRTid5JLh8dk0kYKRx/kqcm6o6U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805889; c=relaxed/simple; bh=hJODIpSBe8AcoDpxEMr90X7CC52zMi/o1RheHHmVCuQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ETEl8Fiaty/BZb8L7yYA3JFp7+6Icy49Pa34CkfOEXE/YWcEF6hjjmg05Je+56mW3zrBbhl2hmjJ6RavibDvS/UJFU7PL+qZPZ4CIhfatcESuVltv3x86ZJ+C63QoAadtadt1hOsHhskWQLOBY10FsifJJmuu8zsZINqjh7ftvQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HvWDiupR; 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="HvWDiupR" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2D8C2C2BCF6; Fri, 15 May 2026 00:44:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805888; bh=hJODIpSBe8AcoDpxEMr90X7CC52zMi/o1RheHHmVCuQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HvWDiupRPolo+bI3uwA60KKbJSlraBTVeak2lv4k19vVRUsmGYp2FM4FYG0HezUWa JNRqhbb1tMro1nEZQqZRlQIk+W++tGR2PL1KERbGAVbDGxyYHcruVGetbp76QqG9EG mDkbw19PUUYbJofBvNMsBl9+CRt7gxPjRvUmO3htl/vwONMng087yE7Mwz3KTtQRWE h9Baf0U2IyesUlOsTQsrEUfHudVljtcfxwkVxLwW/GQCXciuUiY9CNwsCGnT1NIX89 l0c8sL9WCMQq3bowKSxfzboyTZnrKOm5ye6sHwPLCb5jVlWJEtAQDsmeNsAXw8NfrI ZwSiRlAueNd4g== 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.2 07/28] mm/damon/core: do data attributes monitoring Date: Thu, 14 May 2026 17:44:08 -0700 Message-ID: <20260515004433.128933-8-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 f6b4beb4b8ecd..1c9d2fb69f98d 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -1886,10 +1886,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++; @@ -3172,6 +3176,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 12:42:39 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 33DD83385BE; Fri, 15 May 2026 00:44:49 +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=1778805889; cv=none; b=JYKFUWQLxNd2ul7TXp4Ambgu3G2z/WGi7bkM8iZCDmsJCSf+R+BMeUQt9T0Bd00szvd2dDkEdPF3HvpChQqgHKYgzXOJTyJOByswkD+8eP9hdL3yjXD6wqWOaQEpEdNq/GixSGGTBmwxSqtWoexb43i183lgJRuIB1x14H/J9C0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805889; c=relaxed/simple; bh=XJz1lrbnCSIcGGsCp292XxEMr77UR12PQX3+0VG2CCU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bSXj7sB5V7EHK9SGoHYcmOybQogtVSyYQeiZe8N60aplAjHGO4OB7fzLIUqHweSM7t+gyvmF0hH2SXxmuvjQ+eBQKasf3iNS/IpY63yu7l1/yHNqmS7M6zI8Q4FC0XN17K23mED+asgPSX7rOITSh7Fjjo+JMbvTaFim9J2rF30= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=c305JDKt; 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="c305JDKt" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BBFBCC2BCF5; Fri, 15 May 2026 00:44:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805889; bh=XJz1lrbnCSIcGGsCp292XxEMr77UR12PQX3+0VG2CCU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=c305JDKtdZwckegZOgZqdHs3w1vbcaGR12vM+XkFcV/Er2btR8k1MWJwb9fycDBus ripuud6obkSso8KB9L4rSdbxUEDoijhQ6ZQeEqY7YkHEqa1o9sDGYm3/7OXwEQd5M/ klXv1oHXsyymGwYXMeJmZfgjmdFxBUuoLBeE7ayixMTskUWotEKil8awTg7GmD/HL8 caBK+U7g8N1zokS88daF3Ki3bb7nfJHPHVbLiAjmo7CbsEtVyd3jzfx21Q+/b+6zu1 YEiwad+2vF1SGqiCWjsk5T1QsmG3UHSgSjFk/MLFNqTB8SgI4hVOkRH7Ky0PmEsbhs eJT+LlfRL+QuQ== 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.2 08/28] mm/damon/paddr: support data attributes monitoring Date: Thu, 14 May 2026 17:44:09 -0700 Message-ID: <20260515004433.128933-9-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 5cdcc5037cbc1..493bcca8ff104 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 12:42:39 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 27262338936; Fri, 15 May 2026 00:44:50 +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=1778805891; cv=none; b=H4gNiezaPPuRFibwfCVpCOtR1k8EIm8R0hW2mpQH4Oz0I1XQUH8yfGwg1T/vbeYHXKY5T7R93SmuZeRbl+Dd56Mwa7gOqf3xkkKfggnGYCzNszng/JxECjbzq+LDoRORqvmFR9IxDDcthy7hJR2C0cHPdXVdjYDPgXZKbxoc1nk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805891; c=relaxed/simple; bh=iRZBRbnhuMWGPc47mimwPtAfnZSCPltTg9pBo2Ew2oI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HIkwPG8NqT+Q86ztQIztWjNO0QJB6xUI6R8lrvLNLxxBJKpTBH534YuJuHocD5hxeppd6MhWOuRiUzx3KL6sGS+F7XA0N6gbr5HrPZlEIwhmmNkHIynBHOe0uuFkOYfc6eJkQQMmE16xDOiQLOYgM6EMyzuHGFm5wzc7TH6M/Mg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=I8zVs/ck; 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="I8zVs/ck" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3588FC2BCB3; Fri, 15 May 2026 00:44:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805889; bh=iRZBRbnhuMWGPc47mimwPtAfnZSCPltTg9pBo2Ew2oI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=I8zVs/ck7Bg7BtG7kEZLqI6rs0Oo0A07j0/cTzcoDGXKtRDkOl0ob3zWdfbg64CLE hKwnZLNo1No2WgaUCsvI6qV8Gmah6VCi7U3Jhf35LrKleChJySgl2u9v7TRARtbdag nnmV92+xmHF6+0XJJ9KVoYXEnKjjeeV1RpO7TyzdqRiQiIQDcPXH05MHX1M7tKuq7E Xp4URpN6fGNvcmAJJw0TYWRxNbBsa01ytMeJbuBzBA6qZt89cvkkdMV9dzDbV2x3AE S8YSGM0f3cA7NFjYormjyTFwpCzsotikv9Jvb9b2Ky51AP8NkUDbCuIlaQJoS4lKdI +IGtNzzQaDgmA== 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.2 09/28] mm/damon/sysfs: implement probes dir Date: Thu, 14 May 2026 17:44:10 -0700 Message-ID: <20260515004433.128933-10-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 eefa959aa30ae..5f3b253f50ebf 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 12:42:39 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 22A89E555; Fri, 15 May 2026 00:44:51 +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=1778805891; cv=none; b=aRchhvE3dhtbcEtW02fhqoaAPE8aM9sKvEYPd0fVciPhrXsb//yi4PZOc26XZpT47ZpnyGJ9Y7Pfa4sBTEvigzLSbSsy4cumHiDi1stRiETl3dO7CvuOcEaUJfA80IzAD2LPSP859ve+rYB54mWYQRcBQxRLTnbui+bzN2BHIJQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805891; c=relaxed/simple; bh=R8sw7cd3IqpXiTp+P06ij8H6WLOiT1rj6PEiqecHRpI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=f+QtoOddmVK9vi0wxOJoKNJXcqx6ZaD8+9qPrKpCMKLfNkwIBbCZLRbYwql/VYP0m4tSlmiiault0XTcLtdCqs2rliqUf00gOKhTDHsyr8RErfcxa+AmMSIbGrWLyjgy3ZwgkWb/z3CxWvqBQ87gEGpV2qsLenK0pRsmoZKM3XU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=bkj++EYu; 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="bkj++EYu" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 90F6FC2BCF5; Fri, 15 May 2026 00:44:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805890; bh=R8sw7cd3IqpXiTp+P06ij8H6WLOiT1rj6PEiqecHRpI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bkj++EYumGm7QpLo9MUXQqAklmyNkKzq6wQNzFE/Ka0cCt/LHT0LM2+EG+KHnZ/Si OYvymtS01FBY3rMx0tSOVwgxs0CJOJL0e/hk+TmAZDg/0vdqJ6cpioG4uZrrEmqnqQ zmBN68KF1RtSE3TCv8iD3drYf7As4v587QaZGAKxD1pjSaUHOsvvZusUY/StWSfEPr OR0JxnMkS63jozC4CkTfbnwDcxJPG8qIs6a7Ayp4SjoDkLkINfuJWAyrI/xQQoBOhH muaTTGsVNtCwqqZiIQDhW3TNdbWDwJ9PklqyONceV0WdFhIlf6pCksEdCH0TiU6XRt t6pmySXni8JGg== 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.2 10/28] mm/damon/sysfs: implement probe dir Date: Thu, 14 May 2026 17:44:11 -0700 Message-ID: <20260515004433.128933-11-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 5f3b253f50ebf..c028e4b1281e6 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 12:42:39 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 EDC8536493F; Fri, 15 May 2026 00:44:51 +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=1778805892; cv=none; b=ouokLaVbpAmfof9111HT2cpEjIMXrZJOdBXuhz05/68W6yoX5r9Yr58bS1W1nCRmHsw1wioQGrwKfNHTDA0n2RO7xEdm0h6eJeRi5S4nAZTe4mfVYJHDmc536fSI/ro2EHJyu3maePsTUOapok78dpqW+peJR61/7nJSMApzZpg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805892; c=relaxed/simple; bh=S1XmGP9+Xcb1Qcew2IaauTokk0V1jo5N6xOnyHaorjs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Xrlojn7BoR9CXARUGW+awZ31K3H6MidePDYoGlV9p204PK8/lc0w5GpKUxEKJH2+jjejqw7spLyZR7xJ4NYP4mTTqzbfpPNyIg4OsqTLFzKc+T7fDgxOVxSOtd5IZueVBTwsjkWM6otet0Ny77zABeUuI/opqUaXdGFo9K/rL3M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=V8b11s5J; 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="V8b11s5J" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7219EC2BCC9; Fri, 15 May 2026 00:44:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805890; bh=S1XmGP9+Xcb1Qcew2IaauTokk0V1jo5N6xOnyHaorjs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=V8b11s5JMpFrUIzpDhCudJPn4MMM6r3CMpRyKtuWDNsH5IyPQxJxS8WbqEUyzxOjW IHuE5Bk7riC9mLpURRk6/dneEp3+LHSPHRVrCoN4yyyoNdeQk2hNX0jri9ScjD5kFY xa4yp0Rw85l55uH+ExRSUnHKuieXyU8L66/LafrQ/T9+c2ZNQ2iGJtBKOG5mb3rfSD sEaq5s12o6sK69gF/ed+yw+XyRP+truly6hTAdM4+aOi0iZ8YydPcECCP4S5zHAZu3 +F9sMO0wAOdP+qElgTAwzy4JC1GtL6pFALxwNHzo9LxJWSpvg0IW4Ba5bjicXWXhsN XS3yG7Ahh6CMA== 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.2 11/28] mm/damon/sysfs: implement filters directory Date: Thu, 14 May 2026 17:44:12 -0700 Message-ID: <20260515004433.128933-12-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 c028e4b1281e6..6b15886190545 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 12:42:39 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 1EC8E331213; Fri, 15 May 2026 00:44:52 +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=1778805892; cv=none; b=VrQ51HjjG3TemV+P0xIk6GkYjPP2zXhp8oxsuoZncwjN4Etig6yQIx1lu+VBA9hzdxHTNS+Ow+eOjFKh0io9S4rnOHRNktXjtqFy60A/sD31tMfwedFr/u/fJMcbB7+t83+Y+m4GoAxZDAWRE+1dCtl06xJ0tK7W4aiEUBI0z8s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805892; c=relaxed/simple; bh=zfDwKIyyj4OhfH36VyCWqtoWpGK8YTbqZuxXCa/IX6Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bN4hmLKGjtWWcXAp3M7aeD/kzWVF89L2X5PlECMqQBTZkAcTsKaTf5zMRqA/lZE4sOikIuiiOomodC05u8Zjh4vK3m7cazZwAbzuEZOVfgNuxlp4af2bxjtdwWGTYDIRmNFPbpW8vDFVHvfH8KZpKryK96QoI36ICXCXM3Fin0w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=RA2TSQEV; 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="RA2TSQEV" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C939AC2BCC7; Fri, 15 May 2026 00:44:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805891; bh=zfDwKIyyj4OhfH36VyCWqtoWpGK8YTbqZuxXCa/IX6Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RA2TSQEVJhVhzO7gF5aqMZ/OvHsa6L40Jgzr1AEMykZpdrFgObt/f9S5tat0JddI1 naZzD6QeN8XperO1UlN+3CtDrK5cI0mHkyJQvvLPRxyJVC2Ioa9c5EXRDPIYCtdVx8 yIsz9NDuh289RfhKm46JIXVX6h88MAu2hUw7ccI6QMadWIEU+mAEcX6d/Pve+bI0Cs rqsj1X5e+3l2BsiuP65I8QSdrBVl0YS0xuLdyu24SeAqJAm0nU4wvSiuVLdoVDDSQc aRFQhZ924DCxOvbtPCVHXMngPEX6YVvKp5RzMnByG20O6lTuUQCTTRVYgtGwWQVIT0 QztMt2NBIcZJA== 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.2 12/28] mm/damon/sysfs: implement filter dir Date: Thu, 14 May 2026 17:44:13 -0700 Message-ID: <20260515004433.128933-13-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 6b15886190545..9f4ab28cf8734 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 12:42:39 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 C18F6367F2E; Fri, 15 May 2026 00:44:52 +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=1778805892; cv=none; b=m+4I2WF40QoMjMGq9cU3zkw1uNwbg7DtBC4F6qkbfIjVRe1ExpKYGmOTepmXC9OYTIayrrvdKXiFgPFjs/aPKNWoL0VjUwmQCFEW1S/KamCmrWUa12Vt1RbVXdmfLqEpzxhhZOMZSH+1eDOjP9umIrwskZU3jNoXaJpxYs0FmkY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805892; c=relaxed/simple; bh=x+zVZsyuCxQFI5S2rBudXwEq23hlEWV/J5n5iFgOKyY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Yy4K2WGGFSFbsFIUlkHISpDZZ3V2qV8g0zmwODwTW2SP9JP5VePEr5mrAe+v7+nNDaFYRG3FFxn7nB6qklx+R7JNYUIwdt6ABIZdkTdzPSYgPfRjFv/DUDn2v9QKRWVAp0kXt5A0OSSWx5BfmU/wOyVS0oAXoXAxVjVEk1gILPI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cE0MkSsO; 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="cE0MkSsO" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9690EC2BCC6; Fri, 15 May 2026 00:44:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805891; bh=x+zVZsyuCxQFI5S2rBudXwEq23hlEWV/J5n5iFgOKyY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cE0MkSsOf4Oay144eBv+qMcYAKnn6DW/g0GQje+aq768q7hFjacIpeI2QbYQiq43F Z8K0FG8tOBh1jjN678WfVdZhNBD/USZS43ckYkUVdE85qgVTJXrUxlDVccyKNYoE56 UVQPum4oXColJsUFxTmf/YmtGH2Tt+cRSm/51pufMXZJUfiQk8Z7BnIyRh+XDEXmre kMIORhJch/mvbrl5c4qqdQl68OkQUlKOOaRwggdMCOx+Euqzjaqyl+ShSomxL1BLAJ anpLVyNmE5QtPhpKMDdPM5tlGw6EJMUcY+KmZA3uhwI5poL2f4lbGtO2Vk0/0Kt9l6 8sPF2IIt1uFYA== 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.2 13/28] mm/damon/sysfs: implement filter dir files Date: Thu, 14 May 2026 17:44:14 -0700 Message-ID: <20260515004433.128933-14-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 9f4ab28cf8734..dd520e39d3602 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 12:42:39 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 AAB40366806; Fri, 15 May 2026 00:44:52 +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=1778805892; cv=none; b=K/QyHBj59AsfTnPh67yrMCXXophsLRxyKYn17yS73EDD0ToQrxa7NQ81zNzx2IDSRHFxLuZhBLb7tFiAji6qTo2lxxzzVywZ0c4Ei8biNAzuv7N8t4IaIHvPv3LJOR5bR51jwLRo+If+Zyu0IHC2/9/aY8YEYZkiRFCob269z4s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805892; c=relaxed/simple; bh=FnXqCOHFDGvJv0wq5YsdefT6POS2mPmRouI+CopcLks=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=d8Yq/l9M+JPH4Z98qgU2mX6U0Xfe/oYnsukewOPDEYGLWJZYzwfXoHo8FL1m9EGAz+iubNCwKLSNBdOB51Fbgtje9lLgwNF9l+EkFlgLmG8lQm30o6aFFmMa5FrulJW1RqNDw5E4KNAvIWlDCqFhbt+XD9JlLRnpvcklUAFEUDM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=WqAbhuCZ; 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="WqAbhuCZ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id F2331C2BCB3; Fri, 15 May 2026 00:44:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805892; bh=FnXqCOHFDGvJv0wq5YsdefT6POS2mPmRouI+CopcLks=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WqAbhuCZYwRVTcA7zp+bkbgr+8Gico9Vyk+HnlFgYCZbFgcBnMGkWw7OE4gec/taI qk9sHLP4yHjyMl5aMfY6HcjTMVJ+i7WCQ+h0D7c8YpjhCA8JDWd6HIDEYPoaryWMc9 R6FC/G/Nj6uOjZFpmrn03B8wVLPZR1Ve5H0790rxg9RpwNwlKi0y05IC7ErImmCQDL OpEXOVx/RPSq3+xkoF5JjTzX7U8sZekzRO11/s+OW8d7/cdw8kLVFA+R7FZKAaRN33 9uAfmNXJOlpMgOiJJy3qbaTtlDDFCLlwqORZ55aWzwr+7wvQapV/H08MzzKQ6j+QJS 1beloxFlWaGpA== 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.2 14/28] mm/damon/sysfs: setup probes on DAMON core API parameters Date: Thu, 14 May 2026 17:44:15 -0700 Message-ID: <20260515004433.128933-15-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 dd520e39d3602..c2c172aeae149 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -1825,6 +1825,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) @@ -1936,6 +1970,9 @@ static int damon_sysfs_apply_inputs(struct damon_ctx = *ctx, ctx->min_region_sz =3D max( DAMON_MIN_REGION_SZ / sys_ctx->addr_unit, 1); 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 12:42:39 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 A5F6B35A38C; Fri, 15 May 2026 00:44:52 +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=1778805892; cv=none; b=s2yigpdqBC5sgjG+LqeP0IeqveSlIww/8AyZjcwEGzxcJhbHxowmCkf8NnnQz7krHuwFYE566ipZyqq9aj0YBTmvFIrFcLoGNiOxSqQ4PDIuLiKNa+bwfxhNOv9oz/6eIK0Ixzs1+AK0uRTelc5enBBO6GBrQVxgRuHPBDMEg20= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805892; c=relaxed/simple; bh=gPP1MpPsz1Lrp/c7Vr+Jm9rt+Mkaxs1c5q78AGxoKeQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=catsinvWFoMG39B1sADeXup5uY8bSYVpjNFCKS9NvSrQ5/GWp6zIQB4wYRAPZ+teCPYeRYWDsNttbhKq0ya8zD8AFQa9QsecU53IWgCA6y11ocCuyPbXmDGNfwpbHfo9WJ/QttXXeFUEHSPdzRxZjDvOkKdY+sJs1z5VRSaMYjs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=plApqCsO; 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="plApqCsO" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4F3D2C2BCC9; Fri, 15 May 2026 00:44:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805892; bh=gPP1MpPsz1Lrp/c7Vr+Jm9rt+Mkaxs1c5q78AGxoKeQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=plApqCsOdeUT7NjjgR+S/Eajn1mRGLh69PSPsqEDmT2Tt8gf68FjmoPWSkg6/pxt0 yq6taQ9CouP2+9yClhfDgf3ijc04JeMjctCcExL4X5N22LuwL6l49zQJjGU5GxBLBF yyS0PtyYMj9sW7ZMCTcm9gatTGlPwcD0fjp6TpfNyD33vmUirD7c/lR/myDw6GOWfs EC5fT+Thf9gC3Nu/hHojFqfuw6yv6fDylAoaDEcoH3FzDf044An5NyzVM5vzT8Uj/B m1DcTgYA6j6LMW3jlp6u1gSL0I/wCfuzzMxfcNaHllx9Sy8R+q1fxOllK5Ld1ZAe3L gRbNnw4IIdbaA== 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.2 15/28] mm/damon/sysfs-schemes: implement tried_regions//probes/ Date: Thu, 14 May 2026 17:44:16 -0700 Message-ID: <20260515004433.128933-16-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 245d63808411a..0bca89217b8fa 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--; } @@ -2932,9 +2986,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 12:42:39 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 D0B97369203; Fri, 15 May 2026 00:44:53 +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=1778805893; cv=none; b=EkLzOtdbS7e7YXu6qiTiW2hBbpMDj0fhB3gZDu0IRFCf1q/LH0gpTRtdjahiJulIG7X6Tp0p8+wuEWnxd4U6+HEJXC0SQiffvU67jXoOVNj1b/MJoTGLGY83c6ThpxwTjWEdE09uVIskWdTfT2sGUCDLCMrwVBlpFZWRM2FqPD0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805893; c=relaxed/simple; bh=6D8hmFjtpBEFiNcmlc/Or4zrb+jvjV5kcWaJtrDEa+8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=o5Ho+q3B02DYzPFRa9oO7up9bXGQ6lxBeoivK4o3XNEMhLi23/fhLAHQcgtJLBOREvmtTYXePWNz3UDYWXJNEJC0BqmwA3F38jzhQVzBa2jxo49FZFoZosoLX0c0GJ7GG0md4hCTGHTb3CG9IRJMtu5sD64ND784KjNwdCWylnk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Y9cLFs9R; 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="Y9cLFs9R" Received: by smtp.kernel.org (Postfix) with ESMTPSA id ACF43C2BCF6; Fri, 15 May 2026 00:44:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805892; bh=6D8hmFjtpBEFiNcmlc/Or4zrb+jvjV5kcWaJtrDEa+8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Y9cLFs9REkUW0Ex027pN3iBAc3ahwOa0LFkVQCgEkDxSV2YClH0+OzvaFHjTQWkBH HjqGgtuVj5gzIkkhVjMjFrmjgpgMbkz0AVzOnKDNA0z/NbcDwkeyr9NE1usd3PLHay 9FX3t4ouo9kiY5nyTs7iMEH5Dbt6vjLTP1dcVQlnZ21toqQtIDOEGp3GQulsalRWR1 R0TH8YI2DCXJXBpJMwSsJ0h+e0Sv4OIdpoLygvSaZYYRjnXiQ2S8DLDjthsg0vfpGV DjJ7mcA81iM6IS1/LZteN2XWpVf+rj8tWxT59bLCP+wwKImxOhNbk8dEKYVioc6cYw STevlKXwIny3Q== 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.2 16/28] mm/damon/sysfs-schemes: implement probe dir Date: Thu, 14 May 2026 17:44:17 -0700 Message-ID: <20260515004433.128933-17-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 0bca89217b8fa..a83512f28c022 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 @@ -2988,7 +3077,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 12:42:39 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 DF80531355C; Fri, 15 May 2026 00:44:53 +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=1778805894; cv=none; b=Ca4JnFQ/EGYWtW5TD+fEo/kLg5ZNybofDEThSewO3wLioSFPDjzilt/4s+H0HtmsF9f2DFQ322Bx+TVFwdJiE+67HqRGH8yoxPXf2AfhzMHSRvhhY6wvHljDapSgqSw6cpn3mr+QnKlD4AyiPsI59LX19H1GIR3ERcIf8UTJGGA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805894; c=relaxed/simple; bh=rUXZhhkUyhoASr+I1V97zRttl+YyiYZ2jO89PPSgO8s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dK6RjrOMkkHLySqFfK7r0QaLzpwoK/IYYdFUHv4rE21rJaOK1py2YP1AYqhK7Mw80gb1uOY+9F6kupnTQ2aAy95ktfmha67lp1qUkBxNNE5PbUkneMUwhJKDmFuLDIx5zviZTdwWuSyo9+3hfm6mnQ3aRC+fIXRmKjI8b3QdDfg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=j3/e5RwA; 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="j3/e5RwA" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 14454C2BCC6; Fri, 15 May 2026 00:44:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805893; bh=rUXZhhkUyhoASr+I1V97zRttl+YyiYZ2jO89PPSgO8s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=j3/e5RwA1b6Hy/2xe1W2XH6bFcrFZAkW74uKjFasvF99Q/diLqtyvSx85SKjW3j7R R4VRFzM85NgHLMfv4MccxejgU3IaNfJh0RSe9VJPPgaCntfUoJCDXA9px9nI4R5FL8 4WtHqARGUUhDAy+/pDy+kpnBMWfvgrzA7ir7fRWsLCKiV8Yrrakf60+LoPVAFmIcfe ENnIHUMPRMRWLp4EDkH5dQun01j5e+xUngyjlofj1C2BtyFzw3Gvg0CYr9W7jtUwsI pYr5F5ElVVhMnZ38ZdT3iy0F/SygNADH11l6rJvbk8bD3aW873joyGathO6QIQPasi k9Qd/wWBkpjPg== 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.2 17/28] mm/damon/sysfs-schemes: implement probe/hits file Date: Thu, 14 May 2026 17:44:18 -0700 Message-ID: <20260515004433.128933-18-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 a83512f28c022..36f6e4bc57ba7 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 @@ -3077,7 +3104,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 12:42:39 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 EDD1A36BCF5; Fri, 15 May 2026 00:44:55 +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=1778805896; cv=none; b=fQRwNnq5Bx04l/Ho/JJqm+SsWmdCqEC4WH4oP2Ed4trFK6yIT51kr8gmW064j2sWOnIfnGDKNG9i2L2+SRcR6Hgnnivw6FyfBDHLn5izaMrk2a9OTepIR1WsxGGB5l53r+trvbi0OHQMtUIjcvu0kAR1H6IrWG4CDG1a5BlZlqg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805896; c=relaxed/simple; bh=O6Hl0Mh7Nxw8m7P+hZlG7JicrW7ipkVD+m8lBYL3rME=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pgLlEohmWhrPeYZIXKLuKS2OJDHjUmSyU8+1Un7NyO3lQYCDvt8+KXnF4uYLn+9/YPgLERF328BnIzM4//+3NzXGzpMBaAT79LYMTayVv0sjk6197PDtMv4pvnYmf1iUojnAqLXTUL9hEhKp/EQOO405AgEmgBKehEf5FRzxwpk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Jwg9Kxxy; 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="Jwg9Kxxy" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7233AC2BCB3; Fri, 15 May 2026 00:44:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805893; bh=O6Hl0Mh7Nxw8m7P+hZlG7JicrW7ipkVD+m8lBYL3rME=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Jwg9Kxxyp5SiFWyPel8l0mDAk7ys3Acb2RUOzTSm9Zbjp0NCywgHIm0e71oWxPoOa /MR06AYDIZMsnHne9/DRPkuwuIKS+i1bAOFv9boEKqLPy+p65t0GVhg3QCMY6bZxcr mvtkEB4O3u42wydFD1ryEEzGi9t/fEMeJ9yEittT+Klo7hbpWqmqo1zJiiyijvFHT9 IzsP4ozltwnkSolKLVlg15pg88U+q7O/a9VSFFL+A3aAKbcpPF8QzbrR/leL44Rhm7 MmIIX+8XH/RXkeUSV1+Iwp5VNeAiiOGhU2MmEItoI98Mt56V5TULNeFXQujxRlbA5a qoTB6HGcFM/lg== 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.2 18/28] mm/damon: trace probe_hits Date: Thu, 14 May 2026 17:44:19 -0700 Message-ID: <20260515004433.128933-19-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 | 38 ++++++++++++++++++++++++++++++++++++ mm/damon/core.c | 9 +++++++++ 2 files changed, 47 insertions(+) diff --git a/include/trace/events/damon.h b/include/trace/events/damon.h index 24fc402ab3c85..ec1e317923fd3 100644 --- a/include/trace/events/damon.h +++ b/include/trace/events/damon.h @@ -130,6 +130,44 @@ TRACE_EVENT(damon_monitor_intervals_tune, TP_printk("sample_us=3D%lu", __entry->sample_us) ); =20 +TRACE_EVENT_CONDITION(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_CONDITION(nr_probes > 0), + + 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 1c9d2fb69f98d..ab8ac9ec8450d 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -1881,6 +1881,13 @@ 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; + + if (trace_damon_aggregated_v2_enabled()) { + damon_for_each_probe(probe, c) + nr_probes++; + } =20 damon_for_each_target(t, c) { struct damon_region *r; @@ -1889,6 +1896,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 12:42:39 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 DC4EA36BCC4; Fri, 15 May 2026 00:44:55 +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=1778805896; cv=none; b=Mcy3Z4BmNfIvyXzva8RwbIACEpWrHk5W5rwWUxukV/OZdv/PE5h+iIKEePjKgNMAt27Y6Ks0dpujts25tN8BF7xBILUg6hzYbZ+h7YMBBoI1cAw8edQqrQDttPJZ3xu63Y+AXBIKAFY454DefLOm4ZfjgGnZ9mzkZMOQKdpe4sQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805896; c=relaxed/simple; bh=EauBIBzKjl6rFCRlEGSo/s6NrgLL9HoVh8TIqUsq9vs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nLxhCvXl42Gqa6hIS09ddgRYUDTYGL3AXGpUBSbxk37J8FUYXLYpyw87QYJElWTMcoUTYg7txGQrC81aiFkhw0DTiR9xsRLGDtGOnL3RcFDAo6EecA7N8W3Gm68CFgHASoDc9PeOLHqrtiqHeHErKYx45/lL1fvE3ccnyckrJkE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KBvWpo62; 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="KBvWpo62" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 02EEFC2BCF6; Fri, 15 May 2026 00:44:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805894; bh=EauBIBzKjl6rFCRlEGSo/s6NrgLL9HoVh8TIqUsq9vs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KBvWpo62mOlO3ObITlgIcEpOhOiRt8SLNFUK5KmPQv8v8WPs/7Mu/dE7LDh9WkapF J5ubOl0wKlyp5EO+VA8fgamp8Uj1EOWqho3sQtQqlamiIhQl7a4wce/OOWe++3FN7e HOviASILp/932wzcqVp7a76JEXl9CXy8NiJmpkEQP5Vc8H1sOmqus75/enTZlm28HJ 31ofJkGdnD0eS1PYJ8kR9B7s2do53LtQObNudtkBM8NUtcd7dMzVxaXUOr0k0O6D3w CKXw9JqxDCyARlrgEMXFzTHmWr9Rwo0XaCrdDGiEbyKUmvV9EUiIDNCSIE6Yi8zoyo oqpMw5OaEqltA== 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.2 19/28] selftests/damon/sysfs.sh: test probes dir Date: Thu, 14 May 2026 17:44:20 -0700 Message-ID: <20260515004433.128933-20-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 12:42:39 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 6ECFB36DA1B; Fri, 15 May 2026 00:44:57 +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=1778805897; cv=none; b=GR+FrC0NH5KNIKC0ime6VjjS3XAVREGD/ebyhWC9b1tMEdnhTVzyqqxHnKrq3qDokE7fly7gsKlrueI+HXIVMHMUktkYCTfVrOjrOLcXS+jL2XPFWxSvBTBRKhLRljPSnr5nv+RaTgJCklNf50+8RpXd8Q/SVZvjoRF848SIf0s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805897; c=relaxed/simple; bh=OPFhEPDzos0mBFBwhii/0BwgZM31nZ+rfuFNwzzIAKM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FTDNIQmPyRXB9KLK3oE4VA+Mt1g+XBkiOAT0HbdjnprV2Pt3IlDp/2485xr9kkpL8+g6MykAtoeVJJdBl/JcM1Gwa6cVOD+dyvvO5OrPZjGpPpQmRzHuvIdX6k7U6cy818PYfqoHYzA31zld8mtHzaN8sjwVcRP37X/70BeGnpw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ohlBmz1q; 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="ohlBmz1q" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5E130C2BCC6; Fri, 15 May 2026 00:44:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805895; bh=OPFhEPDzos0mBFBwhii/0BwgZM31nZ+rfuFNwzzIAKM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ohlBmz1qbNNoMP9c5FxOa8/YODHQ5n0SA+R8HRu7GjSSZ1xpCFzWncDcwlqH46mTP 6h5EolLHb5duvzp9CnhnedTkjwgXpKGg7giStJFccWVuaYgOdSt/QVYkw32ynp+mhx YES2bCwdVnBCef1Kl5RJtqEkWj/CbVYniOLeqqTe6sh1aFOb5y1PItrnWvgsDPznSC a5y30OTM5iucG438qFNqCWyQ4tN/1RJVeNIThviv4jUuIzJO05nGH2TDeHHfC7T13f Uuo/VrsEt99FXY3vT6c0o9R695YedJ5qkBP+iYs+1fmAqCGsHMC6K6KJksyKDV7cIQ mLPaqTjPqmhpg== 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.2 20/28] Docs/mm/damon/design: document data attributes monitoring Date: Thu, 14 May 2026 17:44:21 -0700 Message-ID: <20260515004433.128933-21-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 afc7d52bda2f7..aa08c899a3e5b 100644 --- a/Documentation/mm/damon/design.rst +++ b/Documentation/mm/damon/design.rst @@ -269,6 +269,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 12:42:39 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 3E37936C582; Fri, 15 May 2026 00:44:56 +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=1778805896; cv=none; b=p0JEVhdy05E3XTfSKkId6WsuSpFgBqUSYvXhYh1yAX7jkTCWXdiNwYjL3nllI4MEfzuH9fnkLGfBidLCxUqfr8tgrwwO5usCC09kpuz8ej6kmP0Y+Yt1sve3K2MF47EzRSSi46ExL6+5PXUTN2a39Y3xvqhVt7831neszCp03X8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805896; c=relaxed/simple; bh=tDul/IalxWnHQ0Ddp/WnfpzD8FisANNYVxxNG1upWBM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=QMg/LWU5p1zgcc+ys5Ejia66EIlhW+wr2oLffWrvCMLvL8JaD1pDXf2UkIEOsjZ9Mg/8Prr4xHkirrf5EOISCWUUtKJeGhu9znNd/Gk4ivMTw7t6RJMCwc192ui2+zFPqNZu6QU+BMojoZTVp1xfz3wLiNF0vkXYWErjVwTaxN4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=pfdVnQ/D; 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="pfdVnQ/D" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4E6DDC2BCC7; Fri, 15 May 2026 00:44:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805896; bh=tDul/IalxWnHQ0Ddp/WnfpzD8FisANNYVxxNG1upWBM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pfdVnQ/DZlAwuHtdmFvz0ZaTBe8L6X+r92BtXxeeR5GRL3pjLZJV34yDp8B+97TU3 eoWv+zoOCcTe0lDZMTGdtJNzC1NGejzvKDznmGOhVEBhrGO8wK9x3Ez7NqevrUqq8F pmGvIEoDGs143WIzK4SQLkpn6Ar2u+rX/ri4KlIvkQjYr8YCWndhSEQgPVWBQzTx4I 1GXv5fv02z/x0uiTOuAq9/o7dN2gMFQgU5D42FvCok4S6zA7ryJJr2B9mf+D1qEyZG 2qtQ09OqQAuy5n0gd8p4ZFVttoA7jvizLcpnDfkrtS7wem9cvbgJC03mWxBKa0+gqp yux89H/ThgJDQ== 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.2 21/28] Docs/admin-guide/mm/damon/usage: document data attributes monitoring Date: Thu, 14 May 2026 17:44:22 -0700 Message-ID: <20260515004433.128933-22-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 534e1199cf091..44224da62533e 100644 --- a/Documentation/admin-guide/mm/damon/usage.rst +++ b/Documentation/admin-guide/mm/damon/usage.rst @@ -71,6 +71,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 @@ -94,7 +99,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 ... @@ -221,8 +229,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 @@ -256,6 +264,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/ @@ -600,10 +629,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 aa08c899a3e5b..85d668e929194 100644 --- a/Documentation/mm/damon/design.rst +++ b/Documentation/mm/damon/design.rst @@ -269,6 +269,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 12:42:39 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 9C9A236C5BB; Fri, 15 May 2026 00:44:56 +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=1778805896; cv=none; b=Vbl6/6ZHciJWfe/ExoPJH7h80MuDN5lqn4yAKRgIKp1D/H0YoA4qk4mvllydaXPUUcnKdsOH7EIZhksAbZdpuu+JuaAvai0HqcGHN+hVqG7/ydA1Sz4PduVT8672qsiRxJxKGibXjJH5z4yKzbWeDFNvpvMGc4jJiGR4lIeA/QE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805896; c=relaxed/simple; bh=sbbC6q3YAKtgRh2ZitI4ryLVhWoQrxzmSYGFabzMLLQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QKrgoel9layw4Y+c+iJRrdFmPx0UMEM80IQefxAEUzePbnDSfhFvJmhtj3SePemc8EHPOfVDdzqcoPlYL8YGaJ1RnnbYz3tKfgjFCcjREawoNrr9lGcd/vqP0vs6M2SpSlz+GxRufEEBiRZ4Myooui2g0j5C/ictmu7buRvOq/M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hC3oQj9n; 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="hC3oQj9n" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 48694C2BCF5; Fri, 15 May 2026 00:44:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805896; bh=sbbC6q3YAKtgRh2ZitI4ryLVhWoQrxzmSYGFabzMLLQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hC3oQj9nucKnuU+6YJy3FkwES2Ekotc861SToqurZQRNAQQEbK6C3g1dhrnogi2ti unmbMOARtbZ6ZlrXPLu2EKdub0j5eeEYW+DsKOJMsu5s7envDrRkuArN/RLDd6joh9 v01FtwbwpUzCTCmyjW2Iv9JUvxmMu267nzcmwdeWszB0bZMQlOlWqPZDHcWOQKcqH5 6oxzv1Vl6E0TEjoms1r7mKIyargGkWYnv4RDAEQDPnNLABvnNw15DrMzrTZnPW6Rx4 tP0n4VmK4oiNY+tz5temFkHwYoI0pmAXjNipkBzlHb4AsShDfyQrTaiwqVOSWvK7qV 8pCswqSlx9a8Q== 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.2 22/28] mm/damon/core: introduce DAMON_FILTER_TYPE_MEMCG Date: Thu, 14 May 2026 17:44:23 -0700 Message-ID: <20260515004433.128933-23-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 36a1162b6185a..c3ecb35da6404 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -731,9 +731,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 /** @@ -742,12 +744,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 ab8ac9ec8450d..2d4a63dcc47fe 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -1422,6 +1422,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 12:42:39 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 2E2CB36DA0F; Fri, 15 May 2026 00:44:57 +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=1778805897; cv=none; b=iEAX7h9AUMPauCwwcRJ8XLpkevXQcTkZqxLrmH2jjeFb7m63PIojo/YfyLUT5t3ywfQu56HmXsbBaQMETVuK1IBuWFxzTvsPOYElfIUv4zdPOP1Tp3y8sw59T1Vkpl/2uuW+so5pp52bEnOKjvnBlTK6LsOy6mE1iZrHeeXhghY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805897; c=relaxed/simple; bh=lR5soWN3IOVMOAa5jz6VmMJ/WG2kTof///VJp0cNoDQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GUKFZ5aeuNs+ccSlTsWlax9LbqvvHLKMsmGV31A7jVq9gCKp/uZx9BMg1J+28aU7dXwn2hBfqIWWaRYTWNlrI+Jgmr5d9mVnO+tCah2hjRJKSShBPiYgFsOKV6xhCOjM2NIX5T4j7vjNp5OHoZxdwhgxRzMRb02G1Lm27SqkCws= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GJpnyRce; 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="GJpnyRce" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9CF0FC2BCF6; Fri, 15 May 2026 00:44:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805897; bh=lR5soWN3IOVMOAa5jz6VmMJ/WG2kTof///VJp0cNoDQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GJpnyRceOgoYjh64htKLDtHX4VVkUjh+8Gu5d+DFH7Fsl5eodlbpjHMuJq8DeIDEl wJ8T7CvOkwLPL++m7fkvjF40gjIFQQTu4ZkeOe7gDKQ2kBowMKXc+0oCL+eNvu+MQt npJfGTCVkfgXIeUq2ML77DpvLxNibMuqhUGgjZ1J3JtfT9fx3eDmqDaXQg3MdUBke5 sENoSXqjkBwKIOX5hGatLf/31uqHFl8lrgzRyHCeAcbAt6u2sAzWxNYXWVzSm8OPnc jEoXlCHuWPmrfSxY0Lld3APgm6jBc5rg50QTlW/DvONAsHU12L+vuSK26/U07oDVve H7wTWOkGt6JEw== 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.2 23/28] mm/damon/paddr: support DAMON_FILTER_TYPE_MEMCG Date: Thu, 14 May 2026 17:44:24 -0700 Message-ID: <20260515004433.128933-24-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 493bcca8ff104..c3adccc2e6c71 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 12:42:39 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 875962F6577; Fri, 15 May 2026 00:44:57 +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=1778805897; cv=none; b=BFOZO6GwEmcUElJjWxQ4z04q25rNh4YkKucy+m9Ba4Zf9cPOpFEiZ/xeDHvk8numaeGoBj/A020QKw3oUm8vWHnw/9+oLjEbObIdyQXR07cEhfJ5LQyPhnJpAq8BLsQTOI8VnNnTi+H+j+LTDo73wRIYl9bNH1llJH56NmJA9X8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805897; c=relaxed/simple; bh=QS528f5qGHKkLem/jUjppq70/JVfZ3peF0nYrxU0kzc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=A2GlHnq/KQaSTRxpIt6nBQDgLMrWkgVYN//nNrpgaHVHCsCMoZLh8EZ0n7oeeqLy5NZKi+ZtB6OgscoEA17cOkiZ9iYIorleY5dlIxx3fS/HNFL5e79wL9lYewGwLtvg7uA1hl3xmTgnkKQPNSgkqpVQnF+mmmkxLpSHRGy/rKw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HDPdurHS; 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="HDPdurHS" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 35D18C2BCB3; Fri, 15 May 2026 00:44:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805897; bh=QS528f5qGHKkLem/jUjppq70/JVfZ3peF0nYrxU0kzc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HDPdurHSjutJ362yDbz+dXhc8XJvA4E1AtHqu09JI4XdGIRN9ZWztD2nZ4Do5zCfD Aoz0SHMxTikFe2G6L6jLLT0t3UgbPSAgeJMBglHAew+CbVPpgeUEc7D6GLDUOH4JaG +e0kmFtH9kfc/WSG1dBmX3m26ZRLYntLGzDanoKmMwZ/PhbVQ59FM7qKwvIh1ieuTG 2k7zsypQeT5P2u9mbjzTX0vMx7k8rP965f2CiedpCFgWkv534jkGwKy0gNUBh0/Vmb fA7YY9ahYAwOEkIpHkrAMzPLyoVDNHDGqHQ0mW/qfQIHjoc5Kb5ySnP3Ko2omUMmNq 44D8y9cMjqezQ== 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.2 24/28] mm/damon/sysfs: add filters//path file Date: Thu, 14 May 2026 17:44:25 -0700 Message-ID: <20260515004433.128933-25-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 c2c172aeae149..21f89f2976ca5 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 12:42:39 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 BEA4737187F; Fri, 15 May 2026 00:44: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=1778805898; cv=none; b=YiApbXBMaOFllYq4ChN6rDGpT07Pm8eBe6cIS9UDcS/bUim/BN4AOX6IYy/cU+S1XIiVK0MFTTtTUk3Hs5UTdomnSGWkLFRTOymsorL+EL7+pkKdAgh7SFZIy4CdvPLZKhPIyz7jXQRZlYisQr8cvYp1xyJuXigkEwPFWRzsn8A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805898; c=relaxed/simple; bh=91vAwCvsnDDGZ8DbEONtLZN4Ag+nx3FvJWUyLnt0KZ0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eFZbX2JKYApY/dZJNmTeP04ClTdDTPoWSooepRPLhFpSzDxYUd8XweGwLkwYDhTlp7Jrt9U4pgKkQvW1W2cvr7G3IxCrSLSjj0ncvmLwgSo1rbaKx8tO+7vTGxevtRDY0kNlPOccK/1uznfrqt1S7HEqr0i8lVIpxR7OdkYMPRc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=DNX6r3YH; 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="DNX6r3YH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8C545C2BCF5; Fri, 15 May 2026 00:44:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805897; bh=91vAwCvsnDDGZ8DbEONtLZN4Ag+nx3FvJWUyLnt0KZ0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DNX6r3YHo3mglvkQ1wAYFifwXjwYeX/JziaMJ7dlRr9CHCcdESTBWQ9ME7Kk4hVFB SrkcKtQGNsI4vSyzKLvo8IQsLJzUssUV66Yd4WqYS2Ltk3X8v8La9QcU5pL3reNdGk 1MpcsF9AZ/15r0CBdqo5hMC3INPEPJI9lh1XxwPTnNYs/9OaNapkNq0gQVcxqhQcdG JK2wQ2vH/CoVaFAJvrWAkCYN5fgK9pvlupEExTsqfVJtR7A7L4JR+D8ol4hFTP5JGx VL9F9VT42XEJ8hW+0NNiAcyWlLNBUmnwcQ0C1vEduaxRsfMEx+PnVI0q0TUJ04vzKk PFs+idCoVEidw== 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.2 25/28] mm/damon/sysfs-schemes: move memcg_path_to_id() to sysfs-common Date: Thu, 14 May 2026 17:44:26 -0700 Message-ID: <20260515004433.128933-26-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 | 40 --------------------------------------- 3 files changed, 43 insertions(+), 40 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 36f6e4bc57ba7..b8c164b6759cb 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -2732,46 +2732,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; - 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 12:42:39 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 F1A6F378833; Fri, 15 May 2026 00:44: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=1778805899; cv=none; b=G71W+N5q2b8oPm8CJkzFSPo1TpnUBaH7bhoJ0oJj/+spPnnKXh8r68qAOMAWHLWL8DEAYqv0Na53VnIfKe5eAsJ1GryUrgjCaMgwLixyocl1xoTca1Au7XOaSwsg6MkFKMEFPypaEsqFj/NWLK08Q6xAckHuWNpt4I/nPACOx04= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805899; c=relaxed/simple; bh=PDuM782dGG2LDPjQZNWcCEwrn5/ZbTB5xohK557WpVY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XFO7qrzgZ+9JCuX9fyRxjREu1Kfdj3UGKMmcK7JDPyWxshsvELX+enrfG7nzh1WhVeBrhTCUXnoF6v+DpMjMhZW2p3YIizOwQgwY8phWlAINmQfgKqjQie0JSm6s2skF8LF5+yf1ayBStU6c+XEgvdf11NabLdDBzsNROeWYr/E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NMLWx31t; 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="NMLWx31t" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E68EEC2BCB3; Fri, 15 May 2026 00:44:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805898; bh=PDuM782dGG2LDPjQZNWcCEwrn5/ZbTB5xohK557WpVY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NMLWx31teEvDCLkfORSTTqndUMh731Ek0cmeMEqgxqbJQ4Wv7Re8HHusjZCQ+T8xk TCu22IR+UZt6zWmgSklrknPlbO/qXzK30V1FRRv/zvVWPcFf4aVUqIFroeINyZ1gPo SHuFcfjhB0h5jy2YAEn3Bz2oSInkYU7DNgZQnOv+v+DuY4xvJENy1jlheJ10H5nj33 v+Tp3Pp0SbciKMr8iTelWTvPf55i5i/wEaJV9D3M/5Z3n+a8kjd7wPcWYpAiPkurio zYzf277H1k9CSFJa/txKFLdNiNYtbTsz7nNebu/EPQys3sMG/GWvKu4lxGAX8A5mWg 7PbEIMGkndThw== 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.2 26/28] mm/damon/sysfs: setup damon_filter->memcg_id from path Date: Thu, 14 May 2026 17:44:27 -0700 Message-ID: <20260515004433.128933-27-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 c3ecb35da6404..5ad46bed18119 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -974,6 +974,7 @@ static inline unsigned long damon_sz_region(struct damo= n_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 2d4a63dcc47fe..a6f613c9e5c91 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -139,7 +139,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 21f89f2976ca5..d0810540f8257 100644 --- a/mm/damon/sysfs.c +++ b/mm/damon/sysfs.c @@ -1897,6 +1897,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 12:42:39 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 D78A234D4C9; Fri, 15 May 2026 00:44: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=1778805900; cv=none; b=KmVvWUeaTfnKEZ8m8t0CCyyDyTvoycA669oSMIYdShcX/nUBk8MxhzANv4PtE3fScYRgJUNibaNrrODkyPDouqrvBOQJhjqunWpCRnDZkyzuqkhWSDor6TN8yYuBhRMg1/g25QVfPQSm8ge/yZOjLuGrWhS73A6kEjBQsYOsl+4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805900; c=relaxed/simple; bh=bkzOsZ+u9cB/tv1smaMAlVTUS7NBHktW+3LSKT4hgrM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jdwwN0kjiRqKlb4TmHK9UxWjIegtzCa8LDsSnt6c7MZKXCmJ34YCAWVBKjBB87osYirROXC85TKlzXHvNJXAZpBvVbsZSdhf9Igc6sZyH4dTwHGdQVvJcmCRIkolb/jLer3RcdHCJkfmg6Htls+upX4idiHI6HwicwwJnJf9mB4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=nYXLtAJo; 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="nYXLtAJo" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5002EC2BCC9; Fri, 15 May 2026 00:44:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805898; bh=bkzOsZ+u9cB/tv1smaMAlVTUS7NBHktW+3LSKT4hgrM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=nYXLtAJofnvGMsX5N610DEVOEWQGgqst5scso7bMmO664008bpCCtvsRi4GQ2IpFP vVQhKkRMOHn1S+2+lVx8JZI5D7L9I37LR+nI3ry4dRrArqdLDn4diRbM6F0HP20aiX FFABYnrQYKcr/FZqZeVpah9Q+9DbzGjbc4Hy2zuK++yunvpRA5yoJbkYxsrsN2HGgm GJ5URnPTmKdAXC9dIHP0/Fz2izknoIxQoCd2AI1E1lwA+B5hcTtZ7wnnM2R9Kf1kGF mAsPrzuu3ylMNBwiNL9Spnj5751YSOgGJQqj+ZyAeCZHoAG7VMsWoO7243szeFb9pr pGDYWXRkPS7Hw== 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.2 27/28] Docs/mm/damon/design: update for memcg damon filter Date: Thu, 14 May 2026 17:44:28 -0700 Message-ID: <20260515004433.128933-28-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 85d668e929194..8a2d68cbcefca 100644 --- a/Documentation/mm/damon/design.rst +++ b/Documentation/mm/damon/design.rst @@ -286,8 +286,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 12:42:39 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 0911338A71F; Fri, 15 May 2026 00:45: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=1778805903; cv=none; b=Yv0FEBPsBOVhQZdVdUGPDem2RtDz0YP3lUEefinkeE97Kr4XNH545XjKxWF+2o43UorWrsPn7u5rSaxHoMeluJKjNona63kh92xvcxXOwqADZJ4ONO0fFpE34pAYpimCdWBoit6SwoCitamklZWiXZPc6QH1DW3FjUvg5FAsTUs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778805903; c=relaxed/simple; bh=LEx5E5SgJygEjMgi4VHYllCFXk9l6r4yobescOGntDQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=RWq9xH6xSSrWyLYw9+SdXapAstsZuQDzbL1VWEE7uONhKpjhn/BxcKtJWXWfqND2g4fbpUMvTddjk59m0BaXr+dTx6Xb0zqBAMgEeueG3d9+1EzFUnilGxDpEXayIEKQuTsONmJypvvyjTjVlDDrWcuEeXUq3mw293xZ1U7j6pw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JI+Vej+D; 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="JI+Vej+D" Received: by smtp.kernel.org (Postfix) with ESMTPSA id F2956C2BCC6; Fri, 15 May 2026 00:44:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1778805899; bh=LEx5E5SgJygEjMgi4VHYllCFXk9l6r4yobescOGntDQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JI+Vej+D8fLahEFPr51lI3LvaaaF5WKeKwE5btBoOfLx79LJ/X4uChsd/J2DrBdac 9fp89cFgm3xStfQXk6ks9Aa+OGsrGUinAN2+ZDogrYrY2QG+YYqwTY/FPHUJbYicvU xpUWmC1yU0EIC7URteJ3sohuFH9LmXW/EXA5UMU7MB/bw80HQLINW2Oa2t4twoqQ6i Y2+3cS3I5zlOltkXw7Cd72nAm7KOVNVfhqas0nnLQ9ZV4zhanDsx7xWo6swr5efb+U vuVx9PhIwi7CGk/53DY3GMscbwRpgAcixzyHJLFFM+W/LNWpZtH5tIf+x/RES9D0HO 0DzyUA9yemGWQ== 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.2 28/28] Docs/admin-guide/mm/damon/usage: update for memcg damon filter Date: Thu, 14 May 2026 17:44:29 -0700 Message-ID: <20260515004433.128933-29-sj@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515004433.128933-1-sj@kernel.org> References: <20260515004433.128933-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 44224da62533e..4b1d77f7175ab 100644 --- a/Documentation/admin-guide/mm/damon/usage.rst +++ b/Documentation/admin-guide/mm/damon/usage.rst @@ -73,7 +73,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 @@ -283,7 +283,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