| From: SeongJae Park <sj@kernel.org> |
| Subject: samples/damon/wsse: start and stop DAMON as the user requests |
| Date: Tue, 10 Dec 2024 13:50:27 -0800 |
| |
| Start running DAMON to monitor accesses of a process that the user |
| specified via 'target_pid' parameter, when 'y' is passed to 'enable' |
| parameter. Stop running DAMON when 'n' is passed to 'enable' parameter. |
| Estimating the working set size from DAMON's monitoring results and |
| reporting it to the user will be implemented by the following commit. |
| |
| Link: https://lkml.kernel.org/r/20241210215030.85675-3-sj@kernel.org |
| Signed-off-by: SeongJae Park <sj@kernel.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| samples/damon/wsse.c | 35 ++++++++++++++++++++++++++++++++++- |
| 1 file changed, 34 insertions(+), 1 deletion(-) |
| |
| --- a/samples/damon/wsse.c~samples-damon-wsse-start-and-stop-damon-as-the-user-requests |
| +++ a/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( |
| _ |