2023-01-16 06:43:30

by Huaisheng Ye

[permalink] [raw]
Subject: [PATCH] mm/damon/core: skip apply schemes if empty

Sometimes there is no scheme in damon's context, for example
just use damo record to monitor workload's data access pattern.

If current damon context doesn't have any scheme in the list,
kdamond has no need to iterate over list of all targets and regions
but do nothing.

So, skip apply schemes when ctx->schemes is empty.

Signed-off-by: Huaisheng Ye <[email protected]>
---
mm/damon/core.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/mm/damon/core.c b/mm/damon/core.c
index ceec75b88ef9..f338691e4591 100644
--- a/mm/damon/core.c
+++ b/mm/damon/core.c
@@ -1230,7 +1230,8 @@ static int kdamond_fn(void *data)
if (ctx->callback.after_aggregation &&
ctx->callback.after_aggregation(ctx))
break;
- kdamond_apply_schemes(ctx);
+ if (!list_empty(&ctx->schemes))
+ kdamond_apply_schemes(ctx);
kdamond_reset_aggregated(ctx);
kdamond_split_regions(ctx);
if (ctx->ops.reset_aggregated)
--
2.31.1


2023-01-16 17:57:08

by SeongJae Park

[permalink] [raw]
Subject: Re: [PATCH] mm/damon/core: skip apply schemes if empty

Hi Huaisheng,

On Mon, 16 Jan 2023 14:23:47 +0800 Huaisheng Ye <[email protected]> wrote:

> Sometimes there is no scheme in damon's context, for example
> just use damo record to monitor workload's data access pattern.
>
> If current damon context doesn't have any scheme in the list,
> kdamond has no need to iterate over list of all targets and regions
> but do nothing.
>
> So, skip apply schemes when ctx->schemes is empty.

Good finding, thanks!

>
> Signed-off-by: Huaisheng Ye <[email protected]>

Reviewed-by: SeongJae Park <[email protected]>


Thanks,
SJ

> ---
> mm/damon/core.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/mm/damon/core.c b/mm/damon/core.c
> index ceec75b88ef9..f338691e4591 100644
> --- a/mm/damon/core.c
> +++ b/mm/damon/core.c
> @@ -1230,7 +1230,8 @@ static int kdamond_fn(void *data)
> if (ctx->callback.after_aggregation &&
> ctx->callback.after_aggregation(ctx))
> break;
> - kdamond_apply_schemes(ctx);
> + if (!list_empty(&ctx->schemes))
> + kdamond_apply_schemes(ctx);
> kdamond_reset_aggregated(ctx);
> kdamond_split_regions(ctx);
> if (ctx->ops.reset_aggregated)
> --
> 2.31.1
>
>