[PATCH 16/22] selftests/damon/sysfs.py: generalize DAMOS schemes commit assertion

SeongJae Park posted 22 patches 2 months, 2 weeks ago
[PATCH 16/22] selftests/damon/sysfs.py: generalize DAMOS schemes commit assertion
Posted by SeongJae Park 2 months, 2 weeks ago
DAMOS scheme commitment assertion is hard-coded for a specific test
case.  Split it out into a general version that can be reused for
different test cases.

Signed-off-by: SeongJae Park <sj@kernel.org>
---
 tools/testing/selftests/damon/sysfs.py | 59 ++++++++++++++++----------
 1 file changed, 37 insertions(+), 22 deletions(-)

diff --git a/tools/testing/selftests/damon/sysfs.py b/tools/testing/selftests/damon/sysfs.py
index 803f38b61ab3..584a71cbb891 100755
--- a/tools/testing/selftests/damon/sysfs.py
+++ b/tools/testing/selftests/damon/sysfs.py
@@ -76,6 +76,42 @@ def assert_migrate_dests_committed(dests, dump):
         assert_true(dump['node_id_arr'][idx] == dest.id, 'node_id', dump)
         assert_true(dump['weight_arr'][idx] == dest.weight, 'weight', dump)
 
+def assert_access_pattern_committed(pattern, dump):
+    assert_true(dump['min_sz_region'] == pattern.size[0], 'min_sz_region',
+                dump)
+    assert_true(dump['max_sz_region'] == pattern.size[1], 'max_sz_region',
+                dump)
+    assert_true(dump['min_nr_accesses'] == pattern.nr_accesses[0],
+                'min_nr_accesses', dump)
+    assert_true(dump['max_nr_accesses'] == pattern.nr_accesses[1],
+                'max_nr_accesses', dump)
+    assert_true(dump['min_age_region'] == pattern.age[0], 'min_age_region',
+                dump)
+    assert_true(dump['max_age_region'] == pattern.age[1], 'miaxage_region',
+                dump)
+
+def assert_scheme_committed(scheme, dump):
+    assert_access_pattern_committed(scheme.access_pattern, dump['pattern'])
+    action_val = {
+            'willneed': 0,
+            'cold': 1,
+            'pageout': 2,
+            'hugepage': 3,
+            'nohugeapge': 4,
+            'lru_prio': 5,
+            'lru_deprio': 6,
+            'migrate_hot': 7,
+            'migrate_cold': 8,
+            'stat': 9,
+            }
+    assert_true(dump['action'] == action_val[scheme.action], 'action', dump)
+    assert_true(dump['apply_interval_us'] == scheme. apply_interval_us,
+                'apply_interval_us', dump)
+    assert_true(dump['target_nid'] == scheme.target_nid, 'target_nid', dump)
+    assert_migrate_dests_committed(scheme.dests, dump['migrate_dests'])
+    assert_quota_committed(scheme.quota, dump['quota'])
+    assert_watermarks_committed(scheme.watermarks, dump['wmarks'])
+
 def main():
     kdamonds = _damon_sysfs.Kdamonds(
             [_damon_sysfs.Kdamond(
@@ -122,28 +158,7 @@ def main():
     if len(ctx['schemes']) != 1:
         fail('number of schemes', status)
 
-    scheme = ctx['schemes'][0]
-    if scheme['pattern'] != {
-            'min_sz_region': 0,
-            'max_sz_region': 2**64 - 1,
-            'min_nr_accesses': 0,
-            'max_nr_accesses': 2**32 - 1,
-            'min_age_region': 0,
-            'max_age_region': 2**32 - 1,
-            }:
-        fail('damos pattern', status)
-    if scheme['action'] != 9:   # stat
-        fail('damos action', status)
-    if scheme['apply_interval_us'] != 0:
-        fail('damos apply interval', status)
-    if scheme['target_nid'] != -1:
-        fail('damos target nid', status)
-
-    assert_migrate_dests_committed(_damon_sysfs.DamosDests(),
-                                   scheme['migrate_dests'])
-    assert_quota_committed(_damon_sysfs.DamosQuota(), scheme['quota'])
-    assert_watermarks_committed(_damon_sysfs.DamosWatermarks(),
-                                scheme['wmarks'])
+    assert_scheme_committed(_damon_sysfs.Damos(), ctx['schemes'][0])
 
     kdamonds.stop()
 
-- 
2.39.5
Re: [PATCH 16/22] selftests/damon/sysfs.py: generalize DAMOS schemes commit assertion
Posted by Andrew Morton 2 months, 2 weeks ago
On Sun, 20 Jul 2025 10:16:46 -0700 SeongJae Park <sj@kernel.org> wrote:

> DAMOS scheme commitment assertion is hard-coded for a specific test
> case.  Split it out into a general version that can be reused for
> different test cases.
> 

This patch has the same name as [18/22].  I renamed this patch to

"selftests/damon/sysfs.py: generalize DAMOS access pattern commit assertion"

and altered its changelog to

: DAMOS scheme access pattern assertion is hard-coded for a specific test
: case.  Split it out into a general version that can be reused for
: different test cases.

> --- a/tools/testing/selftests/damon/sysfs.py
> +++ b/tools/testing/selftests/damon/sysfs.py
> @@ -76,6 +76,42 @@ def assert_migrate_dests_committed(dests, dump):
>          assert_true(dump['node_id_arr'][idx] == dest.id, 'node_id', dump)
>          assert_true(dump['weight_arr'][idx] == dest.weight, 'weight', dump)
>  
> +def assert_access_pattern_committed(pattern, dump):
> +    assert_true(dump['min_sz_region'] == pattern.size[0], 'min_sz_region',
> +                dump)
> +    assert_true(dump['max_sz_region'] == pattern.size[1], 'max_sz_region',
> +                dump)
> +    assert_true(dump['min_nr_accesses'] == pattern.nr_accesses[0],
> +                'min_nr_accesses', dump)
> +    assert_true(dump['max_nr_accesses'] == pattern.nr_accesses[1],
> +                'max_nr_accesses', dump)
> +    assert_true(dump['min_age_region'] == pattern.age[0], 'min_age_region',
> +                dump)
> +    assert_true(dump['max_age_region'] == pattern.age[1], 'miaxage_region',
> +                dump)
> +
> +def assert_scheme_committed(scheme, dump):
> +    assert_access_pattern_committed(scheme.access_pattern, dump['pattern'])
> +    action_val = {
> +            'willneed': 0,
> +            'cold': 1,
> +            'pageout': 2,
> +            'hugepage': 3,
> +            'nohugeapge': 4,
> +            'lru_prio': 5,
> +            'lru_deprio': 6,
> +            'migrate_hot': 7,
> +            'migrate_cold': 8,
> +            'stat': 9,
> +            }
> +    assert_true(dump['action'] == action_val[scheme.action], 'action', dump)
> +    assert_true(dump['apply_interval_us'] == scheme. apply_interval_us,
> +                'apply_interval_us', dump)
> +    assert_true(dump['target_nid'] == scheme.target_nid, 'target_nid', dump)
> +    assert_migrate_dests_committed(scheme.dests, dump['migrate_dests'])
> +    assert_quota_committed(scheme.quota, dump['quota'])
> +    assert_watermarks_committed(scheme.watermarks, dump['wmarks'])
> +
>  def main():
>      kdamonds = _damon_sysfs.Kdamonds(
>              [_damon_sysfs.Kdamond(
> @@ -122,28 +158,7 @@ def main():
>      if len(ctx['schemes']) != 1:
>          fail('number of schemes', status)
>  
> -    scheme = ctx['schemes'][0]
> -    if scheme['pattern'] != {
> -            'min_sz_region': 0,
> -            'max_sz_region': 2**64 - 1,
> -            'min_nr_accesses': 0,
> -            'max_nr_accesses': 2**32 - 1,
> -            'min_age_region': 0,
> -            'max_age_region': 2**32 - 1,
> -            }:
> -        fail('damos pattern', status)
> -    if scheme['action'] != 9:   # stat
> -        fail('damos action', status)
> -    if scheme['apply_interval_us'] != 0:
> -        fail('damos apply interval', status)
> -    if scheme['target_nid'] != -1:
> -        fail('damos target nid', status)
> -
> -    assert_migrate_dests_committed(_damon_sysfs.DamosDests(),
> -                                   scheme['migrate_dests'])
> -    assert_quota_committed(_damon_sysfs.DamosQuota(), scheme['quota'])
> -    assert_watermarks_committed(_damon_sysfs.DamosWatermarks(),
> -                                scheme['wmarks'])
> +    assert_scheme_committed(_damon_sysfs.Damos(), ctx['schemes'][0])
>  
>      kdamonds.stop()
>  
> -- 
> 2.39.5
Re: [PATCH 16/22] selftests/damon/sysfs.py: generalize DAMOS schemes commit assertion
Posted by SeongJae Park 2 months, 2 weeks ago
On Mon, 21 Jul 2025 20:09:22 -0700 Andrew Morton <akpm@linux-foundation.org> wrote:

> On Sun, 20 Jul 2025 10:16:46 -0700 SeongJae Park <sj@kernel.org> wrote:
> 
> > DAMOS scheme commitment assertion is hard-coded for a specific test
> > case.  Split it out into a general version that can be reused for
> > different test cases.
> > 
> 
> This patch has the same name as [18/22].  I renamed this patch to
> 
> "selftests/damon/sysfs.py: generalize DAMOS access pattern commit assertion"
> 
> and altered its changelog to
> 
> : DAMOS scheme access pattern assertion is hard-coded for a specific test
> : case.  Split it out into a general version that can be reused for
> : different test cases.

Thank you for catching this and fixing on your side, Andrew!  But, the actual
change that this patch is adding is the assertion of individual scheme, while
the 18th patch for the assertion of multiple schemes.  That is, this patch has
actually wrong subject, but the changelog is correct.

So, could you please make the changelog back to the original, but fix the
subject by 's/schemes/scheme/', as below?

"selftests/damon/sysfs.py: generalize DAMOS scheme commit assertion"

Sorry for making things unnecessarily complicated.  Please let me know if there
is anything that I can help for this.


Thanks,
SJ

[...]