* [PATCH 00/10] mm/damon: misc fixes and improvements
@ 2024-05-03 18:03 SeongJae Park
2024-05-03 18:03 ` [PATCH 02/10] selftests/damon/_damon_sysfs: check errors from nr_schemes file reads SeongJae Park
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: SeongJae Park @ 2024-05-03 18:03 UTC (permalink / raw)
To: Andrew Morton
Cc: SeongJae Park, Jonathan Corbet, Shuah Khan, damon, linux-mm,
linux-doc, linux-kselftest, linux-kernel
Add miscelleneous and non-urgent fixes and improvements for DAMON code,
selftests, and documents.
SeongJae Park (10):
mm/damon/core: initialize ->esz_bp from damos_quota_init_priv()
selftests/damon/_damon_sysfs: check errors from nr_schemes file reads
selftests/damon/_damon_sysfs: find sysfs mount point from /proc/mounts
selftests/damon/_damon_sysfs: use 'is' instead of '==' for 'None'
selftests/damon: classify tests for functionalities and regressions
Docs/admin-guide/mm/damon/usage: fix wrong example of DAMOS filter
matching sysfs file
Docs/admin-guide/mm/damon/usage: fix wrong schemes effective quota
update command
Docs/mm/damon/design: use a list for supported filters
Docs/mm/damon/maintainer-profile: change the maintainer's timezone
from PST to PT
Docs/mm/damon/maintainer-profile: allow posting patches based on
damon/next tree
Documentation/admin-guide/mm/damon/usage.rst | 6 +-
Documentation/mm/damon/design.rst | 46 +++++----
Documentation/mm/damon/maintainer-profile.rst | 13 +--
mm/damon/core.c | 1 +
tools/testing/selftests/damon/Makefile | 13 ++-
tools/testing/selftests/damon/_damon_sysfs.py | 95 +++++++++++--------
6 files changed, 100 insertions(+), 74 deletions(-)
base-commit: fc7314cb6b750187a1366e0bf9da4c3ca8cfd064
--
2.39.2
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH 02/10] selftests/damon/_damon_sysfs: check errors from nr_schemes file reads 2024-05-03 18:03 [PATCH 00/10] mm/damon: misc fixes and improvements SeongJae Park @ 2024-05-03 18:03 ` SeongJae Park 2024-05-03 18:03 ` [PATCH 03/10] selftests/damon/_damon_sysfs: find sysfs mount point from /proc/mounts SeongJae Park ` (3 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: SeongJae Park @ 2024-05-03 18:03 UTC (permalink / raw) To: Andrew Morton Cc: SeongJae Park, Shuah Khan, damon, linux-mm, linux-kselftest, linux-kernel DAMON context staging method in _damon_sysfs.py is not checking the returned error from nr_schemes file read. Check it. Fixes: f5f0e5a2bef9 ("selftests/damon/_damon_sysfs: implement kdamonds start function") Signed-off-by: SeongJae Park <sj@kernel.org> --- tools/testing/selftests/damon/_damon_sysfs.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/testing/selftests/damon/_damon_sysfs.py b/tools/testing/selftests/damon/_damon_sysfs.py index f80fdcef507c..fffa74a78bd7 100644 --- a/tools/testing/selftests/damon/_damon_sysfs.py +++ b/tools/testing/selftests/damon/_damon_sysfs.py @@ -341,6 +341,8 @@ class DamonCtx: nr_schemes_file = os.path.join( self.sysfs_dir(), 'schemes', 'nr_schemes') content, err = read_file(nr_schemes_file) + if err is not None: + return err if int(content) != len(self.schemes): err = write_file(nr_schemes_file, '%d' % len(self.schemes)) if err != None: -- 2.39.2 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 03/10] selftests/damon/_damon_sysfs: find sysfs mount point from /proc/mounts 2024-05-03 18:03 [PATCH 00/10] mm/damon: misc fixes and improvements SeongJae Park 2024-05-03 18:03 ` [PATCH 02/10] selftests/damon/_damon_sysfs: check errors from nr_schemes file reads SeongJae Park @ 2024-05-03 18:03 ` SeongJae Park 2024-05-03 18:03 ` [PATCH 04/10] selftests/damon/_damon_sysfs: use 'is' instead of '==' for 'None' SeongJae Park ` (2 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: SeongJae Park @ 2024-05-03 18:03 UTC (permalink / raw) To: Andrew Morton Cc: SeongJae Park, Shuah Khan, damon, linux-mm, linux-kselftest, linux-kernel _damon_sysfs.py assumes sysfs is mounted at /sys. In some systems, that might not be true. Find the mount point from /proc/mounts file content. Signed-off-by: SeongJae Park <sj@kernel.org> --- tools/testing/selftests/damon/_damon_sysfs.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/damon/_damon_sysfs.py b/tools/testing/selftests/damon/_damon_sysfs.py index fffa74a78bd7..5367e98817a9 100644 --- a/tools/testing/selftests/damon/_damon_sysfs.py +++ b/tools/testing/selftests/damon/_damon_sysfs.py @@ -2,7 +2,18 @@ import os -sysfs_root = '/sys/kernel/mm/damon/admin' +ksft_skip=4 + +sysfs_root = None +with open('/proc/mounts', 'r') as f: + for line in f: + dev_name, mount_point, dev_fs = line.split()[:3] + if dev_fs == 'sysfs': + sysfs_root = '%s/kernel/mm/damon/admin' % mount_point + break +if sysfs_root is None: + print('Seems sysfs not mounted?') + exit(ksft_skip) def write_file(path, string): "Returns error string if failed, or None otherwise" -- 2.39.2 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 04/10] selftests/damon/_damon_sysfs: use 'is' instead of '==' for 'None' 2024-05-03 18:03 [PATCH 00/10] mm/damon: misc fixes and improvements SeongJae Park 2024-05-03 18:03 ` [PATCH 02/10] selftests/damon/_damon_sysfs: check errors from nr_schemes file reads SeongJae Park 2024-05-03 18:03 ` [PATCH 03/10] selftests/damon/_damon_sysfs: find sysfs mount point from /proc/mounts SeongJae Park @ 2024-05-03 18:03 ` SeongJae Park 2024-05-03 18:03 ` [PATCH 05/10] selftests/damon: classify tests for functionalities and regressions SeongJae Park 2024-05-03 18:06 ` [PATCH 00/10] mm/damon: misc fixes and improvements SeongJae Park 4 siblings, 0 replies; 6+ messages in thread From: SeongJae Park @ 2024-05-03 18:03 UTC (permalink / raw) To: Andrew Morton Cc: SeongJae Park, Shuah Khan, damon, linux-mm, linux-kselftest, linux-kernel _damon_sysfs.py is using '==' or '!=' for 'None'. Since 'None' is a singleton, using 'is' or 'is not' is more efficient. Use the more efficient one. Signed-off-by: SeongJae Park <sj@kernel.org> --- tools/testing/selftests/damon/_damon_sysfs.py | 80 +++++++++---------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/tools/testing/selftests/damon/_damon_sysfs.py b/tools/testing/selftests/damon/_damon_sysfs.py index 5367e98817a9..01d4b8022d50 100644 --- a/tools/testing/selftests/damon/_damon_sysfs.py +++ b/tools/testing/selftests/damon/_damon_sysfs.py @@ -45,11 +45,11 @@ class DamosAccessPattern: self.nr_accesses = nr_accesses self.age = age - if self.size == None: + if self.size is None: self.size = [0, 2**64 - 1] - if self.nr_accesses == None: + if self.nr_accesses is None: self.nr_accesses = [0, 2**64 - 1] - if self.age == None: + if self.age is None: self.age = [0, 2**64 - 1] def sysfs_dir(self): @@ -58,27 +58,27 @@ class DamosAccessPattern: def stage(self): err = write_file( os.path.join(self.sysfs_dir(), 'sz', 'min'), self.size[0]) - if err != None: + if err is not None: return err err = write_file( os.path.join(self.sysfs_dir(), 'sz', 'max'), self.size[1]) - if err != None: + if err is not None: return err err = write_file(os.path.join(self.sysfs_dir(), 'nr_accesses', 'min'), self.nr_accesses[0]) - if err != None: + if err is not None: return err err = write_file(os.path.join(self.sysfs_dir(), 'nr_accesses', 'max'), self.nr_accesses[1]) - if err != None: + if err is not None: return err err = write_file( os.path.join(self.sysfs_dir(), 'age', 'min'), self.age[0]) - if err != None: + if err is not None: return err err = write_file( os.path.join(self.sysfs_dir(), 'age', 'max'), self.age[1]) - if err != None: + if err is not None: return err qgoal_metric_user_input = 'user_input' @@ -137,14 +137,14 @@ class DamosQuota: def stage(self): err = write_file(os.path.join(self.sysfs_dir(), 'bytes'), self.sz) - if err != None: + if err is not None: return err err = write_file(os.path.join(self.sysfs_dir(), 'ms'), self.ms) - if err != None: + if err is not None: return err err = write_file(os.path.join(self.sysfs_dir(), 'reset_interval_ms'), self.reset_interval_ms) - if err != None: + if err is not None: return err nr_goals_file = os.path.join(self.sysfs_dir(), 'goals', 'nr_goals') @@ -201,30 +201,30 @@ class Damos: def stage(self): err = write_file(os.path.join(self.sysfs_dir(), 'action'), self.action) - if err != None: + if err is not None: return err err = self.access_pattern.stage() - if err != None: + if err is not None: return err err = write_file(os.path.join(self.sysfs_dir(), 'apply_interval_us'), '%d' % self.apply_interval_us) - if err != None: + if err is not None: return err err = self.quota.stage() - if err != None: + if err is not None: return err # disable watermarks err = write_file( os.path.join(self.sysfs_dir(), 'watermarks', 'metric'), 'none') - if err != None: + if err is not None: return err # disable filters err = write_file( os.path.join(self.sysfs_dir(), 'filters', 'nr_filters'), '0') - if err != None: + if err is not None: return err class DamonTarget: @@ -243,7 +243,7 @@ class DamonTarget: def stage(self): err = write_file( os.path.join(self.sysfs_dir(), 'regions', 'nr_regions'), '0') - if err != None: + if err is not None: return err return write_file( os.path.join(self.sysfs_dir(), 'pid_target'), self.pid) @@ -275,27 +275,27 @@ class DamonAttrs: def stage(self): err = write_file(os.path.join(self.interval_sysfs_dir(), 'sample_us'), self.sample_us) - if err != None: + if err is not None: return err err = write_file(os.path.join(self.interval_sysfs_dir(), 'aggr_us'), self.aggr_us) - if err != None: + if err is not None: return err err = write_file(os.path.join(self.interval_sysfs_dir(), 'update_us'), self.update_us) - if err != None: + if err is not None: return err err = write_file( os.path.join(self.nr_regions_range_sysfs_dir(), 'min'), self.min_nr_regions) - if err != None: + if err is not None: return err err = write_file( os.path.join(self.nr_regions_range_sysfs_dir(), 'max'), self.max_nr_regions) - if err != None: + if err is not None: return err class DamonCtx: @@ -329,24 +329,24 @@ class DamonCtx: def stage(self): err = write_file( os.path.join(self.sysfs_dir(), 'operations'), self.ops) - if err != None: + if err is not None: return err err = self.monitoring_attrs.stage() - if err != None: + if err is not None: return err nr_targets_file = os.path.join( self.sysfs_dir(), 'targets', 'nr_targets') content, err = read_file(nr_targets_file) - if err != None: + if err is not None: return err if int(content) != len(self.targets): err = write_file(nr_targets_file, '%d' % len(self.targets)) - if err != None: + if err is not None: return err for target in self.targets: err = target.stage() - if err != None: + if err is not None: return err nr_schemes_file = os.path.join( @@ -356,11 +356,11 @@ class DamonCtx: return err if int(content) != len(self.schemes): err = write_file(nr_schemes_file, '%d' % len(self.schemes)) - if err != None: + if err is not None: return err for scheme in self.schemes: err = scheme.stage() - if err != None: + if err is not None: return err return None @@ -384,16 +384,16 @@ class Kdamond: nr_contexts_file = os.path.join(self.sysfs_dir(), 'contexts', 'nr_contexts') content, err = read_file(nr_contexts_file) - if err != None: + if err is not None: return err if int(content) != len(self.contexts): err = write_file(nr_contexts_file, '%d' % len(self.contexts)) - if err != None: + if err is not None: return err for context in self.contexts: err = context.stage() - if err != None: + if err is not None: return err err = write_file(os.path.join(self.sysfs_dir(), 'state'), 'on') return err @@ -401,20 +401,20 @@ class Kdamond: def update_schemes_tried_bytes(self): err = write_file(os.path.join(self.sysfs_dir(), 'state'), 'update_schemes_tried_bytes') - if err != None: + if err is not None: return err for context in self.contexts: for scheme in context.schemes: content, err = read_file(os.path.join(scheme.sysfs_dir(), 'tried_regions', 'total_bytes')) - if err != None: + if err is not None: return err scheme.tried_bytes = int(content) def update_schemes_stats(self): err = write_file(os.path.join(self.sysfs_dir(), 'state'), 'update_schemes_stats') - if err != None: + if err is not None: return err for context in self.contexts: for scheme in context.schemes: @@ -423,7 +423,7 @@ class Kdamond: 'sz_applied', 'qt_exceeds']: content, err = read_file( os.path.join(scheme.sysfs_dir(), 'stats', stat)) - if err != None: + if err is not None: return err stat_values.append(int(content)) scheme.stats = DamosStats(*stat_values) @@ -471,10 +471,10 @@ class Kdamonds: def start(self): err = write_file(os.path.join(self.sysfs_dir(), 'nr_kdamonds'), '%s' % len(self.kdamonds)) - if err != None: + if err is not None: return err for kdamond in self.kdamonds: err = kdamond.start() - if err != None: + if err is not None: return err return None -- 2.39.2 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 05/10] selftests/damon: classify tests for functionalities and regressions 2024-05-03 18:03 [PATCH 00/10] mm/damon: misc fixes and improvements SeongJae Park ` (2 preceding siblings ...) 2024-05-03 18:03 ` [PATCH 04/10] selftests/damon/_damon_sysfs: use 'is' instead of '==' for 'None' SeongJae Park @ 2024-05-03 18:03 ` SeongJae Park 2024-05-03 18:06 ` [PATCH 00/10] mm/damon: misc fixes and improvements SeongJae Park 4 siblings, 0 replies; 6+ messages in thread From: SeongJae Park @ 2024-05-03 18:03 UTC (permalink / raw) To: Andrew Morton Cc: SeongJae Park, Shuah Khan, damon, linux-mm, linux-kselftest, linux-kernel DAMON selftests can be classified into two categories: functionalities and regressions. Functionality tests are for checking if the function is working as specified, while the regression tests are basically reproducers of previously reported and fixed bugs. The tests of the categories are mixed in the selftests Makefile. Separate those for easier understanding of the types of tests. Signed-off-by: SeongJae Park <sj@kernel.org> --- tools/testing/selftests/damon/Makefile | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/damon/Makefile b/tools/testing/selftests/damon/Makefile index 06c248880172..29a22f50e762 100644 --- a/tools/testing/selftests/damon/Makefile +++ b/tools/testing/selftests/damon/Makefile @@ -7,16 +7,21 @@ TEST_GEN_FILES += debugfs_target_ids_pid_leak TEST_GEN_FILES += access_memory TEST_FILES = _chk_dependency.sh _debugfs_common.sh + +# functionality tests TEST_PROGS = debugfs_attrs.sh debugfs_schemes.sh debugfs_target_ids.sh +TEST_PROGS += sysfs.sh +TEST_PROGS += sysfs_update_schemes_tried_regions_wss_estimation.py +TEST_PROGS += damos_quota.py damos_quota_goal.py damos_apply_interval.py +TEST_PROGS += reclaim.sh lru_sort.sh + +# regression tests (reproducers of previously found bugs) TEST_PROGS += debugfs_empty_targets.sh debugfs_huge_count_read_write.sh TEST_PROGS += debugfs_duplicate_context_creation.sh TEST_PROGS += debugfs_rm_non_contexts.sh TEST_PROGS += debugfs_target_ids_read_before_terminate_race.sh TEST_PROGS += debugfs_target_ids_pid_leak.sh -TEST_PROGS += sysfs.sh sysfs_update_removed_scheme_dir.sh +TEST_PROGS += sysfs_update_removed_scheme_dir.sh TEST_PROGS += sysfs_update_schemes_tried_regions_hang.py -TEST_PROGS += sysfs_update_schemes_tried_regions_wss_estimation.py -TEST_PROGS += damos_quota.py damos_quota_goal.py damos_apply_interval.py -TEST_PROGS += reclaim.sh lru_sort.sh include ../lib.mk -- 2.39.2 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 00/10] mm/damon: misc fixes and improvements 2024-05-03 18:03 [PATCH 00/10] mm/damon: misc fixes and improvements SeongJae Park ` (3 preceding siblings ...) 2024-05-03 18:03 ` [PATCH 05/10] selftests/damon: classify tests for functionalities and regressions SeongJae Park @ 2024-05-03 18:06 ` SeongJae Park 4 siblings, 0 replies; 6+ messages in thread From: SeongJae Park @ 2024-05-03 18:06 UTC (permalink / raw) To: Andrew Morton Cc: SeongJae Park, Jonathan Corbet, Shuah Khan, damon, linux-mm, linux-doc, linux-kselftest, linux-kernel Andrew, please add DAMON selftests patchset[1] that I posted yesterday before this patchset. Otherwise, patches would get conflicts. [1] https://lore.kernel.org/20240502172718.74166-1-sj@kernel.org Thanks, SJ On Fri, 3 May 2024 11:03:08 -0700 SeongJae Park <sj@kernel.org> wrote: > Add miscelleneous and non-urgent fixes and improvements for DAMON code, > selftests, and documents. > > SeongJae Park (10): > mm/damon/core: initialize ->esz_bp from damos_quota_init_priv() > selftests/damon/_damon_sysfs: check errors from nr_schemes file reads > selftests/damon/_damon_sysfs: find sysfs mount point from /proc/mounts > selftests/damon/_damon_sysfs: use 'is' instead of '==' for 'None' > selftests/damon: classify tests for functionalities and regressions > Docs/admin-guide/mm/damon/usage: fix wrong example of DAMOS filter > matching sysfs file > Docs/admin-guide/mm/damon/usage: fix wrong schemes effective quota > update command > Docs/mm/damon/design: use a list for supported filters > Docs/mm/damon/maintainer-profile: change the maintainer's timezone > from PST to PT > Docs/mm/damon/maintainer-profile: allow posting patches based on > damon/next tree > > Documentation/admin-guide/mm/damon/usage.rst | 6 +- > Documentation/mm/damon/design.rst | 46 +++++---- > Documentation/mm/damon/maintainer-profile.rst | 13 +-- > mm/damon/core.c | 1 + > tools/testing/selftests/damon/Makefile | 13 ++- > tools/testing/selftests/damon/_damon_sysfs.py | 95 +++++++++++-------- > 6 files changed, 100 insertions(+), 74 deletions(-) > > > base-commit: fc7314cb6b750187a1366e0bf9da4c3ca8cfd064 > -- > 2.39.2 ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-05-03 18:06 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-05-03 18:03 [PATCH 00/10] mm/damon: misc fixes and improvements SeongJae Park 2024-05-03 18:03 ` [PATCH 02/10] selftests/damon/_damon_sysfs: check errors from nr_schemes file reads SeongJae Park 2024-05-03 18:03 ` [PATCH 03/10] selftests/damon/_damon_sysfs: find sysfs mount point from /proc/mounts SeongJae Park 2024-05-03 18:03 ` [PATCH 04/10] selftests/damon/_damon_sysfs: use 'is' instead of '==' for 'None' SeongJae Park 2024-05-03 18:03 ` [PATCH 05/10] selftests/damon: classify tests for functionalities and regressions SeongJae Park 2024-05-03 18:06 ` [PATCH 00/10] mm/damon: misc fixes and improvements SeongJae Park
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox