Currently kdamond uses only one context per kthread and most of its time it sleeps, so utilizing several contexts can scale kdamond and allow it to use another set of operations. This patch-set implements support for multiple contexts per kdamond. In pseudo code previous versions worked like the following: while (!kdamond_should_stop()) { /* prepare accesses for only 1 context */ prepare_accesses(damon_context); sleep(sample_interval); /* check accesses for only 1 context */ check_accesses(damon_context); ... } With this patch kdamond workflow will look like the following: while (!kdamond_shoule_stop()) { /* prepare accesses for all contexts in kdamond */ damon_for_each_context(ctx, kdamond) prepare_accesses(ctx); sleep(sample_interval); /* check_accesses for all contexts in kdamond */ damon_for_each_context(ctx, kdamond) check_accesses(ctx); ... } To try this you can use modified kernel[1] and damo[2]. I also have written few simple shell scripts[3] to collect data for damo. [1] https://github.com/onlyoneofme/damon-multi-contexts.git [2] https://github.com/onlyoneofme/damo/tree/multi-contexts [3] https://github.com/onlyoneofme/damon-multi-contexts-tests.git --- Changes from v1 (https://lore.kernel.org/damon/20240515152457.603724-1-yorha.op@xxxxxxxxx/) - Compatibility for DebugFS interface is kept - Kunit tests build/execution issues are fixed - Patches from v1 are sqaushed, so that consistency between patches is kept - Added/Fixed comments about data structures/functions Alex Rusuf (2): mm/damon/core: add 'struct kdamond' abstraction layer mm/damon/core: implement multi-context support include/linux/damon.h | 80 ++++-- include/trace/events/damon.h | 14 +- mm/damon/core-test.h | 2 +- mm/damon/core.c | 509 ++++++++++++++++++++++------------- mm/damon/dbgfs-test.h | 4 +- mm/damon/dbgfs.c | 342 ++++++++++++++--------- mm/damon/lru_sort.c | 31 ++- mm/damon/modules-common.c | 35 ++- mm/damon/modules-common.h | 3 +- mm/damon/reclaim.c | 30 ++- mm/damon/sysfs.c | 303 +++++++++++++-------- 11 files changed, 872 insertions(+), 481 deletions(-) -- 2.42.0