* [PATCH 00/10] mm/damon: extend DAMOS filters for inclusion
@ 2025-01-07 20:17 SeongJae Park
2025-01-07 20:17 ` [PATCH 01/10] mm/damon: fixup damos_filter kernel-doc SeongJae Park
` (10 more replies)
0 siblings, 11 replies; 14+ messages in thread
From: SeongJae Park @ 2025-01-07 20:17 UTC (permalink / raw)
To: Andrew Morton
Cc: SeongJae Park, Jonathan Corbet, damon, linux-doc, linux-kernel, linux-mm
DAMOS fitlers are exclusive filters. It only excludes memory of given
criterias from the DAMOS action targets. This has below limitations.
First, the name is not explicitly explaining the behavior. This
actually resulted in users' confusions[1]. Secondly, combined uses of
multiple filters provide restriced coverages. For example, building a
DAMOS scheme that applies the action to memory that belongs to cgroup A
"or" cgroup B is impossible. A workaround would be using two schemes
that fitlers out memory that not belong to cgroup A and cgroup B,
respectively. It is cumbersome, and difficult to control quota-like
per-scheme features in orchastration. Monitoring of filter-passed
memory statistic will also be complicated.
Extend DAMOS filters to support not only exclusion (blocking), but also
inclusion (pass-through) behavior. For this, add a new damos_filter
struct field called 'pass' for DAMON kernel API users. The filter works
as an inclusion filter or an exclusion filter when it is set or unset,
respectively. For DAMON user-space ABI users, add a DAMON sysfs file of
same name under DAMOS filter sysfs directory. To prevent exposing a
behavioral change to old users, set the blocking as the default
behavior.
Note that pass filters work for only inclusion, not exclusion of memory
that not satisfying the criteria. And the default behavior of DAMOS for
memory that no filter has involved is that the action can be applied to
those. This means that installing pass filters without block filters
after them is not useful for some usecases. Read the design document
update part of this patch series for more details.
[1] https://lore.kernel.org/20240320165619.71478-1-sj@kernel.org
Changes from RFC v2
(https://lore.kernel.org/20241227210819.63776-1-sj@kernel.org)
- Wordsmith messages
- Wordsmith design documentation about monitoring-purpose usage
- Rebase on latest mm-unstable
Changes from RFC v1
(https://lore.kernel.org/20241226221445.78433-1-sj@kernel.org)
- Fix encoding issue on the last patch
SeongJae Park (10):
mm/damon: fixup damos_filter kernel-doc
mm/damon/core: add damos_filter->pass field
mm/damon/core: support damos_filter->pass
mm/damon/paddr: support damos_filter->pass
mm/damon: add pass argument to damos_new_filter()
mm/damon/sysfs-schemes: add a file for setting damos_filter->pass
Docs/mm/damon/design: document pass/block filters behaviors
Docs/ABI/damon: document DAMOS filter pass sysfs file
Docs/admin-guide/mm/damon/usage: omit DAMOS filter details in favor of
design doc
Docs/admin-guide/mm/damon/usage: document DAMOS filter 'pass' sysfs
file
.../ABI/testing/sysfs-kernel-mm-damon | 14 +++--
Documentation/admin-guide/mm/damon/usage.rst | 55 ++++++++++---------
Documentation/mm/damon/design.rst | 34 ++++++++++--
include/linux/damon.h | 15 +++--
mm/damon/core.c | 12 ++--
mm/damon/paddr.c | 9 +--
mm/damon/reclaim.c | 2 +-
mm/damon/sysfs-schemes.c | 32 ++++++++++-
mm/damon/tests/core-kunit.h | 14 ++---
9 files changed, 130 insertions(+), 57 deletions(-)
--
2.39.5
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 01/10] mm/damon: fixup damos_filter kernel-doc
2025-01-07 20:17 [PATCH 00/10] mm/damon: extend DAMOS filters for inclusion SeongJae Park
@ 2025-01-07 20:17 ` SeongJae Park
2025-01-07 20:17 ` [PATCH 02/10] mm/damon/core: add damos_filter->pass field SeongJae Park
` (9 subsequent siblings)
10 siblings, 0 replies; 14+ messages in thread
From: SeongJae Park @ 2025-01-07 20:17 UTC (permalink / raw)
To: Andrew Morton; +Cc: SeongJae Park, damon, linux-kernel, linux-mm
The comment is slightly wrong. DAMOS filters are not only for pages,
but general bytes of memory. Also the description of 'matching' is bit
confusing, since DAMOS filters do only filtering out. Update the
comments to be less confusing.
Signed-off-by: SeongJae Park <sj@kernel.org>
---
include/linux/damon.h | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/include/linux/damon.h b/include/linux/damon.h
index 298b1a831e62..72afba74ac6d 100644
--- a/include/linux/damon.h
+++ b/include/linux/damon.h
@@ -347,8 +347,8 @@ enum damos_filter_type {
/**
* struct damos_filter - DAMOS action target memory filter.
- * @type: Type of the page.
- * @matching: If the matching page should filtered out or in.
+ * @type: Type of the target memory.
+ * @matching: If the @type-matching memory should be filtered out.
* @memcg_id: Memcg id of the question if @type is DAMOS_FILTER_MEMCG.
* @addr_range: Address range if @type is DAMOS_FILTER_TYPE_ADDR.
* @target_idx: Index of the &struct damon_target of
@@ -357,9 +357,10 @@ enum damos_filter_type {
* @list: List head for siblings.
*
* Before applying the &damos->action to a memory region, DAMOS checks if each
- * page of the region matches to this and avoid applying the action if so.
- * Support of each filter type depends on the running &struct damon_operations
- * and the type. Refer to &enum damos_filter_type for more detai.
+ * byte of the region matches to this given condition and avoid applying the
+ * action if so. Support of each filter type depends on the running &struct
+ * damon_operations and the type. Refer to &enum damos_filter_type for more
+ * details.
*/
struct damos_filter {
enum damos_filter_type type;
--
2.39.5
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 02/10] mm/damon/core: add damos_filter->pass field
2025-01-07 20:17 [PATCH 00/10] mm/damon: extend DAMOS filters for inclusion SeongJae Park
2025-01-07 20:17 ` [PATCH 01/10] mm/damon: fixup damos_filter kernel-doc SeongJae Park
@ 2025-01-07 20:17 ` SeongJae Park
2025-01-07 20:17 ` [PATCH 03/10] mm/damon/core: support damos_filter->pass SeongJae Park
` (8 subsequent siblings)
10 siblings, 0 replies; 14+ messages in thread
From: SeongJae Park @ 2025-01-07 20:17 UTC (permalink / raw)
To: Andrew Morton; +Cc: SeongJae Park, damon, linux-kernel, linux-mm
DAMOS filters work as only exclusive (block) filters. This makes it
easy to be confused, and restrictive at combining multiple filters for
various types of memory.
Add a field anmed 'pass' to damos_filter. The field will be used to
indicate whether the filter should work for inclusion or not.
Following two commits will make the core and operations set layer,
which handles the damos_filter object, respect the field, respectively.
Signed-off-by: SeongJae Park <sj@kernel.org>
---
include/linux/damon.h | 4 +++-
mm/damon/core.c | 1 +
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/include/linux/damon.h b/include/linux/damon.h
index 72afba74ac6d..baeb884ed156 100644
--- a/include/linux/damon.h
+++ b/include/linux/damon.h
@@ -348,7 +348,8 @@ enum damos_filter_type {
/**
* struct damos_filter - DAMOS action target memory filter.
* @type: Type of the target memory.
- * @matching: If the @type-matching memory should be filtered out.
+ * @matching: Whether this is for @type-matching memory.
+ * @pass: Whether the memory should pass-through the filter.
* @memcg_id: Memcg id of the question if @type is DAMOS_FILTER_MEMCG.
* @addr_range: Address range if @type is DAMOS_FILTER_TYPE_ADDR.
* @target_idx: Index of the &struct damon_target of
@@ -365,6 +366,7 @@ enum damos_filter_type {
struct damos_filter {
enum damos_filter_type type;
bool matching;
+ bool pass;
union {
unsigned short memcg_id;
struct damon_addr_range addr_range;
diff --git a/mm/damon/core.c b/mm/damon/core.c
index 52e50f183ffe..e54bd19d6f06 100644
--- a/mm/damon/core.c
+++ b/mm/damon/core.c
@@ -275,6 +275,7 @@ struct damos_filter *damos_new_filter(enum damos_filter_type type,
return NULL;
filter->type = type;
filter->matching = matching;
+ filter->pass = false;
INIT_LIST_HEAD(&filter->list);
return filter;
}
--
2.39.5
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 03/10] mm/damon/core: support damos_filter->pass
2025-01-07 20:17 [PATCH 00/10] mm/damon: extend DAMOS filters for inclusion SeongJae Park
2025-01-07 20:17 ` [PATCH 01/10] mm/damon: fixup damos_filter kernel-doc SeongJae Park
2025-01-07 20:17 ` [PATCH 02/10] mm/damon/core: add damos_filter->pass field SeongJae Park
@ 2025-01-07 20:17 ` SeongJae Park
2025-01-07 20:17 ` [PATCH 04/10] mm/damon/paddr: " SeongJae Park
` (7 subsequent siblings)
10 siblings, 0 replies; 14+ messages in thread
From: SeongJae Park @ 2025-01-07 20:17 UTC (permalink / raw)
To: Andrew Morton; +Cc: SeongJae Park, damon, linux-kernel, linux-mm
Respect damos_filter->pass from core layer's DAMOS filed handling logic,
by making the decision to pass a region in the middle of the filters
evaluation depending on the damos_filter->pass field.
Signed-off-by: SeongJae Park <sj@kernel.org>
---
mm/damon/core.c | 6 +++---
mm/damon/tests/core-kunit.h | 10 +++++-----
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/mm/damon/core.c b/mm/damon/core.c
index e54bd19d6f06..71db2c754e6d 100644
--- a/mm/damon/core.c
+++ b/mm/damon/core.c
@@ -1374,7 +1374,7 @@ static void damos_update_stat(struct damos *s,
s->stat.sz_ops_filter_passed += sz_ops_filter_passed;
}
-static bool __damos_filter_out(struct damon_ctx *ctx, struct damon_target *t,
+static bool damos_filter_match(struct damon_ctx *ctx, struct damon_target *t,
struct damon_region *r, struct damos_filter *filter)
{
bool matched = false;
@@ -1428,8 +1428,8 @@ static bool damos_filter_out(struct damon_ctx *ctx, struct damon_target *t,
struct damos_filter *filter;
damos_for_each_filter(filter, s) {
- if (__damos_filter_out(ctx, t, r, filter))
- return true;
+ if (damos_filter_match(ctx, t, r, filter))
+ return !filter->pass;
}
return false;
}
diff --git a/mm/damon/tests/core-kunit.h b/mm/damon/tests/core-kunit.h
index cf22e09a3507..8f58d3424c21 100644
--- a/mm/damon/tests/core-kunit.h
+++ b/mm/damon/tests/core-kunit.h
@@ -434,25 +434,25 @@ static void damos_test_filter_out(struct kunit *test)
damon_add_region(r, t);
/* region in the range */
- KUNIT_EXPECT_TRUE(test, __damos_filter_out(NULL, t, r, f));
+ KUNIT_EXPECT_TRUE(test, damos_filter_match(NULL, t, r, f));
KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 1);
/* region before the range */
r->ar.start = DAMON_MIN_REGION * 1;
r->ar.end = DAMON_MIN_REGION * 2;
- KUNIT_EXPECT_FALSE(test, __damos_filter_out(NULL, t, r, f));
+ KUNIT_EXPECT_FALSE(test, damos_filter_match(NULL, t, r, f));
KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 1);
/* region after the range */
r->ar.start = DAMON_MIN_REGION * 6;
r->ar.end = DAMON_MIN_REGION * 8;
- KUNIT_EXPECT_FALSE(test, __damos_filter_out(NULL, t, r, f));
+ KUNIT_EXPECT_FALSE(test, damos_filter_match(NULL, t, r, f));
KUNIT_EXPECT_EQ(test, damon_nr_regions(t), 1);
/* region started before the range */
r->ar.start = DAMON_MIN_REGION * 1;
r->ar.end = DAMON_MIN_REGION * 4;
- KUNIT_EXPECT_FALSE(test, __damos_filter_out(NULL, t, r, f));
+ KUNIT_EXPECT_FALSE(test, damos_filter_match(NULL, t, r, f));
/* filter should have split the region */
KUNIT_EXPECT_EQ(test, r->ar.start, DAMON_MIN_REGION * 1);
KUNIT_EXPECT_EQ(test, r->ar.end, DAMON_MIN_REGION * 2);
@@ -465,7 +465,7 @@ static void damos_test_filter_out(struct kunit *test)
/* region started in the range */
r->ar.start = DAMON_MIN_REGION * 2;
r->ar.end = DAMON_MIN_REGION * 8;
- KUNIT_EXPECT_TRUE(test, __damos_filter_out(NULL, t, r, f));
+ KUNIT_EXPECT_TRUE(test, damos_filter_match(NULL, t, r, f));
/* filter should have split the region */
KUNIT_EXPECT_EQ(test, r->ar.start, DAMON_MIN_REGION * 2);
KUNIT_EXPECT_EQ(test, r->ar.end, DAMON_MIN_REGION * 6);
--
2.39.5
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 04/10] mm/damon/paddr: support damos_filter->pass
2025-01-07 20:17 [PATCH 00/10] mm/damon: extend DAMOS filters for inclusion SeongJae Park
` (2 preceding siblings ...)
2025-01-07 20:17 ` [PATCH 03/10] mm/damon/core: support damos_filter->pass SeongJae Park
@ 2025-01-07 20:17 ` SeongJae Park
2025-01-07 20:17 ` [PATCH 05/10] mm/damon: add pass argument to damos_new_filter() SeongJae Park
` (6 subsequent siblings)
10 siblings, 0 replies; 14+ messages in thread
From: SeongJae Park @ 2025-01-07 20:17 UTC (permalink / raw)
To: Andrew Morton; +Cc: SeongJae Park, damon, linux-kernel, linux-mm
Respect damos_filter->pass from 'paddr', which is a DAMON operations set
implementation for the physical address space and supports a few types
of region-internal DAMOS filters (anon, memcg and young). The change is
similar to that of the previous commit for core layer update.
Signed-off-by: SeongJae Park <sj@kernel.org>
---
mm/damon/paddr.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/mm/damon/paddr.c b/mm/damon/paddr.c
index b0c283808ba6..71cb02128b46 100644
--- a/mm/damon/paddr.c
+++ b/mm/damon/paddr.c
@@ -198,7 +198,7 @@ static unsigned int damon_pa_check_accesses(struct damon_ctx *ctx)
return max_nr_accesses;
}
-static bool __damos_pa_filter_out(struct damos_filter *filter,
+static bool damos_pa_filter_match(struct damos_filter *filter,
struct folio *folio)
{
bool matched = false;
@@ -237,8 +237,8 @@ static bool damos_pa_filter_out(struct damos *scheme, struct folio *folio)
struct damos_filter *filter;
damos_for_each_filter(filter, scheme) {
- if (__damos_pa_filter_out(filter, folio))
- return true;
+ if (damos_pa_filter_match(filter, folio))
+ return !filter->pass;
}
return false;
}
--
2.39.5
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 05/10] mm/damon: add pass argument to damos_new_filter()
2025-01-07 20:17 [PATCH 00/10] mm/damon: extend DAMOS filters for inclusion SeongJae Park
` (3 preceding siblings ...)
2025-01-07 20:17 ` [PATCH 04/10] mm/damon/paddr: " SeongJae Park
@ 2025-01-07 20:17 ` SeongJae Park
2025-01-07 20:17 ` [PATCH 06/10] mm/damon/sysfs-schemes: add a file for setting damos_filter->pass SeongJae Park
` (5 subsequent siblings)
10 siblings, 0 replies; 14+ messages in thread
From: SeongJae Park @ 2025-01-07 20:17 UTC (permalink / raw)
To: Andrew Morton; +Cc: SeongJae Park, damon, linux-kernel, linux-mm
DAMON API users should set damos_filter->pass manually to use a DAMOS
pass filter, since damos_new_filter() unsets the field always. It is
cumbersome and easy to mistake. Add an arugment for setting the field
to damos_new_filter().
Signed-off-by: SeongJae Park <sj@kernel.org>
---
include/linux/damon.h | 2 +-
mm/damon/core.c | 7 ++++---
mm/damon/paddr.c | 3 ++-
mm/damon/reclaim.c | 2 +-
mm/damon/sysfs-schemes.c | 2 +-
mm/damon/tests/core-kunit.h | 4 ++--
6 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/include/linux/damon.h b/include/linux/damon.h
index baeb884ed156..27593dadbd76 100644
--- a/include/linux/damon.h
+++ b/include/linux/damon.h
@@ -801,7 +801,7 @@ void damon_update_region_access_rate(struct damon_region *r, bool accessed,
struct damon_attrs *attrs);
struct damos_filter *damos_new_filter(enum damos_filter_type type,
- bool matching);
+ bool matching, bool pass);
void damos_add_filter(struct damos *s, struct damos_filter *f);
void damos_destroy_filter(struct damos_filter *f);
diff --git a/mm/damon/core.c b/mm/damon/core.c
index 71db2c754e6d..13f12d82de5f 100644
--- a/mm/damon/core.c
+++ b/mm/damon/core.c
@@ -266,7 +266,7 @@ int damon_set_regions(struct damon_target *t, struct damon_addr_range *ranges,
}
struct damos_filter *damos_new_filter(enum damos_filter_type type,
- bool matching)
+ bool matching, bool pass)
{
struct damos_filter *filter;
@@ -275,7 +275,7 @@ struct damos_filter *damos_new_filter(enum damos_filter_type type,
return NULL;
filter->type = type;
filter->matching = matching;
- filter->pass = false;
+ filter->pass = pass;
INIT_LIST_HEAD(&filter->list);
return filter;
}
@@ -806,7 +806,8 @@ static int damos_commit_filters(struct damos *dst, struct damos *src)
continue;
new_filter = damos_new_filter(
- src_filter->type, src_filter->matching);
+ src_filter->type, src_filter->matching,
+ src_filter->pass);
if (!new_filter)
return -ENOMEM;
damos_commit_filter_arg(new_filter, src_filter);
diff --git a/mm/damon/paddr.c b/mm/damon/paddr.c
index 71cb02128b46..cd89500efc22 100644
--- a/mm/damon/paddr.c
+++ b/mm/damon/paddr.c
@@ -259,7 +259,8 @@ static unsigned long damon_pa_pageout(struct damon_region *r, struct damos *s,
}
}
if (install_young_filter) {
- filter = damos_new_filter(DAMOS_FILTER_TYPE_YOUNG, true);
+ filter = damos_new_filter(
+ DAMOS_FILTER_TYPE_YOUNG, true, false);
if (!filter)
return 0;
damos_add_filter(s, filter);
diff --git a/mm/damon/reclaim.c b/mm/damon/reclaim.c
index 9e0077a9404e..a675150965e0 100644
--- a/mm/damon/reclaim.c
+++ b/mm/damon/reclaim.c
@@ -221,7 +221,7 @@ static int damon_reclaim_apply_parameters(void)
}
if (skip_anon) {
- filter = damos_new_filter(DAMOS_FILTER_TYPE_ANON, true);
+ filter = damos_new_filter(DAMOS_FILTER_TYPE_ANON, true, false);
if (!filter)
goto out;
damos_add_filter(scheme, filter);
diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c
index deeaf23c1fcf..9a883e8aea1c 100644
--- a/mm/damon/sysfs-schemes.c
+++ b/mm/damon/sysfs-schemes.c
@@ -1901,7 +1901,7 @@ static int damon_sysfs_add_scheme_filters(struct damos *scheme,
sysfs_filters->filters_arr[i];
struct damos_filter *filter =
damos_new_filter(sysfs_filter->type,
- sysfs_filter->matching);
+ sysfs_filter->matching, false);
int err;
if (!filter)
diff --git a/mm/damon/tests/core-kunit.h b/mm/damon/tests/core-kunit.h
index 8f58d3424c21..532c6a6f21f9 100644
--- a/mm/damon/tests/core-kunit.h
+++ b/mm/damon/tests/core-kunit.h
@@ -411,7 +411,7 @@ static void damos_test_new_filter(struct kunit *test)
{
struct damos_filter *filter;
- filter = damos_new_filter(DAMOS_FILTER_TYPE_ANON, true);
+ filter = damos_new_filter(DAMOS_FILTER_TYPE_ANON, true, false);
KUNIT_EXPECT_EQ(test, filter->type, DAMOS_FILTER_TYPE_ANON);
KUNIT_EXPECT_EQ(test, filter->matching, true);
KUNIT_EXPECT_PTR_EQ(test, filter->list.prev, &filter->list);
@@ -425,7 +425,7 @@ static void damos_test_filter_out(struct kunit *test)
struct damon_region *r, *r2;
struct damos_filter *f;
- f = damos_new_filter(DAMOS_FILTER_TYPE_ADDR, true);
+ f = damos_new_filter(DAMOS_FILTER_TYPE_ADDR, true, false);
f->addr_range = (struct damon_addr_range){
.start = DAMON_MIN_REGION * 2, .end = DAMON_MIN_REGION * 6};
--
2.39.5
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 06/10] mm/damon/sysfs-schemes: add a file for setting damos_filter->pass
2025-01-07 20:17 [PATCH 00/10] mm/damon: extend DAMOS filters for inclusion SeongJae Park
` (4 preceding siblings ...)
2025-01-07 20:17 ` [PATCH 05/10] mm/damon: add pass argument to damos_new_filter() SeongJae Park
@ 2025-01-07 20:17 ` SeongJae Park
2025-01-07 20:17 ` [PATCH 07/10] Docs/mm/damon/design: document pass/block filters behaviors SeongJae Park
` (4 subsequent siblings)
10 siblings, 0 replies; 14+ messages in thread
From: SeongJae Park @ 2025-01-07 20:17 UTC (permalink / raw)
To: Andrew Morton; +Cc: SeongJae Park, damon, linux-kernel, linux-mm
Only kernel-space DAMON API users can use inclusive DAMOS filters. Add
a sysfs file named 'pass' under DAMOS filter directory of DAMON sysfs
interface, to let the user-space users use inclusive DAMOS filters.
Signed-off-by: SeongJae Park <sj@kernel.org>
---
mm/damon/sysfs-schemes.c | 32 +++++++++++++++++++++++++++++++-
1 file changed, 31 insertions(+), 1 deletion(-)
diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c
index 9a883e8aea1c..9e171046ee94 100644
--- a/mm/damon/sysfs-schemes.c
+++ b/mm/damon/sysfs-schemes.c
@@ -313,6 +313,7 @@ struct damon_sysfs_scheme_filter {
struct kobject kobj;
enum damos_filter_type type;
bool matching;
+ bool pass;
char *memcg_path;
struct damon_addr_range addr_range;
int target_idx;
@@ -385,6 +386,30 @@ static ssize_t matching_store(struct kobject *kobj,
return count;
}
+static ssize_t pass_show(struct kobject *kobj,
+ struct kobj_attribute *attr, char *buf)
+{
+ struct damon_sysfs_scheme_filter *filter = container_of(kobj,
+ struct damon_sysfs_scheme_filter, kobj);
+
+ return sysfs_emit(buf, "%c\n", filter->pass ? 'Y' : 'N');
+}
+
+static ssize_t pass_store(struct kobject *kobj,
+ struct kobj_attribute *attr, const char *buf, size_t count)
+{
+ struct damon_sysfs_scheme_filter *filter = container_of(kobj,
+ struct damon_sysfs_scheme_filter, kobj);
+ bool pass;
+ int err = kstrtobool(buf, &pass);
+
+ if (err)
+ return err;
+
+ filter->pass = pass;
+ return count;
+}
+
static ssize_t memcg_path_show(struct kobject *kobj,
struct kobj_attribute *attr, char *buf)
{
@@ -482,6 +507,9 @@ static struct kobj_attribute damon_sysfs_scheme_filter_type_attr =
static struct kobj_attribute damon_sysfs_scheme_filter_matching_attr =
__ATTR_RW_MODE(matching, 0600);
+static struct kobj_attribute damon_sysfs_scheme_filter_pass_attr =
+ __ATTR_RW_MODE(pass, 0600);
+
static struct kobj_attribute damon_sysfs_scheme_filter_memcg_path_attr =
__ATTR_RW_MODE(memcg_path, 0600);
@@ -497,6 +525,7 @@ static struct kobj_attribute damon_sysfs_scheme_filter_damon_target_idx_attr =
static struct attribute *damon_sysfs_scheme_filter_attrs[] = {
&damon_sysfs_scheme_filter_type_attr.attr,
&damon_sysfs_scheme_filter_matching_attr.attr,
+ &damon_sysfs_scheme_filter_pass_attr.attr,
&damon_sysfs_scheme_filter_memcg_path_attr.attr,
&damon_sysfs_scheme_filter_addr_start_attr.attr,
&damon_sysfs_scheme_filter_addr_end_attr.attr,
@@ -1901,7 +1930,8 @@ static int damon_sysfs_add_scheme_filters(struct damos *scheme,
sysfs_filters->filters_arr[i];
struct damos_filter *filter =
damos_new_filter(sysfs_filter->type,
- sysfs_filter->matching, false);
+ sysfs_filter->matching,
+ sysfs_filter->pass);
int err;
if (!filter)
--
2.39.5
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 07/10] Docs/mm/damon/design: document pass/block filters behaviors
2025-01-07 20:17 [PATCH 00/10] mm/damon: extend DAMOS filters for inclusion SeongJae Park
` (5 preceding siblings ...)
2025-01-07 20:17 ` [PATCH 06/10] mm/damon/sysfs-schemes: add a file for setting damos_filter->pass SeongJae Park
@ 2025-01-07 20:17 ` SeongJae Park
2025-01-08 4:04 ` SeongJae Park
2025-01-07 20:17 ` [PATCH 08/10] Docs/ABI/damon: document DAMOS filter pass sysfs file SeongJae Park
` (3 subsequent siblings)
10 siblings, 1 reply; 14+ messages in thread
From: SeongJae Park @ 2025-01-07 20:17 UTC (permalink / raw)
To: Andrew Morton
Cc: SeongJae Park, Jonathan Corbet, damon, linux-doc, linux-kernel, linux-mm
Update DAMOS filters design document to describe the pass/block
behavior of filters.
Signed-off-by: SeongJae Park <sj@kernel.org>
---
Documentation/mm/damon/design.rst | 34 +++++++++++++++++++++++++++----
1 file changed, 30 insertions(+), 4 deletions(-)
diff --git a/Documentation/mm/damon/design.rst b/Documentation/mm/damon/design.rst
index 449eb33688c2..3682e719b8a6 100644
--- a/Documentation/mm/damon/design.rst
+++ b/Documentation/mm/damon/design.rst
@@ -504,9 +504,35 @@ have a list of latency-critical processes.
To let users optimize DAMOS schemes with such special knowledge, DAMOS provides
a feature called DAMOS filters. The feature allows users to set an arbitrary
-number of filters for each scheme. Each filter specifies the type of target
-memory, and whether it should exclude the memory of the type (filter-out), or
-all except the memory of the type (filter-in).
+number of filters for each scheme. Each filter specifies
+
+- a type of memory (``type``),
+- whether it is for the memory of the type or all except the type
+ (``matching``), and
+- whether it is to allow (pass through the filter) or reject (block) applying
+ the scheme's action to the memory (``pass``).
+
+When multiple filters are installed, each filter is evaluated in the installed
+order. If a part of memory is matched to one of the filter, next filters are
+ignored. If a part of memory is not matched to any of the filters, the default
+behavior is applied. That is, as long as it fulfills other conditions of the
+scheme including the access pattern and quotas, the action will be applied to
+the part of the memory.
+
+For example, let's assume 1) a filter for passing anonymous pages and 2)
+another filter for blocking young pages are installed in the order. If a page
+of a region that eligible to apply the scheme's action is an anonymous page,
+the scheme's action will be applied to the page regardless of whether it is
+young or not, since it matches with the first filter. If the page is not
+anonymous but young, the scheme's action will not be applied, since the second
+filter blocks it. If the page is neither anonymous nor young, no filter is
+involved, so the action will be applied to the page.
+
+The fact that the action can be applied to any memory as long as no block
+filter explicitly excluded it means that installing pass filters without any
+block filter after those is same to not installing the pass filters, in terms
+of the ``action`` applying. Statistics for DAMOS filters will still be
+accounted, though. It is therefore still useful for monitoring purpose.
For efficient handling of filters, some types of filters are handled by the
core layer, while others are handled by operations set. In the latter case,
@@ -516,7 +542,7 @@ filter are not counted as the scheme has tried to the region. In contrast, if
a memory regions is filtered by an operations set layer-handled filter, it is
counted as the scheme has tried. This difference affects the statistics.
-Below types of filters are currently supported.
+Below ``type`` of filters are currently supported.
- anonymous page
- Applied to pages that containing data that not stored in files.
--
2.39.5
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 08/10] Docs/ABI/damon: document DAMOS filter pass sysfs file
2025-01-07 20:17 [PATCH 00/10] mm/damon: extend DAMOS filters for inclusion SeongJae Park
` (6 preceding siblings ...)
2025-01-07 20:17 ` [PATCH 07/10] Docs/mm/damon/design: document pass/block filters behaviors SeongJae Park
@ 2025-01-07 20:17 ` SeongJae Park
2025-01-07 20:17 ` [PATCH 09/10] Docs/admin-guide/mm/damon/usage: omit DAMOS filter details in favor of design doc SeongJae Park
` (2 subsequent siblings)
10 siblings, 0 replies; 14+ messages in thread
From: SeongJae Park @ 2025-01-07 20:17 UTC (permalink / raw)
To: Andrew Morton; +Cc: SeongJae Park, damon, linux-kernel, linux-mm
Update DAMON ABI document for added DAMOS filter 'pass' file.
Signed-off-by: SeongJae Park <sj@kernel.org>
---
Documentation/ABI/testing/sysfs-kernel-mm-damon | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/Documentation/ABI/testing/sysfs-kernel-mm-damon b/Documentation/ABI/testing/sysfs-kernel-mm-damon
index 8c0acb31638b..688bd27d8602 100644
--- a/Documentation/ABI/testing/sysfs-kernel-mm-damon
+++ b/Documentation/ABI/testing/sysfs-kernel-mm-damon
@@ -355,10 +355,16 @@ Description: If 'target' is written to the 'type' file, writing to or
What: /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/schemes/<S>/filters/<F>/matching
Date: Dec 2022
Contact: SeongJae Park <sj@kernel.org>
-Description: Writing 'Y' or 'N' to this file sets whether to filter out
- pages that do or do not match to the 'type' and 'memcg_path',
- respectively. Filter out means the action of the scheme will
- not be applied to.
+Description: Writing 'Y' or 'N' to this file sets whether the filter is for
+ the memory of the 'type', or all except the 'type'.
+
+What: /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/schemes/<S>/filters/<F>/pass
+Date: Dec 2024
+Contact: SeongJae Park <sj@kernel.org>
+Description: Writing 'Y' or 'N' to this file sets whether to allow (pass
+ through the filter) or deny (be blocked by the filter) applying
+ the scheme's action to the memory that satisfies the 'type' and
+ the 'matching' of the directory.
What: /sys/kernel/mm/damon/admin/kdamonds/<K>/contexts/<C>/schemes/<S>/stats/nr_tried
Date: Mar 2022
--
2.39.5
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 09/10] Docs/admin-guide/mm/damon/usage: omit DAMOS filter details in favor of design doc
2025-01-07 20:17 [PATCH 00/10] mm/damon: extend DAMOS filters for inclusion SeongJae Park
` (7 preceding siblings ...)
2025-01-07 20:17 ` [PATCH 08/10] Docs/ABI/damon: document DAMOS filter pass sysfs file SeongJae Park
@ 2025-01-07 20:17 ` SeongJae Park
2025-01-07 20:17 ` [PATCH 10/10] Docs/admin-guide/mm/damon/usage: document DAMOS filter 'pass' sysfs file SeongJae Park
2025-01-08 4:09 ` [PATCH 00/10] mm/damon: extend DAMOS filters for inclusion SeongJae Park
10 siblings, 0 replies; 14+ messages in thread
From: SeongJae Park @ 2025-01-07 20:17 UTC (permalink / raw)
To: Andrew Morton
Cc: SeongJae Park, Jonathan Corbet, damon, linux-doc, linux-kernel, linux-mm
DAMON usage document is describing some details about DAMOS filters,
which are also documented on the design doc. Deduplicate the details in
favor of the design doc.
Signed-off-by: SeongJae Park <sj@kernel.org>
---
Documentation/admin-guide/mm/damon/usage.rst | 29 ++++++++++----------
1 file changed, 14 insertions(+), 15 deletions(-)
diff --git a/Documentation/admin-guide/mm/damon/usage.rst b/Documentation/admin-guide/mm/damon/usage.rst
index 71cf29ae8502..8df3357dcfa3 100644
--- a/Documentation/admin-guide/mm/damon/usage.rst
+++ b/Documentation/admin-guide/mm/damon/usage.rst
@@ -411,13 +411,17 @@ Each filter directory contains six files, namely ``type``, ``matcing``,
file, you can write one of five special keywords: ``anon`` for anonymous pages,
``memcg`` for specific memory cgroup, ``young`` for young pages, ``addr`` for
specific address range (an open-ended interval), or ``target`` for specific
-DAMON monitoring target filtering. In case of the memory cgroup filtering, 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. In case of the
-address range filtering, you can specify the start and end address of the range
-to ``addr_start`` and ``addr_end`` files, respectively. For the DAMON
-monitoring target filtering, you can specify the index of the target between
-the list of the DAMON context's monitoring targets list to ``target_idx`` file.
+DAMON monitoring target filtering. Meaning of the types are same to the
+description on the :ref:`design doc <damon_design_damos_filters>`.
+
+In case of the memory cgroup filtering, 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. In case of the address range filtering, you can
+specify the start and end address of the range to ``addr_start`` and
+``addr_end`` files, respectively. For the DAMON monitoring target filtering,
+you can specify the index of the target between the list of the DAMON context's
+monitoring targets list to ``target_idx`` file.
+
You can write ``Y`` or ``N`` to ``matching`` file to filter out pages that does
or does not match to the type, respectively. Then, the scheme's action will
not be applied to the pages that specified to be filtered out.
@@ -434,14 +438,9 @@ pages of all memory cgroups except ``/having_care_already``.::
echo /having_care_already > 1/memcg_path
echo Y > 1/matching
-Note that ``anon`` and ``memcg`` filters are currently supported only when
-``paddr`` :ref:`implementation <sysfs_context>` is being used.
-
-Also, memory regions that are filtered out by ``addr`` or ``target`` filters
-are not counted as the scheme has tried to those, while regions that filtered
-out by other type filters are counted as the scheme has tried to. The
-difference is applied to :ref:`stats <damos_stats>` and
-:ref:`tried regions <sysfs_schemes_tried_regions>`.
+Refer to the :ref:`DAMOS filters design documentation
+<damon_design_damos_filters>` for more details including when each of the
+filters are supported and differences on stats.
.. _sysfs_schemes_stats:
--
2.39.5
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 10/10] Docs/admin-guide/mm/damon/usage: document DAMOS filter 'pass' sysfs file
2025-01-07 20:17 [PATCH 00/10] mm/damon: extend DAMOS filters for inclusion SeongJae Park
` (8 preceding siblings ...)
2025-01-07 20:17 ` [PATCH 09/10] Docs/admin-guide/mm/damon/usage: omit DAMOS filter details in favor of design doc SeongJae Park
@ 2025-01-07 20:17 ` SeongJae Park
2025-01-08 4:09 ` [PATCH 00/10] mm/damon: extend DAMOS filters for inclusion SeongJae Park
10 siblings, 0 replies; 14+ messages in thread
From: SeongJae Park @ 2025-01-07 20:17 UTC (permalink / raw)
To: Andrew Morton
Cc: SeongJae Park, Jonathan Corbet, damon, linux-doc, linux-kernel, linux-mm
Update DAMON usage document for the newly added 'pass' sysfs file for
DAMOS filters.
Signed-off-by: SeongJae Park <sj@kernel.org>
---
Documentation/admin-guide/mm/damon/usage.rst | 34 ++++++++++++--------
1 file changed, 20 insertions(+), 14 deletions(-)
diff --git a/Documentation/admin-guide/mm/damon/usage.rst b/Documentation/admin-guide/mm/damon/usage.rst
index 8df3357dcfa3..77064c704bf2 100644
--- a/Documentation/admin-guide/mm/damon/usage.rst
+++ b/Documentation/admin-guide/mm/damon/usage.rst
@@ -83,7 +83,7 @@ comma (",").
│ │ │ │ │ │ │ │ │ 0/target_metric,target_value,current_value
│ │ │ │ │ │ │ :ref:`watermarks <sysfs_watermarks>`/metric,interval_us,high,mid,low
│ │ │ │ │ │ │ :ref:`filters <sysfs_filters>`/nr_filters
- │ │ │ │ │ │ │ │ 0/type,matching,memcg_id
+ │ │ │ │ │ │ │ │ 0/type,matching,memcg_id,pass
│ │ │ │ │ │ │ :ref:`stats <sysfs_schemes_stats>`/nr_tried,sz_tried,nr_applied,sz_applied,sz_ops_filter_passed,qt_exceeds
│ │ │ │ │ │ │ :ref:`tried_regions <sysfs_schemes_tried_regions>`/total_bytes
│ │ │ │ │ │ │ │ 0/start,end,nr_accesses,age,sz_filter_passed
@@ -406,13 +406,14 @@ number (``N``) to the file creates the number of child directories named ``0``
to ``N-1``. Each directory represents each filter. The filters are evaluated
in the numeric order.
-Each filter directory contains six files, namely ``type``, ``matcing``,
-``memcg_path``, ``addr_start``, ``addr_end``, and ``target_idx``. To ``type``
-file, you can write one of five special keywords: ``anon`` for anonymous pages,
-``memcg`` for specific memory cgroup, ``young`` for young pages, ``addr`` for
-specific address range (an open-ended interval), or ``target`` for specific
-DAMON monitoring target filtering. Meaning of the types are same to the
-description on the :ref:`design doc <damon_design_damos_filters>`.
+Each filter directory contains seven files, namely ``type``, ``matcing``,
+``pass``, ``memcg_path``, ``addr_start``, ``addr_end``, and ``target_idx``. To
+``type`` file, you can write one of five special keywords: ``anon`` for
+anonymous pages, ``memcg`` for specific memory cgroup, ``young`` for young
+pages, ``addr`` for specific address range (an open-ended interval), or
+``target`` for specific DAMON monitoring target filtering. Meaning of the
+types are same to the description on the :ref:`design doc
+<damon_design_damos_filters>`.
In case of the memory cgroup filtering, you can specify the memory cgroup of
the interest by writing the path of the memory cgroup from the cgroups mount
@@ -422,25 +423,30 @@ specify the start and end address of the range to ``addr_start`` and
you can specify the index of the target between the list of the DAMON context's
monitoring targets list to ``target_idx`` file.
-You can write ``Y`` or ``N`` to ``matching`` file to filter out pages that does
-or does not match to the type, respectively. Then, the scheme's action will
-not be applied to the pages that specified to be filtered out.
+You can write ``Y`` or ``N`` to ``matching`` file to specify whether the filter
+is for memory that matches the ``type``. You can write ``Y`` or ``N`` to
+``pass`` file to specify should this filter let the memory that satisfies the
+``type`` and ``matching`` pass though (allow) or be blocked by (reject) the
+filter. Allowing means the scheme's action will be applied to the memory.
For example, below restricts a DAMOS action to be applied to only non-anonymous
pages of all memory cgroups except ``/having_care_already``.::
# echo 2 > nr_filters
- # # filter out anonymous pages
+ # # block anonymous pages
echo anon > 0/type
echo Y > 0/matching
+ echo N > 0/pass
# # further filter out all cgroups except one at '/having_care_already'
echo memcg > 1/type
echo /having_care_already > 1/memcg_path
echo Y > 1/matching
+ echo N > 1/pass
Refer to the :ref:`DAMOS filters design documentation
-<damon_design_damos_filters>` for more details including when each of the
-filters are supported and differences on stats.
+<damon_design_damos_filters>` for more details including how multiple filters
+of different ``pass`` works, when each of the filters are supported, and
+differences on stats.
.. _sysfs_schemes_stats:
--
2.39.5
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 07/10] Docs/mm/damon/design: document pass/block filters behaviors
2025-01-07 20:17 ` [PATCH 07/10] Docs/mm/damon/design: document pass/block filters behaviors SeongJae Park
@ 2025-01-08 4:04 ` SeongJae Park
2025-01-08 17:26 ` SeongJae Park
0 siblings, 1 reply; 14+ messages in thread
From: SeongJae Park @ 2025-01-08 4:04 UTC (permalink / raw)
To: SeongJae Park
Cc: Andrew Morton, Jonathan Corbet, damon, linux-doc, linux-kernel, linux-mm
On Tue, 7 Jan 2025 12:17:36 -0800 SeongJae Park <sj@kernel.org> wrote:
> Update DAMOS filters design document to describe the pass/block
> behavior of filters.
>
> Signed-off-by: SeongJae Park <sj@kernel.org>
> ---
> Documentation/mm/damon/design.rst | 34 +++++++++++++++++++++++++++----
> 1 file changed, 30 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/mm/damon/design.rst b/Documentation/mm/damon/design.rst
> index 449eb33688c2..3682e719b8a6 100644
> --- a/Documentation/mm/damon/design.rst
> +++ b/Documentation/mm/damon/design.rst
> @@ -504,9 +504,35 @@ have a list of latency-critical processes.
>
> To let users optimize DAMOS schemes with such special knowledge, DAMOS provides
> a feature called DAMOS filters. The feature allows users to set an arbitrary
> -number of filters for each scheme. Each filter specifies the type of target
> -memory, and whether it should exclude the memory of the type (filter-out), or
> -all except the memory of the type (filter-in).
> +number of filters for each scheme. Each filter specifies
> +
> +- a type of memory (``type``),
> +- whether it is for the memory of the type or all except the type
> + (``matching``), and
> +- whether it is to allow (pass through the filter) or reject (block) applying
> + the scheme's action to the memory (``pass``).
> +
> +When multiple filters are installed, each filter is evaluated in the installed
> +order. If a part of memory is matched to one of the filter, next filters are
> +ignored. If a part of memory is not matched to any of the filters, the default
> +behavior is applied. That is, as long as it fulfills other conditions of the
> +scheme including the access pattern and quotas, the action will be applied to
> +the part of the memory.
> +
> +For example, let's assume 1) a filter for passing anonymous pages and 2)
> +another filter for blocking young pages are installed in the order. If a page
> +of a region that eligible to apply the scheme's action is an anonymous page,
> +the scheme's action will be applied to the page regardless of whether it is
> +young or not, since it matches with the first filter. If the page is not
> +anonymous but young, the scheme's action will not be applied, since the second
> +filter blocks it. If the page is neither anonymous nor young, no filter is
> +involved, so the action will be applied to the page.
> +
> +The fact that the action can be applied to any memory as long as no block
> +filter explicitly excluded it means that installing pass filters without any
> +block filter after those is same to not installing the pass filters, in terms
> +of the ``action`` applying. Statistics for DAMOS filters will still be
> +accounted, though.
The above last sentence is right in a sense, but not useful and could only
confuse readers. The statistics for DAMOS filters are filters passed size
stat, which is provided as per-scheme accumulated stat and per-region instant
information. The stat is for any memory that be able to apply the DAMOS action
after the filters check stage. Hence, whether it has passed the stage due to
existence of a pass filter that matches the memory, or the absence of any
matching filter is distinguishable.
> It is therefore still useful for monitoring purpose.
Hence, the above sentence is completely wrong. The case (installing pass
filtrs without any block filter after those) is not useful even for monitoring
purpose.
The RFC version of this patch was mentioning it correctly, but was not clearly
describing why it is not also useless for even monitoring purpose. I was also
confused due to the absence of the context. I will rewrite this part and send
the whole series again as v2.
Thanks,
SJ
[...]
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 00/10] mm/damon: extend DAMOS filters for inclusion
2025-01-07 20:17 [PATCH 00/10] mm/damon: extend DAMOS filters for inclusion SeongJae Park
` (9 preceding siblings ...)
2025-01-07 20:17 ` [PATCH 10/10] Docs/admin-guide/mm/damon/usage: document DAMOS filter 'pass' sysfs file SeongJae Park
@ 2025-01-08 4:09 ` SeongJae Park
10 siblings, 0 replies; 14+ messages in thread
From: SeongJae Park @ 2025-01-08 4:09 UTC (permalink / raw)
To: SeongJae Park
Cc: Andrew Morton, Jonathan Corbet, damon, linux-doc, linux-kernel, linux-mm
On Tue, 7 Jan 2025 12:17:29 -0800 SeongJae Park <sj@kernel.org> wrote:
[...]
> Extend DAMOS filters to support not only exclusion (blocking), but also
> inclusion (pass-through) behavior.
[...]
> This means that installing pass filters without block filters
> after them is not useful for some usecases.
The above comment is wrong. The case is just useless.
> Read the design document
> update part of this patch series for more details.
I added why it is wrong in detail as a reply to the design doc patch (7/10).
I will fix the wrong parts and send this series again as v2.
Thanks,
SJ
[...]
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 07/10] Docs/mm/damon/design: document pass/block filters behaviors
2025-01-08 4:04 ` SeongJae Park
@ 2025-01-08 17:26 ` SeongJae Park
0 siblings, 0 replies; 14+ messages in thread
From: SeongJae Park @ 2025-01-08 17:26 UTC (permalink / raw)
To: SeongJae Park
Cc: Andrew Morton, Jonathan Corbet, damon, linux-doc, linux-kernel, linux-mm
On Tue, 7 Jan 2025 20:04:54 -0800 SeongJae Park <sj@kernel.org> wrote:
> On Tue, 7 Jan 2025 12:17:36 -0800 SeongJae Park <sj@kernel.org> wrote:
>
[...]
> > +The fact that the action can be applied to any memory as long as no block
> > +filter explicitly excluded it means that installing pass filters without any
> > +block filter after those is same to not installing the pass filters, in terms
> > +of the ``action`` applying. Statistics for DAMOS filters will still be
> > +accounted, though.
>
> The above last sentence is right in a sense, but not useful and could only
> confuse readers. The statistics for DAMOS filters are filters passed size
> stat, which is provided as per-scheme accumulated stat and per-region instant
> information. The stat is for any memory that be able to apply the DAMOS action
> after the filters check stage. Hence, whether it has passed the stage due to
> existence of a pass filter that matches the memory, or the absence of any
> matching filter is distinguishable.
>
> > It is therefore still useful for monitoring purpose.
>
> Hence, the above sentence is completely wrong. The case (installing pass
> filtrs without any block filter after those) is not useful even for monitoring
> purpose.
>
> The RFC version of this patch was mentioning it correctly, but was not clearly
> describing why it is not also useless for even monitoring purpose. I was also
> confused due to the absence of the context. I will rewrite this part and send
> the whole series again as v2.
Another reason that I was confused is the conflict of the term. The term
'pass' at sz_filters_passed stat means passing through the filters checking
stage. The same term 'pass' at "DAMOS pass filter" means it will let the
memory that matches to its criteria pass the stage. Hence, the term for
'sz_filters_passed' is a superset of it for 'DAMOS pass filter'. This is
obviously confusing.
I will rename things that introduced by this series to be called "allow"
instead of "pass" in v2.
Thanks,
SJ
>
>
> Thanks,
> SJ
>
> [...]
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2025-01-08 17:26 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-01-07 20:17 [PATCH 00/10] mm/damon: extend DAMOS filters for inclusion SeongJae Park
2025-01-07 20:17 ` [PATCH 01/10] mm/damon: fixup damos_filter kernel-doc SeongJae Park
2025-01-07 20:17 ` [PATCH 02/10] mm/damon/core: add damos_filter->pass field SeongJae Park
2025-01-07 20:17 ` [PATCH 03/10] mm/damon/core: support damos_filter->pass SeongJae Park
2025-01-07 20:17 ` [PATCH 04/10] mm/damon/paddr: " SeongJae Park
2025-01-07 20:17 ` [PATCH 05/10] mm/damon: add pass argument to damos_new_filter() SeongJae Park
2025-01-07 20:17 ` [PATCH 06/10] mm/damon/sysfs-schemes: add a file for setting damos_filter->pass SeongJae Park
2025-01-07 20:17 ` [PATCH 07/10] Docs/mm/damon/design: document pass/block filters behaviors SeongJae Park
2025-01-08 4:04 ` SeongJae Park
2025-01-08 17:26 ` SeongJae Park
2025-01-07 20:17 ` [PATCH 08/10] Docs/ABI/damon: document DAMOS filter pass sysfs file SeongJae Park
2025-01-07 20:17 ` [PATCH 09/10] Docs/admin-guide/mm/damon/usage: omit DAMOS filter details in favor of design doc SeongJae Park
2025-01-07 20:17 ` [PATCH 10/10] Docs/admin-guide/mm/damon/usage: document DAMOS filter 'pass' sysfs file SeongJae Park
2025-01-08 4:09 ` [PATCH 00/10] mm/damon: extend DAMOS filters for inclusion SeongJae Park
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox