mirror of
https://github.com/torvalds/linux.git
synced 2026-05-29 17:43:52 +02:00
mm/damon/core: skip needless update of damon_attrs in damon_commit_ctx()
Currently, damon_commit_ctx() always calls damon_set_attrs() even if the
attributes have not been changed. This can be problematic when the DAMON
state is committed relatively frequently because damon_set_attrs() resets
ctx->next_{aggregation,ops_update}_sis, causing aggregation and ops update
operations to be needlessly delayed.
This patch avoids this by only calling damon_set_attrs() in
damon_commit_ctx when the attributes have been changed.
[akpm@linux-foundation.org:
Link: https://lkml.kernel.org/r/20250807001924.76275-1-sj@kernel.org
Link: https://lkml.kernel.org/r/20250806234254.10572-1-bijan311@gmail.com
Signed-off-by: Bijan Tabatabai <bijantabatab@micron.com>
Reviewed-by: SeongJae Park <sj@kernel.org>
Cc: Bijan Tabatabai <bijan311@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
878d9e8ceb
commit
dc32c8d487
|
|
@ -570,6 +570,23 @@ void damon_destroy_ctx(struct damon_ctx *ctx)
|
|||
kfree(ctx);
|
||||
}
|
||||
|
||||
static bool damon_attrs_equals(const struct damon_attrs *attrs1,
|
||||
const struct damon_attrs *attrs2)
|
||||
{
|
||||
const struct damon_intervals_goal *ig1 = &attrs1->intervals_goal;
|
||||
const struct damon_intervals_goal *ig2 = &attrs2->intervals_goal;
|
||||
|
||||
return attrs1->sample_interval == attrs2->sample_interval &&
|
||||
attrs1->aggr_interval == attrs2->aggr_interval &&
|
||||
attrs1->ops_update_interval == attrs2->ops_update_interval &&
|
||||
attrs1->min_nr_regions == attrs2->min_nr_regions &&
|
||||
attrs1->max_nr_regions == attrs2->max_nr_regions &&
|
||||
ig1->access_bp == ig2->access_bp &&
|
||||
ig1->aggrs == ig2->aggrs &&
|
||||
ig1->min_sample_us == ig2->min_sample_us &&
|
||||
ig1->max_sample_us == ig2->max_sample_us;
|
||||
}
|
||||
|
||||
static unsigned int damon_age_for_new_attrs(unsigned int age,
|
||||
struct damon_attrs *old_attrs, struct damon_attrs *new_attrs)
|
||||
{
|
||||
|
|
@ -1222,9 +1239,11 @@ int damon_commit_ctx(struct damon_ctx *dst, struct damon_ctx *src)
|
|||
* 2. ops update should be done after pid handling is done (target
|
||||
* committing require putting pids).
|
||||
*/
|
||||
err = damon_set_attrs(dst, &src->attrs);
|
||||
if (err)
|
||||
return err;
|
||||
if (!damon_attrs_equals(&dst->attrs, &src->attrs)) {
|
||||
err = damon_set_attrs(dst, &src->attrs);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
dst->ops = src->ops;
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user