On Mon, 24 Feb 2020 13:30:38 +0100 SeongJae Park <sjpark@xxxxxxxxxx> wrote: > From: SeongJae Park <sjpark@xxxxxxxxx> > > This commit implements callbacks for DAMON. Using this, DAMON users can > install their callbacks for each step of the access monitoring so that > they can do something interesting with the monitored access pattrns patterns > online. For example, callbacks can report the monitored patterns to > users or do some access pattern based memory management such as > proactive reclamations or access pattern based THP promotions/demotions > decision makings. > > Signed-off-by: SeongJae Park <sjpark@xxxxxxxxx> > --- > mm/damon.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/mm/damon.c b/mm/damon.c > index 6a17408e83c2..554720778e8a 100644 > --- a/mm/damon.c > +++ b/mm/damon.c > @@ -83,6 +83,10 @@ struct damon_ctx { > struct rnd_state rndseed; > > struct list_head tasks_list; /* 'damon_task' objects */ > + > + /* callbacks */ > + void (*sample_cb)(struct damon_ctx *context); > + void (*aggregate_cb)(struct damon_ctx *context); > }; > > /* Get a random number in [l, r) */ > @@ -814,9 +818,13 @@ static int kdamond_fn(void *data) > } > mmput(mm); > } > + if (ctx->sample_cb) > + ctx->sample_cb(ctx); > > if (kdamond_aggregate_interval_passed(ctx)) { > kdamond_merge_regions(ctx, max_nr_accesses / 10); > + if (ctx->aggregate_cb) > + ctx->aggregate_cb(ctx); > kdamond_flush_aggregated(ctx); > kdamond_split_regions(ctx); > }