* [RFC PATCH 1/4] mm/damon/core: add DAMOS_FILTER_TYPE_AGE_MS
2026-11-04 15:36 [RFC PATCH 0/4] DAMOS access pattern supports selecting regions to apply a given SJ Park
@ 2026-11-04 15:36 ` SJ Park
2026-11-04 15:36 ` [RFC PATCH 2/4] mm/damon/sysfs-schemes: support DAMOS_FILTER_TYPE_AGE_MS SJ Park
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: SJ Park @ 2026-11-04 15:36 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 | 9 ++++++++-
2 files changed, 18 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..d631863b034db 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,11 @@ 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 = 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] 6+ messages in thread* [RFC PATCH 2/4] mm/damon/sysfs-schemes: support DAMOS_FILTER_TYPE_AGE_MS
2026-11-04 15:36 [RFC PATCH 0/4] DAMOS access pattern supports selecting regions to apply a given SJ Park
2026-11-04 15:36 ` [RFC PATCH 1/4] mm/damon/core: add DAMOS_FILTER_TYPE_AGE_MS SJ Park
@ 2026-11-04 15:36 ` SJ Park
2026-11-04 15:36 ` [RFC PATCH 3/4] Docs/mm/damon/design: update for age_ms damos core filter type SJ Park
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: SJ Park @ 2026-11-04 15:36 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] 6+ messages in thread* [RFC PATCH 3/4] Docs/mm/damon/design: update for age_ms damos core filter type
2026-11-04 15:36 [RFC PATCH 0/4] DAMOS access pattern supports selecting regions to apply a given SJ Park
2026-11-04 15:36 ` [RFC PATCH 1/4] mm/damon/core: add DAMOS_FILTER_TYPE_AGE_MS SJ Park
2026-11-04 15:36 ` [RFC PATCH 2/4] mm/damon/sysfs-schemes: support DAMOS_FILTER_TYPE_AGE_MS SJ Park
@ 2026-11-04 15:36 ` SJ Park
2026-11-04 15:36 ` [RFC PATCH 4/4] Docs/admin-guide/mm/damon/usage: update for age_ms damos core filter SJ Park
2026-11-05 1:15 ` [RFC PATCH 0/4] DAMOS access pattern supports selecting regions to apply a given SJ Park
4 siblings, 0 replies; 6+ messages in thread
From: SJ Park @ 2026-11-04 15:36 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] 6+ messages in thread* [RFC PATCH 4/4] Docs/admin-guide/mm/damon/usage: update for age_ms damos core filter
2026-11-04 15:36 [RFC PATCH 0/4] DAMOS access pattern supports selecting regions to apply a given SJ Park
` (2 preceding siblings ...)
2026-11-04 15:36 ` [RFC PATCH 3/4] Docs/mm/damon/design: update for age_ms damos core filter type SJ Park
@ 2026-11-04 15:36 ` SJ Park
2026-11-05 1:15 ` [RFC PATCH 0/4] DAMOS access pattern supports selecting regions to apply a given SJ Park
4 siblings, 0 replies; 6+ messages in thread
From: SJ Park @ 2026-11-04 15:36 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] 6+ messages in thread* Re: [RFC PATCH 0/4] DAMOS access pattern supports selecting regions to apply a given
2026-11-04 15:36 [RFC PATCH 0/4] DAMOS access pattern supports selecting regions to apply a given SJ Park
` (3 preceding siblings ...)
2026-11-04 15:36 ` [RFC PATCH 4/4] Docs/admin-guide/mm/damon/usage: update for age_ms damos core filter SJ Park
@ 2026-11-05 1:15 ` SJ Park
4 siblings, 0 replies; 6+ messages in thread
From: SJ Park @ 2026-11-05 1:15 UTC (permalink / raw)
To: SJ Park
Cc: Andrew Morton, Jonathan Corbet, Randy Dunlap, Shuah Khan, damon,
linux-doc, linux-kernel, linux-mm
On Wed, 4 Nov 2026 07:36:39 -0800 SJ Park <sj@kernel.org> wrote:
I forgot adding a subject line. As a result, first part of below paragraph was
added to the subject. Sorry for inconvenience. So, please read below
paragraph before the quoted followup paragraph to read the full intentional
cover letter message.
DAMOS access pattern supports selecting regions to apply a given
operation to, based on their age (access frequency stability). The age
is specified in the aggregation intervals unit. The aggregation
interval can be changed by users or intervals auto-tuning features. If
the intention is to specify the age in a deterministic way (e.g., 2
minutes), it should be updated for each aggregation interval update.
Doing so is cumbersome and challenging, particularly in the interval
auto-tuning case.
> 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. It can be used for both accepting and rejecting regions
> based on if they matched or unmatched to a given criteria. Multiple
> filters can also be combined for more flexible and detailed rules.
>
> Extend DAMOS core filter to support milliseconds unit based age
> criteria.
>
> Implement a new DAMOS core filter type, DAMOS_FILTER_TYPE_AGE_MS, in
> core layer and expose to DAMON API, via patch 1. Add the support of the
> feature on DAMON sysfs ABI with patch 2. Update the design and usage
> documents to explain the new features with patches 3 and 4,
> respectively.
>
> SJ Park (4):
> mm/damon/core: add DAMOS_FILTER_TYPE_AGE_MS
> mm/damon/sysfs-schemes: support DAMOS_FILTER_TYPE_AGE_MS
> Docs/mm/damon/design: update for age_ms damos core filter type
> Docs/admin-guide/mm/damon/usage: update for age_ms damos core filter
>
> Documentation/admin-guide/mm/damon/usage.rst | 3 +++
> Documentation/mm/damon/design.rst | 3 +++
> include/linux/damon.h | 16 ++++++++++------
> mm/damon/core.c | 9 ++++++++-
> mm/damon/sysfs-schemes.c | 5 +++++
> 5 files changed, 29 insertions(+), 7 deletions(-)
>
>
> base-commit: 32e967f279b24f952a5482e2c427894787848ee0
> --
> 2.47.3
>
>
Thanks,
SJ
^ permalink raw reply [flat|nested] 6+ messages in thread