linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [RFC PATCH 0/5] mm/damon: add sample modules under samples/damon/
@ 2024-11-13 16:26 SeongJae Park
  2024-11-13 16:26 ` [RFC PATCH 1/5] samples: introduce a skeleton of a sample DAMON module for working set size estimation SeongJae Park
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: SeongJae Park @ 2024-11-13 16:26 UTC (permalink / raw)
  Cc: SeongJae Park, damon, linux-mm, linux-kernel, kernel-team

DAMON is a kernel framework that provides API for other subsystems or
modules in the kernel space.  The API functions have their own
kernel-doc comments, and DAMON modules including DAMON_SYSFS,
DAMON_RECLAIM, and DAMON_LRU_SORT can be used as a refernce usages.
However, kernel-doc is not very easy for beginner, and the existing
DAMON modules for real usage are bit complicated.  Add sample DAMON
modules showing basic usage of DAMON kernel API.

Note that some of the code for similar purpose that I used at kernel
summit 2021 DAMON live coding session[1] is reused here.

[1] https://linuxplumbersconf.org/event/11/contributions/984/

SeongJae Park (5):
  samples: introduce a skeleton of a sample DAMON module for working set
    size estimation
  samples/damon/wsse: implement DAMON starting and stopping
  samples/damon/wsse: implement working set size estimation and logging
  samples/damon: introduce a skeleton of a smaple DAMON module for
    proactive reclamation
  samples/damon/prcl: implement schemes setup

 MAINTAINERS            |   1 +
 samples/Kconfig        |   2 +
 samples/Makefile       |   2 +
 samples/damon/Kconfig  |  30 +++++++++
 samples/damon/Makefile |   4 ++
 samples/damon/prcl.c   | 138 +++++++++++++++++++++++++++++++++++++++++
 samples/damon/wsse.c   | 120 +++++++++++++++++++++++++++++++++++
 7 files changed, 297 insertions(+)
 create mode 100644 samples/damon/Kconfig
 create mode 100644 samples/damon/Makefile
 create mode 100644 samples/damon/prcl.c
 create mode 100644 samples/damon/wsse.c


base-commit: 981cf179b2760af4215419c67a801ec5d028a546
-- 
2.39.5



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [RFC PATCH 1/5] samples: introduce a skeleton of a sample DAMON module for working set size estimation
  2024-11-13 16:26 [RFC PATCH 0/5] mm/damon: add sample modules under samples/damon/ SeongJae Park
@ 2024-11-13 16:26 ` SeongJae Park
  2024-11-13 16:26 ` [RFC PATCH 2/5] samples/damon/wsse: implement DAMON starting and stopping SeongJae Park
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: SeongJae Park @ 2024-11-13 16:26 UTC (permalink / raw)
  Cc: SeongJae Park, damon, linux-mm, linux-kernel, kernel-team

Add a skeleton for a sample DAMON module that can be used for estimating
working set size of a given process.  It exposes two module parameters,
namely 'pid' and 'enable', which receives what process the module should
estimate the working set size of, and whether to start the work or not.
Nonetheless, because this is just a skeleton, no real work is
implemented.  The functionality will be implemented by following
commits.

Signed-off-by: SeongJae Park <sj@kernel.org>
---
 MAINTAINERS            |  1 +
 samples/Kconfig        |  2 ++
 samples/Makefile       |  1 +
 samples/damon/Kconfig  | 17 +++++++++++
 samples/damon/Makefile |  3 ++
 samples/damon/wsse.c   | 69 ++++++++++++++++++++++++++++++++++++++++++
 6 files changed, 93 insertions(+)
 create mode 100644 samples/damon/Kconfig
 create mode 100644 samples/damon/Makefile
 create mode 100644 samples/damon/wsse.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 0383fd7e0a40..d61f4f76c3d5 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -6256,6 +6256,7 @@ F:	Documentation/mm/damon/
 F:	include/linux/damon.h
 F:	include/trace/events/damon.h
 F:	mm/damon/
+F:	samples/damon/
 F:	tools/testing/selftests/damon/
 
 DAVICOM FAST ETHERNET (DMFE) NETWORK DRIVER
diff --git a/samples/Kconfig b/samples/Kconfig
index b288d9991d27..8d5a36f0e5d6 100644
--- a/samples/Kconfig
+++ b/samples/Kconfig
@@ -293,6 +293,8 @@ config SAMPLE_CGROUP
 
 source "samples/rust/Kconfig"
 
+source "samples/damon/Kconfig"
+
 endif # SAMPLES
 
 config HAVE_SAMPLE_FTRACE_DIRECT
diff --git a/samples/Makefile b/samples/Makefile
index b85fa64390c5..726bb5293486 100644
--- a/samples/Makefile
+++ b/samples/Makefile
@@ -39,3 +39,4 @@ obj-$(CONFIG_SAMPLE_KMEMLEAK)		+= kmemleak/
 obj-$(CONFIG_SAMPLE_CORESIGHT_SYSCFG)	+= coresight/
 obj-$(CONFIG_SAMPLE_FPROBE)		+= fprobe/
 obj-$(CONFIG_SAMPLES_RUST)		+= rust/
+obj-$(CONFIG_SAMPLE_DAMON_WSSE)		+= damon/
diff --git a/samples/damon/Kconfig b/samples/damon/Kconfig
new file mode 100644
index 000000000000..b799e01345c8
--- /dev/null
+++ b/samples/damon/Kconfig
@@ -0,0 +1,17 @@
+# SPDX-License-Identifier: GPL-2.0
+
+menu "DAMON Samples"
+
+config SAMPLE_DAMON_WSSE
+	bool "DAMON sameple module for working set size estimation"
+	depends on DAMON && DAMON_VADDR
+	help
+	  This builds DAMON sample module for working set size estimation.
+
+	  The module receives a pid, monitor access to the virtual address
+	  space of the process, estimate working set size of the process, and
+	  repeatedly prints the size on the kernel log.
+
+	  If unsure, say N.
+
+endmenu
diff --git a/samples/damon/Makefile b/samples/damon/Makefile
new file mode 100644
index 000000000000..ccbe93d40130
--- /dev/null
+++ b/samples/damon/Makefile
@@ -0,0 +1,3 @@
+# SPDX-License-Identifier: GPL-2.0
+
+obj-$(CONFIG_SAMPLE_DAMON_WSSE) += wsse.o
diff --git a/samples/damon/wsse.c b/samples/damon/wsse.c
new file mode 100644
index 000000000000..5912f15181c8
--- /dev/null
+++ b/samples/damon/wsse.c
@@ -0,0 +1,69 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * working set size estimation: monitor access pattern of given process and
+ * print estimated working set size (total size of regions that showing some
+ * access).
+ */
+
+#define pr_fmt(fmt) "damon_sample_wsse: " fmt
+
+#include <linux/damon.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+
+static int target_pid __read_mostly;
+module_param(target_pid, int, 0600);
+
+static int damon_sample_wsse_enable_store(
+		const char *val, const struct kernel_param *kp);
+
+static const struct kernel_param_ops enable_param_ops = {
+	.set = damon_sample_wsse_enable_store,
+	.get = param_get_bool,
+};
+
+static bool enable __read_mostly;
+module_param_cb(enable, &enable_param_ops, &enable, 0600);
+MODULE_PARM_DESC(enable, "Enable or disable DAMON_SAMPLE_WSSE");
+
+static int damon_sample_wsse_start(void)
+{
+	pr_info("start\n");
+	return 0;
+}
+
+static void damon_sample_wsse_stop(void)
+{
+	pr_info("stop\n");
+}
+
+static int damon_sample_wsse_enable_store(
+		const char *val, const struct kernel_param *kp)
+{
+	bool enabled = enable;
+	int err;
+
+	err = kstrtobool(val, &enable);
+	if (err)
+		return err;
+
+	if (enable == enabled)
+		return 0;
+
+	if (enable)
+		return damon_sample_wsse_start();
+	damon_sample_wsse_stop();
+	return 0;
+}
+
+static int __init damon_sample_wsse_init(void)
+{
+	return 0;
+}
+
+module_init(damon_sample_wsse_init);
+
+MODULE_LICENSE("GPL v2");
+MODULE_AUTHOR("SeongJae Park");
+MODULE_DESCRIPTION("DAMON sample module for working set size estimation");
-- 
2.39.5



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [RFC PATCH 2/5] samples/damon/wsse: implement DAMON starting and stopping
  2024-11-13 16:26 [RFC PATCH 0/5] mm/damon: add sample modules under samples/damon/ SeongJae Park
  2024-11-13 16:26 ` [RFC PATCH 1/5] samples: introduce a skeleton of a sample DAMON module for working set size estimation SeongJae Park
