DAMON provides almost all control to the user via its sysfs interface. For that, the interface provides plenty of files and hierarchies. The interface is simple enough to be controlled by shell commands including 'cat', 'echo', and redirection. However, due to the number of files and the hierarchies, doing that repeatedly is quite tedious. As a result, DAMON selftests are containing only simple test cases rather than real functionality tests. Having a wrapper script that can be reused to implement more functionality tests could be helpful. Writing such wrapper with shell script might be challenging and not easy to further maintain and extend for future DAMON interface extensions, though.
To this end, implement a Python-written DAMON sysfs interface wrapper that could be easily managed and extended for future DAMON interface extensions. Further implement one simple functionality test and a corner case regression test for a previously found bug, using the wrapper module. In fact, the bug was found by the test this patchset is introducing.
Note that the Python wrapper is not supporting full features of DAMON interface, but only some of those that essential for the tests that this patchset is introducing. The wrapper would extended to support more features, but only with essential ones for such future tests. The wrapper will hence keep being simple, small, and constrained. For convenient and general use cases of DAMON, users should use DAMON user-space tools for such purpose, like damo[1].
[1] https://github.com/damonitor/damo
Patches Sequence ----------------
This patchset is constructed with five patches. The first three patches implement the Python-written DAMON sysfs interface wrapper in small steps. The basic data structure (first patch), kdamond startup command (second patch), and finally DAMOS tried bytes command (third patch).
Then two patches for adding selftests using the wrapper follows. The fourth patch implements a basic functionality test of DAMON for working set estimation accuracy. Finally, the fifth patch implements a corner case test for a previously found bug.
SeongJae Park (5): selftests/damon: add a DAMON interface wrapper python module selftests/damon/_damon: implement sysfs-based kdamonds start function selftests/damon/_damon: implement sysfs updat_schemes_tried_bytes command selftests/damon: add a test for update_schemes_tried_regions sysfs command selftests/damon: add a test for update_schemes_tried_regions hang bug
tools/testing/selftests/damon/Makefile | 3 + tools/testing/selftests/damon/_damon.py | 322 ++++++++++++++++++ tools/testing/selftests/damon/access_memory.c | 41 +++ ...sysfs_update_schemes_tried_regions_hang.py | 33 ++ ...te_schemes_tried_regions_wss_estimation.py | 48 +++ 5 files changed, 447 insertions(+) create mode 100644 tools/testing/selftests/damon/_damon.py create mode 100644 tools/testing/selftests/damon/access_memory.c create mode 100755 tools/testing/selftests/damon/sysfs_update_schemes_tried_regions_hang.py create mode 100755 tools/testing/selftests/damon/sysfs_update_schemes_tried_regions_wss_estimation.py
base-commit: 1be383c41197b82cfd51b2edc7ee515c0b786496