* [RFC PATCH v2 1/4] mm/damon/core: add DAMOS_FILTER_TYPE_AGE_MS
2026-11-05 4:44 [RFC PATCH v2 0/4] mm/damon: introduce age_ms damos core filter type SJ Park
@ 2026-11-05 4:44 ` SJ Park
2026-11-05 4:44 ` [RFC PATCH v2 2/4] mm/damon/sysfs-schemes: support DAMOS_FILTER_TYPE_AGE_MS SJ Park
` (3 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: SJ Park @ 2026-11-05 4:44 UTC (permalink / raw)
Cc: SJ Park, Andrew Morton, damon, linux-kernel, linux-mm
There is no way to specify DAMOS target regions with a deterministic
time based age range. Extend DAMOS core filter to specify target
regions with age in milliseconds. Introduce new damos_filter_type,
DAMOS_FILTER_TYPE_AGE_MS in DAMON API, and implement support of the type
in the core layer.
Convert the age in aggregation intervals to milliseconds and use it when
the filter is evaluated. Reuse damos_filter->range_{min,max} to save
the age range.
Signed-off-by: SJ Park <sj@kernel.org>
---
include/linux/damon.h | 16 ++++++++++------
mm/damon/core.c | 10 +++++++++-
2 files changed, 19 insertions(+), 7 deletions(-)
diff --git a/include/linux/damon.h b/include/linux/damon.h
index 380f9cf6ddd82..1302ffb6f0bcb 100644
--- a/include/linux/damon.h
+++ b/include/linux/damon.h
@@ -394,13 +394,16 @@ struct damos_stat {
* @DAMOS_FILTER_TYPE_ADDR: Address range.
* @DAMOS_FILTER_TYPE_TARGET: Data Access Monitoring target.
* @DAMOS_FILTER_TYPE_PROBE_HITS_WSUM: probe_hits weighted sum range.
+ * @DAMOS_FILTER_TYPE_AGE_MS: Region age range in milliseconds.
*
- * All types except &DAMOS_FILTER_TYPE_ADDR, &DAMOS_FILTER_TYPE_TARGET and
- * &DAMOS_FILTER_TYPE_PROBE_HITS_WSUM are handled by the underlying &struct
- * damon_operations as a part of scheme action trying, and therefore accounted
- * as 'tried'. In contrast, &DAMOS_FILTER_TYPE_ADDR, &DAMOS_FILTER_TYPE_TARGET
- * and &DAMOS_FILTER_TYPE_PROBE_HITS_WSUM filters are handled by the core layer
- * before trying of the action, and therefore not accounted as 'tried'.
+ * All types except &DAMOS_FILTER_TYPE_ADDR, &DAMOS_FILTER_TYPE_TARGET,
+ * &DAMOS_FILTER_TYPE_PROBE_HITS_WSUM and &DAMOS_FILTER_TYPE_AGE_MS are handled
+ * by the underlying &struct damon_operations as a part of scheme action
+ * trying, and therefore accounted as 'tried'. In contrast,
+ * &DAMOS_FILTER_TYPE_ADDR, &DAMOS_FILTER_TYPE_TARGET,
+ * &DAMOS_FILTER_TYPE_PROBE_HITS_WSUM and &DAMOS_FILTER_TYPE_AGE_MS filters are
+ * handled by the core layer before trying of the action, and therefore not
+ * accounted as 'tried'.
*
* Support for the operations-handled filters depends on the running
* &struct damon_operations.
@@ -415,6 +418,7 @@ enum damos_filter_type {
DAMOS_FILTER_TYPE_ADDR,
DAMOS_FILTER_TYPE_TARGET,
DAMOS_FILTER_TYPE_PROBE_HITS_WSUM,
+ DAMOS_FILTER_TYPE_AGE_MS,
};
/**
diff --git a/mm/damon/core.c b/mm/damon/core.c
index d36823f4d0928..0a056949604f9 100644
--- a/mm/damon/core.c
+++ b/mm/damon/core.c
@@ -659,6 +659,7 @@ bool damos_filter_for_ops(enum damos_filter_type type)
case DAMOS_FILTER_TYPE_ADDR:
case DAMOS_FILTER_TYPE_TARGET:
case DAMOS_FILTER_TYPE_PROBE_HITS_WSUM:
+ case DAMOS_FILTER_TYPE_AGE_MS:
return false;
default:
break;
@@ -1336,6 +1337,7 @@ static int damos_commit_filter_arg(
dst->sz_range = src->sz_range;
break;
case DAMOS_FILTER_TYPE_PROBE_HITS_WSUM:
+ case DAMOS_FILTER_TYPE_AGE_MS:
if (src->range_max < src->range_min)
return -EINVAL;
dst->range_min = src->range_min;
@@ -2552,7 +2554,7 @@ static bool damos_filter_match(struct damon_ctx *ctx, struct damon_target *t,
bool matched = false;
struct damon_target *ti;
int target_idx = 0;
- unsigned long start, end, wsum;
+ unsigned long start, end, wsum, age_ms;
*err = 0;
switch (filter->type) {
@@ -2594,6 +2596,12 @@ static bool damos_filter_match(struct damon_ctx *ctx, struct damon_target *t,
matched = filter->range_min <= wsum &&
wsum <= filter->range_max;
break;
+ case DAMOS_FILTER_TYPE_AGE_MS:
+ age_ms = div_u64((u64)r->age * ctx->attrs.aggr_interval,
+ USEC_PER_MSEC);
+ matched = filter->range_min <= age_ms &&
+ age_ms <= filter->range_max;
+ break;
default:
return false;
}
--
2.47.3
^ permalink raw reply [flat|nested] 7+ messages in thread* [RFC PATCH v2 2/4] mm/damon/sysfs-schemes: support DAMOS_FILTER_TYPE_AGE_MS
2026-11-05 4:44 [RFC PATCH v2 0/4] mm/damon: introduce age_ms damos core filter type SJ Park
2026-11-05 4:44 ` [RFC PATCH v2 1/4] mm/damon/core: add DAMOS_FILTER_TYPE_AGE_MS SJ Park
@ 2026-11-05 4:44 ` SJ Park
2026-11-05 4:44 ` [RFC PATCH v2 3/4] Docs/mm/damon/design: update for age_ms damos core filter type SJ Park
` (2 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: SJ Park @ 2026-11-05 4:44 UTC (permalink / raw)
Cc: SJ Park, Andrew Morton, damon, linux-kernel, linux-mm
Support use of DAMOS_FILTER_TYPE_AGE_MS via DAMON sysfs ABI. Add a user
keyword "age_ms" for configuring a filter of the type using the existing
filter configuration interface. Reuse existing 'min' and 'max' sysfs
files in the filter configuration directory for storing the age range in
milliseconds.
Signed-off-by: SJ Park <sj@kernel.org>
---
mm/damon/sysfs-schemes.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c
index 637f1bd0c950b..230987efac3ac 100644
--- a/mm/damon/sysfs-schemes.c
+++ b/mm/damon/sysfs-schemes.c
@@ -593,6 +593,10 @@ damos_sysfs_filter_type_names[] = {
.type = DAMOS_FILTER_TYPE_PROBE_HITS_WSUM,
.name = "probe_hits_wsum",
},
+ {
+ .type = DAMOS_FILTER_TYPE_AGE_MS,
+ .name = "age_ms",
+ },
};
static ssize_t type_show(struct kobject *kobj,
@@ -2875,6 +2879,7 @@ static int damon_sysfs_add_scheme_filters(struct damos *scheme,
filter->sz_range.max = sysfs_filter->range_max;
break;
case DAMOS_FILTER_TYPE_PROBE_HITS_WSUM:
+ case DAMOS_FILTER_TYPE_AGE_MS:
filter->range_min = sysfs_filter->range_min;
filter->range_max = sysfs_filter->range_max;
break;
--
2.47.3
^ permalink raw reply [flat|nested] 7+ messages in thread* [RFC PATCH v2 3/4] Docs/mm/damon/design: update for age_ms damos core filter type
2026-11-05 4:44 [RFC PATCH v2 0/4] mm/damon: introduce age_ms damos core filter type SJ Park
2026-11-05 4:44 ` [RFC PATCH v2 1/4] mm/damon/core: add DAMOS_FILTER_TYPE_AGE_MS SJ Park
2026-11-05 4:44 ` [RFC PATCH v2 2/4] mm/damon/sysfs-schemes: support DAMOS_FILTER_TYPE_AGE_MS SJ Park
@ 2026-11-05 4:44 ` SJ Park
2026-11-05 4:44 ` [RFC PATCH v2 4/4] Docs/admin-guide/mm/damon/usage: update for age_ms damos core filter SJ Park
2026-11-05 12:31 ` [RFC PATCH v2 0/4] mm/damon: introduce age_ms damos core filter type Aveline Noir
4 siblings, 0 replies; 7+ messages in thread
From: SJ Park @ 2026-11-05 4:44 UTC (permalink / raw)
Cc: SJ Park, Jonathan Corbet, Randy Dunlap, Shuah Khan, damon,
linux-doc, linux-kernel, linux-mm
Update DAMON design document for the newly added age_ms DAMOS core
filter type.
Signed-off-by: SJ Park <sj@kernel.org>
---
Documentation/mm/damon/design.rst | 3 +++
1 file changed, 3 insertions(+)
diff --git a/Documentation/mm/damon/design.rst b/Documentation/mm/damon/design.rst
index 0689fd48446dc..8440c4954090e 100644
--- a/Documentation/mm/damon/design.rst
+++ b/Documentation/mm/damon/design.rst
@@ -838,6 +838,9 @@ Below ``type`` of filters are currently supported.
- probe_hits_wsum
- Matches to monitoring regions having a given range of :ref:`probe
hits weighted sum <damon_design_attrs_only_monitoring>` value.
+ - age_ms
+ - Matces to monitoring regions having a given range of :ref:`age
+ <damon_design_age_tracking>` value in milliseconds.
- Operations layer handled, supported by only ``paddr`` operations set.
- anon
- Applied to pages that contain data that are not stored in files.
--
2.47.3
^ permalink raw reply [flat|nested] 7+ messages in thread* [RFC PATCH v2 4/4] Docs/admin-guide/mm/damon/usage: update for age_ms damos core filter
2026-11-05 4:44 [RFC PATCH v2 0/4] mm/damon: introduce age_ms damos core filter type SJ Park
` (2 preceding siblings ...)
2026-11-05 4:44 ` [RFC PATCH v2 3/4] Docs/mm/damon/design: update for age_ms damos core filter type SJ Park
@ 2026-11-05 4:44 ` SJ Park
2026-11-05 12:31 ` [RFC PATCH v2 0/4] mm/damon: introduce age_ms damos core filter type Aveline Noir
4 siblings, 0 replies; 7+ messages in thread
From: SJ Park @ 2026-11-05 4:44 UTC (permalink / raw)
Cc: SJ Park, Jonathan Corbet, Randy Dunlap, Shuah Khan, damon,
linux-doc, linux-kernel, linux-mm
Update DAMON usage document for the newly added age_ms DAMOS core filter
type. Add an explanation of how the age range for the filter can be
specified by the user.
Signed-off-by: SJ Park <sj@kernel.org>
---
Documentation/admin-guide/mm/damon/usage.rst | 3 +++
1 file changed, 3 insertions(+)
diff --git a/Documentation/admin-guide/mm/damon/usage.rst b/Documentation/admin-guide/mm/damon/usage.rst
index cc7465251bb6f..6093b1c8fbfd9 100644
--- a/Documentation/admin-guide/mm/damon/usage.rst
+++ b/Documentation/admin-guide/mm/damon/usage.rst
@@ -559,6 +559,9 @@ For ``probe_hits_wsum`` type, you can specify the minimum and maximum probe
hits weighted sum value for the filter to ``min`` and ``max`` files,
respectively.
+For ``age_ms`` type, you can specify the minimum and maximum age in
+milliseconds for the filter to ``min`` and ``max`` files, respectively.
+
For ``memcg`` type, you can specify the memory cgroup of the interest by
writing the path of the memory cgroup from the cgroups mount point to
``memcg_path`` file. For ``addr`` type, you can specify the start and end
--
2.47.3
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [RFC PATCH v2 0/4] mm/damon: introduce age_ms damos core filter type
2026-11-05 4:44 [RFC PATCH v2 0/4] mm/damon: introduce age_ms damos core filter type SJ Park
` (3 preceding siblings ...)
2026-11-05 4:44 ` [RFC PATCH v2 4/4] Docs/admin-guide/mm/damon/usage: update for age_ms damos core filter SJ Park
@ 2026-11-05 12:31 ` Aveline Noir
2026-11-05 14:32 ` SJ Park
4 siblings, 1 reply; 7+ messages in thread
From: Aveline Noir @ 2026-11-05 12:31 UTC (permalink / raw)
To: SJ Park
Cc: Andrew Morton, Jonathan Corbet, damon, linux-doc, linux-kernel,
linux-mm, Randy Dunlap, sashiko-bot, sashiko-reviews, Shuah Khan
Hi SJ,
On Wed, 04 Nov 2026 20:44:20 -0800 SJ Park wrote:
> One straightforward solution is extending the DAMOS access pattern for
> specific deterministic time based age specification. However, DAMOS
> core filter is a better option. It is playing a similar role in a more
> flexible way.
Makes sense.
Reviewed-by: Aveline Noir <jm5905938@gmail.com>
Thanks,
Aveline Noir
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [RFC PATCH v2 0/4] mm/damon: introduce age_ms damos core filter type
2026-11-05 12:31 ` [RFC PATCH v2 0/4] mm/damon: introduce age_ms damos core filter type Aveline Noir
@ 2026-11-05 14:32 ` SJ Park
0 siblings, 0 replies; 7+ messages in thread
From: SJ Park @ 2026-11-05 14:32 UTC (permalink / raw)
To: Aveline Noir
Cc: SJ Park, Andrew Morton, Jonathan Corbet, damon, linux-doc,
linux-kernel, linux-mm, Randy Dunlap, sashiko-bot,
sashiko-reviews, Shuah Khan
On Thu, 05 Nov 2026 23:31:53 +1100 Aveline Noir <jm5905938@gmail.com> wrote:
> Hi SJ,
>
> On Wed, 04 Nov 2026 20:44:20 -0800 SJ Park wrote:
>
> > One straightforward solution is extending the DAMOS access pattern for
> > specific deterministic time based age specification. However, DAMOS
> > core filter is a better option. It is playing a similar role in a more
> > flexible way.
>
> Makes sense.
>
> Reviewed-by: Aveline Noir <jm5905938@gmail.com>
Thank you for reviewing, Aveline!
Thanks,
SJ
[...]
^ permalink raw reply [flat|nested] 7+ messages in thread