Skip to content

Commit

Permalink
mm/damon/lru_sort: deduplicate hot/cold schemes generators
Browse files Browse the repository at this point in the history
damon_lru_sort_new_{hot,cold}_scheme() have quite a lot of duplicates. 
This commit factors out the duplicate to a separate function and use it
for reducing the duplicate.

Link: https://lkml.kernel.org/r/[email protected]
Signed-off-by: SeongJae Park <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
  • Loading branch information
sjp38 authored and akpm00 committed Oct 3, 2022
1 parent 45b8212 commit a62518a
Showing 1 changed file with 21 additions and 24 deletions.
45 changes: 21 additions & 24 deletions mm/damon/lru_sort.c
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,25 @@ DEFINE_DAMON_MODULES_DAMOS_STATS_PARAMS(damon_lru_sort_cold_stat,
static struct damon_ctx *ctx;
static struct damon_target *target;

static struct damos *damon_lru_sort_new_scheme(
struct damos_access_pattern *pattern, enum damos_action action)
{
struct damos_quota quota = damon_lru_sort_quota;

/* Use half of total quota for hot/cold pages sorting */
quota.ms = quota.ms / 2;

return damon_new_scheme(
/* find the pattern, and */
pattern,
/* (de)prioritize on LRU-lists */
action,
/* under the quota. */
&quota,
/* (De)activate this according to the watermarks. */
&damon_lru_sort_wmarks);
}

/* Create a DAMON-based operation scheme for hot memory regions */
static struct damos *damon_lru_sort_new_hot_scheme(unsigned int hot_thres)
{
Expand All @@ -149,19 +168,8 @@ static struct damos *damon_lru_sort_new_hot_scheme(unsigned int hot_thres)
.min_age_region = 0,
.max_age_region = UINT_MAX,
};
struct damos_quota quota = damon_lru_sort_quota;

/* Use half of total quota for hot pages sorting */
quota.ms = quota.ms / 2;

return damon_new_scheme(
&pattern,
/* prioritize those on LRU lists, as soon as found */
DAMOS_LRU_PRIO,
/* under the quota. */
&quota,
/* (De)activate this according to the watermarks. */
&damon_lru_sort_wmarks);
return damon_lru_sort_new_scheme(&pattern, DAMOS_LRU_PRIO);
}

/* Create a DAMON-based operation scheme for cold memory regions */
Expand All @@ -178,19 +186,8 @@ static struct damos *damon_lru_sort_new_cold_scheme(unsigned int cold_thres)
.min_age_region = cold_thres,
.max_age_region = UINT_MAX,
};
struct damos_quota quota = damon_lru_sort_quota;

/* Use half of total quota for cold pages sorting */
quota.ms = quota.ms / 2;

return damon_new_scheme(
&pattern,
/* mark those as not accessed, as soon as found */
DAMOS_LRU_DEPRIO,
/* under the quota. */
&quota,
/* (De)activate this according to the watermarks. */
&damon_lru_sort_wmarks);
return damon_lru_sort_new_scheme(&pattern, DAMOS_LRU_DEPRIO);
}

static int damon_lru_sort_apply_parameters(void)
Expand Down

0 comments on commit a62518a

Please sign in to comment.