@ 2024-11-13 16:26 ` SeongJae Park
  2024-11-13 16:26 ` [RFC PATCH 3/5] samples/damon/wsse: implement working set size estimation and logging SeongJae Park
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: SeongJae Park @ 2024-11-13 16:26 UTC (permalink / raw)
  Cc: SeongJae Park, damon, linux-mm, linux-kernel, kernel-team

Start running DAMON for the process that user requested to estimate the
process via 'pid' parameter, when 'y' is passed to 'enable' parameter.
If 'n' is passed, stop running DAMON.  Iterating the DAMON monitoring
results and estimating the working set side is not yet implemented.  It
will be implemented by the following commit.

Signed-off-by: SeongJae Park <sj@kernel.org>
---
 samples/damon/wsse.c | 35 ++++++++++++++++++++++++++++++++++-
 1 file changed, 34 insertions(+), 1 deletion(-)

diff --git a/samples/damon/wsse.c b/samples/damon/wsse.c
index 5912f15181c8..119ac8a2c901 100644
--- a/samples/damon/wsse.c
+++ b/samples/damon/wsse.c
@@ -27,15 +27,48 @@ static bool enable __read_mostly;
 module_param_cb(enable, &enable_param_ops, &enable, 0600);
 MODULE_PARM_DESC(enable, "Enable or disable DAMON_SAMPLE_WSSE");
 
+static struct damon_ctx *ctx;
+static struct pid *target_pidp;
+
 static int damon_sample_wsse_start(void)
 {
+	struct damon_target *target;
+
 	pr_info("start\n");
-	return 0;
+
+	ctx = damon_new_ctx();
+	if (!ctx)
+		return -ENOMEM;
+	if (damon_select_ops(ctx, DAMON_OPS_VADDR)) {
+		damon_destroy_ctx(ctx);
+		return -EINVAL;
+	}
+
+	target = damon_new_target();
+	if (!target) {
+		damon_destroy_ctx(ctx);
+		return -ENOMEM;
+	}
+	damon_add_target(ctx, target);
+	target_pidp = find_get_pid(target_pid);
+	if (!target_pidp) {
+		damon_destroy_ctx(ctx);
+		return -EINVAL;
+	}
+	target->pid = target_pidp;
+
+	return damon_start(&ctx, 1, true);
 }
 
 static void damon_sample_wsse_stop(void)
 {
 	pr_info("stop\n");
+	if (ctx) {
+		damon_stop(&ctx, 1);
+		damon_destroy_ctx(ctx);
+	}
+	if (target_pidp)
+		put_pid(target_pidp);
 }
 
 static int damon_sample_wsse_enable_store(
-- 
2.39.5



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [RFC PATCH 3/5] samples/damon/wsse: implement working set size estimation and logging
  2024-11-13 16:26 [RFC PATCH 0/5] mm/damon: add sample modules under samples/damon/ SeongJae Park
  2024-11-13 16:26 ` [RFC PATCH 1/5] samples: introduce a skeleton of a sample DAMON module for working set size estimation SeongJae Park
  2024-11-13 16:26 ` [RFC PATCH 2/5] samples/damon/wsse: implement DAMON starting and stopping SeongJae Park
@ 2024-11-13 16:26 ` SeongJae Park
  2024-11-13 16:26 ` [RFC PATCH 4/5] samples/damon: introduce a skeleton of a smaple DAMON module for proactive reclamation SeongJae Park
  2024-11-13 16:26 ` [RFC PATCH 5/5] samples/damon/prcl: implement schemes setup SeongJae Park
  4 siblings, 0 replies; 6+ messages in thread
From: SeongJae Park @ 2024-11-13 16:26 UTC (permalink / raw)
  Cc: SeongJae Park, damon, linux-mm, linux-kernel, kernel-team

Implement the DAMON-based working set size estimation logic.  The logic
simply iterates memory regions in DAMON-generated access pattern
snapshot for every aggregation, and get the total sum of the size of any
region having one or higher 'nr_accesses' count.  That is, it assumes
any region having one or higher 'nr_accesses' to be a part of the
working set.  The estimated value is printed to the kernel log.

Signed-off-by: SeongJae Park <sj@kernel.org>
---
 samples/damon/wsse.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/samples/damon/wsse.c b/samples/damon/wsse.c
index 119ac8a2c901..a2a94c505938 100644
--- a/samples/damon/wsse.c
+++ b/samples/damon/wsse.c
@@ -30,6 +30,23 @@ MODULE_PARM_DESC(enable, "Enable or disable DAMON_SAMPLE_WSSE");
 static struct damon_ctx *ctx;
 static struct pid *target_pidp;
 
+static int damon_sample_wsse_after_aggregate(struct damon_ctx *c)
+{
+	struct damon_target *t;
+
+	damon_for_each_target(t, c) {
+		struct damon_region *r;
+		unsigned long wss = 0;
+
+		damon_for_each_region(r, t) {
+			if (r->nr_accesses > 0)
+				wss += r->ar.end - r->ar.start;
+		}
+		pr_info("wss: %lu\n", wss);
+	}
+	return 0;
+}
+
 static int damon_sample_wsse_start(void)
 {
 	struct damon_target *target;
@@ -57,6 +74,7 @@ static int damon_sample_wsse_start(void)
 	}
 	target->pid = target_pidp;
 
+	ctx->callback.after_aggregation = damon_sample_wsse_after_aggregate;
 	return damon_start(&ctx, 1, true);
 }
 
-- 
2.39.5



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [RFC PATCH 4/5] samples/damon: introduce a skeleton of a smaple DAMON module for proactive reclamation
  2024-11-13 16:26 [RFC PATCH 0/5] mm/damon: add sample modules under samples/damon/ SeongJae Park
                   ` (2 preceding siblings ...)
  2024-11-13 16:26 ` [RFC PATCH 3/5] samples/damon/wsse: implement working set size estimation and logging SeongJae Park
@ 2024-11-13 16:26 ` SeongJae Park
  2024-11-13 16:26 ` [RFC PATCH 5/5] samples/damon/prcl: implement schemes setup SeongJae Park
  4 siblings, 0 replies; 6+ messages in thread
From: SeongJae Park @ 2024-11-13 16:26 UTC (permalink / raw)
  Cc: SeongJae Park, damon, linux-mm, linux-kernel, kernel-team

Add a skeleton for a sample DAMON module that can be used for
proactively reclaiming cold memory regions of a given process.  The
skeleton is actually same to working set size estimation sample module,
but only the names of the file and symbols are changed.

Signed-off-by: SeongJae Park <sj@kernel.org>
---
 samples/Makefile       |   1 +
 samples/damon/Kconfig  |  13 +++++
 samples/damon/Makefile |   1 +
 samples/damon/prcl.c   | 120 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 135 insertions(+)
 create mode 100644 samples/damon/prcl.c

diff --git a/samples/Makefile b/samples/Makefile
index 726bb5293486..5af6bb8afb07 100644
--- a/samples/Makefile
+++ b/samples/Makefile
@@ -40,3 +40,4 @@ obj-$(CONFIG_SAMPLE_CORESIGHT_SYSCFG)	+= coresight/
 obj-$(CONFIG_SAMPLE_FPROBE)		+= fprobe/
 obj-$(CONFIG_SAMPLES_RUST)		+= rust/
 obj-$(CONFIG_SAMPLE_DAMON_WSSE)		+= damon/
+obj-$(CONFIG_SAMPLE_DAMON_PRCL)		+= damon/
diff --git a/samples/damon/Kconfig b/samples/damon/Kconfig
index b799e01345c8..63f6dcd71daa 100644
--- a/samples/damon/Kconfig
+++ b/samples/damon/Kconfig
@@ -14,4 +14,17 @@ config SAMPLE_DAMON_WSSE
 
 	  If unsure, say N.
 
+config SAMPLE_DAMON_PRCL
+	bool "DAMON sameple module for access-aware proactive reclamation"
+	depends on DAMON && DAMON_VADDR
+	help
+	  This builds DAMON sample module for access-aware proactive
+	  reclamation.
+
+	  The module receives a pid, monitor access to the virtual address
+	  space of the process, find memory regions that not accessed, and
+	  proactively reclaim the regions.
+
+	  If unsure, say N.
+
 endmenu
diff --git a/samples/damon/Makefile b/samples/damon/Makefile
index ccbe93d40130..7f155143f237 100644
--- a/samples/damon/Makefile
+++ b/samples/damon/Makefile
@@ -1,3 +1,4 @@
 # SPDX-License-Identifier: GPL-2.0
 
 obj-$(CONFIG_SAMPLE_DAMON_WSSE) += wsse.o
+obj-$(CONFIG_SAMPLE_DAMON_PRCL) += prcl.o
diff --git a/samples/damon/prcl.c b/samples/damon/prcl.c
new file mode 100644
index 000000000000..32ccdd91cf55
--- /dev/null
+++ b/samples/damon/prcl.c
@@ -0,0 +1,120 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * proactive reclamation: monitor access pattern of a given process, find
+ * regiosn that seems not accessed, and proactively page out the regions.
+ */
+
+#define pr_fmt(fmt) "damon_sample_prcl: " fmt
+
+#include <linux/damon.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+
+static int target_pid __read_mostly;
+module_param(target_pid, int, 0600);
+
+static int damon_sample_prcl_enable_store(
+		const char *val, const struct kernel_param *kp);
+
+static const struct kernel_param_ops enable_param_ops = {
+	.set = damon_sample_prcl_enable_store,
+	.get = param_get_bool,
+};
+
+static bool enable __read_mostly;
+module_param_cb(enable, &enable_param_ops, &enable, 0600);
+MODULE_PARM_DESC(enable, "Enable of disable DAMON_SAMPLE_WSSE");
+
+static struct damon_ctx *ctx;
+static struct pid *target_pidp;
+
+static int damon_sample_prcl_after_aggregate(struct damon_ctx *c)
+{
+	struct damon_target *t;
+
+	damon_for_each_target(t, c) {
+		struct damon_region *r;
+		unsigned long wss = 0;
+
+		damon_for_each_region(r, t) {
+			if (r->nr_accesses > 0)
+				wss += r->ar.end - r->ar.start;
+		}
+		pr_info("wss: %lu\n", wss);
+	}
+	return 0;
+}
+
+static int damon_sample_prcl_start(void)
+{
+	struct damon_target *target;
+
+	pr_info("start\n");
+
+	ctx = damon_new_ctx();
+	if (!ctx)
+		return -ENOMEM;
+	if (damon_select_ops(ctx, DAMON_OPS_VADDR)) {
+		damon_destroy_ctx(ctx);
+		return -EINVAL;
+	}
+
+	target = damon_new_target();
+	if (!target) {
+		damon_destroy_ctx(ctx);
+		return -ENOMEM;
+	}
+	damon_add_target(ctx, target);
+	target_pidp = find_get_pid(target_pid);
+	if (!target_pidp) {
+		damon_destroy_ctx(ctx);
+		return -EINVAL;
+	}
+	target->pid = target_pidp;
+
+	ctx->callback.after_aggregation = damon_sample_prcl_after_aggregate;
+
+	return damon_start(&ctx, 1, true);
+}
+
+static void damon_sample_prcl_stop(void)
+{
+	pr_info("stop\n");
+	if (ctx) {
+		damon_stop(&ctx, 1);
+		damon_destroy_ctx(ctx);
+	}
+	if (target_pidp)
+		put_pid(target_pidp);
+}
+
+static int damon_sample_prcl_enable_store(
+		const char *val, const struct kernel_param *kp)
+{
+	bool enabled = enable;
+	int err;
+
+	err = kstrtobool(val, &enable);
+	if (err)
+		return err;
+
+	if (enable == enabled)
+		return 0;
+
+	if (enable)
+		return damon_sample_prcl_start();
+	damon_sample_prcl_stop();
+	return 0;
+}
+
+static int __init damon_sample_prcl_init(void)
+{
+	return 0;
+}
+
+module_init(damon_sample_prcl_init);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("SeongJae Park");
+MODULE_DESCRIPTION("DAMON sample module for proactive reclamation");
-- 
2.39.5



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [RFC PATCH 5/5] samples/damon/prcl: implement schemes setup
  2024-11-13 16:26 [RFC PATCH 0/5] mm/damon: add sample modules under samples/damon/ SeongJae Park
                   ` (3 preceding siblings ...)
  2024-11-13 16:26 ` [RFC PATCH 4/5] samples/damon: introduce a skeleton of a smaple DAMON module for proactive reclamation SeongJae Park
@ 2024-11-13 16:26 ` SeongJae Park
  4 siblings, 0 replies; 6+ messages in thread
From: SeongJae Park @ 2024-11-13 16:26 UTC (permalink / raw)
  Cc: SeongJae Park, damon, linux-mm, linux-kernel, kernel-team

Implement the DAMOS-based cold memory regions proactive reclamation
logic.  The logic treats memory regions that assumed to not be accessed
at all for five or more seconds as cold, and reclaim as soon as found.

Signed-off-by: SeongJae Park <sj@kernel.org>
---
 samples/damon/prcl.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/samples/damon/prcl.c b/samples/damon/prcl.c
index 32ccdd91cf55..cf8c6f29d8a3 100644
--- a/samples/damon/prcl.c
+++ b/samples/damon/prcl.c
@@ -49,6 +49,7 @@ static int damon_sample_prcl_after_aggregate(struct damon_ctx *c)
 static int damon_sample_prcl_start(void)
 {
 	struct damon_target *target;
+	struct damos *scheme;
 
 	pr_info("start\n");
 
@@ -75,6 +76,23 @@ static int damon_sample_prcl_start(void)
 
 	ctx->callback.after_aggregation = damon_sample_prcl_after_aggregate;
 
+	scheme = damon_new_scheme(
+			&(struct damos_access_pattern) {
+			.min_sz_region = PAGE_SIZE,
+			.max_sz_region = ULONG_MAX,
+			.min_nr_accesses = 0,
+			.max_nr_accesses = 0},
+			DAMOS_PAGEOUT,
+			0,
+			&(struct damos_quota){},
+			&(struct damos_watermarks){},
+			NUMA_NO_NODE);
+	if (!scheme) {
+		damon_destroy_ctx(ctx);
+		return -ENOMEM;
+	}
+	damon_set_schemes(ctx, &scheme, 1);
+
 	return damon_start(&ctx, 1, true);
 }
 
-- 
2.39.5



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-11-13 16:26 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-11-13 16:26 [RFC PATCH 0/5] mm/damon: add sample modules under samples/damon/ SeongJae Park
2024-11-13 16:26 ` [RFC PATCH 1/5] samples: introduce a skeleton of a sample DAMON module for working set size estimation SeongJae Park
2024-11-13 16:26 ` [RFC PATCH 2/5] samples/damon/wsse: implement DAMON starting and stopping SeongJae Park
2024-11-13 16:26 ` [RFC PATCH 3/5] samples/damon/wsse: implement working set size estimation and logging SeongJae Park
2024-11-13 16:26 ` [RFC PATCH 4/5] samples/damon: introduce a skeleton of a smaple DAMON module for proactive reclamation SeongJae Park
2024-11-13 16:26 ` [RFC PATCH 5/5] samples/damon/prcl: implement schemes setup SeongJae Park

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox