* [PATCH v2 0/2] selftests/damon: fix memcg_path staging handling
@ 2026-05-29 9:08 Cheng Nie
2026-05-29 9:19 ` [PATCH v2 1/2] selftests/damon/_damon_sysfs.py: fix memcg_path assignment Cheng Nie
2026-05-29 9:21 ` [PATCH v2 2/2] selftests/damon/sysfs.py: validate memcg_path staging readback Cheng Nie
0 siblings, 2 replies; 5+ messages in thread
From: Cheng Nie @ 2026-05-29 9:08 UTC (permalink / raw)
To: sj; +Cc: shuah, damon, linux-mm, linux-kselftest, linux-kernel, kernel,
niecheng1
This series fixes memcg_path handling in DamosFilter and adds memcg
filter staging validation to the DAMON sysfs selftest.
Changes in v2:
- Use file-scoped commit subjects as suggested
- Move memcg_path readback check out of assert_filter_committed()
into a dedicated test case at the end of main()
Cheng Nie (2):
selftests/damon/_damon_sysfs.py: fix memcg_path assignment
selftests/damon/sysfs.py: validate memcg_path staging readback
tools/testing/selftests/damon/_damon_sysfs.py | 2 +-
tools/testing/selftests/damon/sysfs.py | 39 +++++++++++++++++++
2 files changed, 40 insertions(+), 1 deletion(-)
--
2.51.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 1/2] selftests/damon/_damon_sysfs.py: fix memcg_path assignment
2026-05-29 9:08 [PATCH v2 0/2] selftests/damon: fix memcg_path staging handling Cheng Nie
@ 2026-05-29 9:19 ` Cheng Nie
2026-05-29 14:52 ` SeongJae Park
2026-05-29 9:21 ` [PATCH v2 2/2] selftests/damon/sysfs.py: validate memcg_path staging readback Cheng Nie
1 sibling, 1 reply; 5+ messages in thread
From: Cheng Nie @ 2026-05-29 9:19 UTC (permalink / raw)
To: sj; +Cc: shuah, damon, linux-mm, linux-kselftest, linux-kernel, kernel,
niecheng1
DamosFilter stores memcg_path for sysfs staging, but the constructor
assigns it with a trailing comma and therefore turns it into a tuple.
Fix the assignment so memcg_path is stored as the intended string.
This makes memcg filter staging and follow-up validation use the
written path correctly.
Signed-off-by: Cheng Nie <niecheng1@uniontech.com>
---
tools/testing/selftests/damon/_damon_sysfs.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/testing/selftests/damon/_damon_sysfs.py b/tools/testing/selftests/damon/_damon_sysfs.py
index 8b12cc048440..43075892215e 100644
--- a/tools/testing/selftests/damon/_damon_sysfs.py
+++ b/tools/testing/selftests/damon/_damon_sysfs.py
@@ -271,7 +271,7 @@ class DamosFilter:
self.type_ = type_
self.matching = matching
self.allow = allow
- self.memcg_path = memcg_path,
+ self.memcg_path = memcg_path
self.addr_start = addr_start
self.addr_end = addr_end
self.target_idx = target_idx
--
2.51.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v2 2/2] selftests/damon/sysfs.py: validate memcg_path staging readback
2026-05-29 9:08 [PATCH v2 0/2] selftests/damon: fix memcg_path staging handling Cheng Nie
2026-05-29 9:19 ` [PATCH v2 1/2] selftests/damon/_damon_sysfs.py: fix memcg_path assignment Cheng Nie
@ 2026-05-29 9:21 ` Cheng Nie
2026-05-29 15:00 ` SeongJae Park
1 sibling, 1 reply; 5+ messages in thread
From: Cheng Nie @ 2026-05-29 9:21 UTC (permalink / raw)
To: sj; +Cc: shuah, damon, linux-mm, linux-kselftest, linux-kernel, kernel,
niecheng1
Add a dedicated test at the end of main() that writes memcg_path to
sysfs and checks the readback path. Validate the readback rather than
a derived memcg_id so the test stays focused on DAMON sysfs behavior
and avoids depending on the local userspace cgroup mount layout.
Signed-off-by: Cheng Nie <niecheng1@uniontech.com>
---
tools/testing/selftests/damon/sysfs.py | 39 ++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/tools/testing/selftests/damon/sysfs.py b/tools/testing/selftests/damon/sysfs.py
index aa03a1187489..0f20bc9c46b7 100755
--- a/tools/testing/selftests/damon/sysfs.py
+++ b/tools/testing/selftests/damon/sysfs.py
@@ -250,6 +250,43 @@ def assert_ctxs_committed(kdamonds):
if ctx in ctxs_paused_for_dump:
ctx.pause = False
+def test_memcg_filter_memcg_path_staging():
+ global kdamonds
+ memcg_filter = _damon_sysfs.DamosFilter(
+ type_='memcg', matching=True, allow=True, memcg_path='/')
+ kdamonds = _damon_sysfs.Kdamonds(
+ [_damon_sysfs.Kdamond(
+ contexts=[_damon_sysfs.DamonCtx(
+ targets=[_damon_sysfs.DamonTarget(pid=-1)],
+ schemes=[_damon_sysfs.Damos()],
+ )])])
+ err = kdamonds.start()
+ if err is not None:
+ fail('memcg_path staging: kdamond start', {'error': err})
+
+ context = _damon_sysfs.DamonCtx(
+ targets=[_damon_sysfs.DamonTarget(pid=-1)],
+ schemes=[_damon_sysfs.Damos(ops_filters=[memcg_filter])])
+ context.idx = 0
+ context.kdamond = kdamonds.kdamonds[0]
+ kdamonds.kdamonds[0].contexts = [context]
+
+ err = kdamonds.kdamonds[0].commit()
+ if err is not None:
+ fail('memcg_path staging: kdamond commit', {'error': err})
+
+ shown, rd_err = _damon_sysfs.read_file(
+ os.path.join(memcg_filter.sysfs_dir(), 'memcg_path'))
+ if rd_err is not None:
+ fail('memcg_path staging: sysfs read', {'error': rd_err})
+ assert_true(shown.rstrip('\n') == memcg_filter.memcg_path,
+ 'memcg_path readback', {'shown': shown})
+
+ err = kdamonds.stop()
+ if err is not None:
+ fail('memcg_path staging: kdamond stop', {'error': err})
+ kdamonds = None
+
def main():
global kdamonds
kdamonds = _damon_sysfs.Kdamonds(
@@ -356,5 +393,7 @@ def main():
assert_ctxs_committed(kdamonds)
kdamonds.stop()
+ test_memcg_filter_memcg_path_staging()
+
if __name__ == '__main__':
main()
--
2.51.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 1/2] selftests/damon/_damon_sysfs.py: fix memcg_path assignment
2026-05-29 9:19 ` [PATCH v2 1/2] selftests/damon/_damon_sysfs.py: fix memcg_path assignment Cheng Nie
@ 2026-05-29 14:52 ` SeongJae Park
0 siblings, 0 replies; 5+ messages in thread
From: SeongJae Park @ 2026-05-29 14:52 UTC (permalink / raw)
To: Cheng Nie
Cc: SeongJae Park, shuah, damon, linux-mm, linux-kselftest,
linux-kernel, kernel
On Fri, 29 May 2026 17:19:48 +0800 Cheng Nie <niecheng1@uniontech.com> wrote:
> DamosFilter stores memcg_path for sysfs staging, but the constructor
> assigns it with a trailing comma and therefore turns it into a tuple.
>
> Fix the assignment so memcg_path is stored as the intended string.
> This makes memcg filter staging and follow-up validation use the
> written path correctly.
Nice catch, thank you!
>
> Signed-off-by: Cheng Nie <niecheng1@uniontech.com>
Reviewed-by: SeongJae Park <sj@kernel.org>
Thanks,
SJ
[...]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 2/2] selftests/damon/sysfs.py: validate memcg_path staging readback
2026-05-29 9:21 ` [PATCH v2 2/2] selftests/damon/sysfs.py: validate memcg_path staging readback Cheng Nie
@ 2026-05-29 15:00 ` SeongJae Park
0 siblings, 0 replies; 5+ messages in thread
From: SeongJae Park @ 2026-05-29 15:00 UTC (permalink / raw)
To: Cheng Nie
Cc: SeongJae Park, shuah, damon, linux-mm, linux-kselftest,
linux-kernel, kernel
On Fri, 29 May 2026 17:21:31 +0800 Cheng Nie <niecheng1@uniontech.com> wrote:
> Add a dedicated test at the end of main() that writes memcg_path to
> sysfs and checks the readback path. Validate the readback rather than
> a derived memcg_id so the test stays focused on DAMON sysfs behavior
> and avoids depending on the local userspace cgroup mount layout.
Nice addition of a test, thank you!
>
> Signed-off-by: Cheng Nie <niecheng1@uniontech.com>
> ---
> tools/testing/selftests/damon/sysfs.py | 39 ++++++++++++++++++++++++++
> 1 file changed, 39 insertions(+)
>
> diff --git a/tools/testing/selftests/damon/sysfs.py b/tools/testing/selftests/damon/sysfs.py
> index aa03a1187489..0f20bc9c46b7 100755
> --- a/tools/testing/selftests/damon/sysfs.py
> +++ b/tools/testing/selftests/damon/sysfs.py
> @@ -250,6 +250,43 @@ def assert_ctxs_committed(kdamonds):
> if ctx in ctxs_paused_for_dump:
> ctx.pause = False
>
> +def test_memcg_filter_memcg_path_staging():
> + global kdamonds
> + memcg_filter = _damon_sysfs.DamosFilter(
> + type_='memcg', matching=True, allow=True, memcg_path='/')
> + kdamonds = _damon_sysfs.Kdamonds(
> + [_damon_sysfs.Kdamond(
> + contexts=[_damon_sysfs.DamonCtx(
> + targets=[_damon_sysfs.DamonTarget(pid=-1)],
> + schemes=[_damon_sysfs.Damos()],
> + )])])
> + err = kdamonds.start()
> + if err is not None:
> + fail('memcg_path staging: kdamond start', {'error': err})
I'd prefer the error message to be in form of something like "'memcg_path
staging: kdamond start (%s)' % err" for consistency.
> +
> + context = _damon_sysfs.DamonCtx(
> + targets=[_damon_sysfs.DamonTarget(pid=-1)],
> + schemes=[_damon_sysfs.Damos(ops_filters=[memcg_filter])])
> + context.idx = 0
> + context.kdamond = kdamonds.kdamonds[0]
> + kdamonds.kdamonds[0].contexts = [context]
> +
> + err = kdamonds.kdamonds[0].commit()
> + if err is not None:
> + fail('memcg_path staging: kdamond commit', {'error': err})
It seems we don't really need to do commit(). As Sashiko mentioned [1], it
also depends on CONFIG_MEMCG and active cgroup configuration. It would be
suffice to simply 'stage'. We don't have stage() method on Kdamonds, though.
What about setting all parameters including the memcg filter at the beginning,
do 'kdamonds.start()', but ignore the failure, and check the content of the
memcg_path file?
[1] https://lore.kernel.org/20260529094327.6D5031F00893@smtp.kernel.org
Thanks,
SJ
[...]
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-05-29 15:01 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-29 9:08 [PATCH v2 0/2] selftests/damon: fix memcg_path staging handling Cheng Nie
2026-05-29 9:19 ` [PATCH v2 1/2] selftests/damon/_damon_sysfs.py: fix memcg_path assignment Cheng Nie
2026-05-29 14:52 ` SeongJae Park
2026-05-29 9:21 ` [PATCH v2 2/2] selftests/damon/sysfs.py: validate memcg_path staging readback Cheng Nie
2026-05-29 15:00 ` SeongJae Park
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox