From: SeongJae Park <sj@kernel.org>
To: Jonghyeon Kim <tome01@ajou.ac.kr>
Cc: akpm@linux-foundation.org, Jonathan.Cameron@Huawei.com,
amit@kernel.org, benh@kernel.crashing.org, corbet@lwn.net,
david@redhat.com, dwmw@amazon.com, elver@google.com,
foersleo@amazon.de, gthelen@google.com, markubo@amazon.de,
rientjes@google.com, shakeelb@google.com, shuah@kernel.org,
linux-damon@amazon.com, linux-mm@kvack.org,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH v1 1/3] mm/damon: Rebase damos watermarks for NUMA systems
Date: Tue, 22 Feb 2022 09:53:17 +0000 [thread overview]
Message-ID: <20220222095317.7911-1-sj@kernel.org> (raw)
In-Reply-To: <20220218102611.31895-2-tome01@ajou.ac.kr>
Hello Jonghyeon,
On Fri, 18 Feb 2022 19:26:09 +0900 Jonghyeon Kim <tome01@ajou.ac.kr> wrote:
> For NUMA systems, there is a need to allow damos to select watermark
> options for monitoring each NUMA node or whole system free memory. Even
> if we do not use NUMA, since the default NUMA node number is 0, we can
> monitor the whole system memory without any configuration.
Some users using NUMA machines but don't do NUMA-specific memory allocations
and therefore assume memory free rate in each NUMA node will be similar might
want to monitor only global free memory ratio, to limit number of kdamonds for
reducing CPU overhead. In the case, this patch would make them monitor only
the first node.
How about leaving DAMOS_WMARK_FREE_MEM_RATE to work as is, and adding a new
metric type, say, DAMOS_WMARK_NODE_FREE_MEM_RATE?
Thanks,
SJ
>
> Signed-off-by: Jonghyeon Kim <tome01@ajou.ac.kr>
> ---
> include/linux/damon.h | 2 ++
> mm/damon/core.c | 14 ++++++++------
> 2 files changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/include/linux/damon.h b/include/linux/damon.h
> index 49c4a11ecf20..c0adf1566603 100644
> --- a/include/linux/damon.h
> +++ b/include/linux/damon.h
> @@ -170,6 +170,7 @@ enum damos_wmark_metric {
> * @high: High watermark.
> * @mid: Middle watermark.
> * @low: Low watermark.
> + * @node: NUMA node for the watermarks.
> *
> * If &metric is &DAMOS_WMARK_NONE, the scheme is always active. Being active
> * means DAMON does monitoring and applying the action of the scheme to
> @@ -186,6 +187,7 @@ struct damos_watermarks {
> unsigned long high;
> unsigned long mid;
> unsigned long low;
> + int node;
>
> /* private: */
> bool activated;
> diff --git a/mm/damon/core.c b/mm/damon/core.c
> index 82e0a4620c4f..290c9c0535ee 100644
> --- a/mm/damon/core.c
> +++ b/mm/damon/core.c
> @@ -179,6 +179,7 @@ struct damos *damon_new_scheme(
> scheme->wmarks.high = wmarks->high;
> scheme->wmarks.mid = wmarks->mid;
> scheme->wmarks.low = wmarks->low;
> + scheme->wmarks.node = wmarks->node;
> scheme->wmarks.activated = true;
>
> return scheme;
> @@ -951,14 +952,15 @@ static bool kdamond_need_stop(struct damon_ctx *ctx)
> return true;
> }
>
> -static unsigned long damos_wmark_metric_value(enum damos_wmark_metric metric)
> +static unsigned long damos_wmark_metric_value(struct damos_watermarks wmarks)
> {
> - struct sysinfo i;
> + unsigned long nr_total, nr_free;
>
> - switch (metric) {
> + switch (wmarks.metric) {
> case DAMOS_WMARK_FREE_MEM_RATE:
> - si_meminfo(&i);
> - return i.freeram * 1000 / i.totalram;
> + nr_total = node_present_pages(wmarks.node);
> + nr_free = sum_zone_node_page_state(wmarks.node, NR_FREE_PAGES);
> + return nr_free * 1000 / nr_total;
> default:
> break;
> }
> @@ -976,7 +978,7 @@ static unsigned long damos_wmark_wait_us(struct damos *scheme)
> if (scheme->wmarks.metric == DAMOS_WMARK_NONE)
> return 0;
>
> - metric = damos_wmark_metric_value(scheme->wmarks.metric);
> + metric = damos_wmark_metric_value(scheme->wmarks);
> /* higher than high watermark or lower than low watermark */
> if (metric > scheme->wmarks.high || scheme->wmarks.low > metric) {
> if (scheme->wmarks.activated)
> --
> 2.17.1
>
>
next prev parent reply other threads:[~2022-02-22 9:53 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-18 10:26 [RFC PATCH v1 0/3] Rebase DAMON_RECALIM for NUMA system Jonghyeon Kim
2022-02-18 10:26 ` [RFC PATCH v1 1/3] mm/damon: Rebase damos watermarks for NUMA systems Jonghyeon Kim
2022-02-22 9:53 ` SeongJae Park [this message]
[not found] ` <20220223051056.GA3502@swarm08>
2022-02-23 7:10 ` Jonghyeon Kim
2022-02-18 10:26 ` [RFC PATCH v1 2/3] mm/damon/core: Add damon_start_one() Jonghyeon Kim
2022-02-22 9:53 ` SeongJae Park
[not found] ` <20220223051113.GA3535@swarm08>
2022-02-23 7:11 ` Jonghyeon Kim
2022-02-18 10:26 ` [RFC PATCH v1 3/3] mm/damon/reclaim: Add per NUMA node proactive reclamation by DAMON_RECLAIM Jonghyeon Kim
2022-02-22 9:53 ` SeongJae Park
[not found] ` <20220223051127.GA3588@swarm08>
2022-02-23 7:12 ` Jonghyeon Kim
2022-02-22 9:53 ` [RFC PATCH v1 0/3] Rebase DAMON_RECALIM for NUMA system SeongJae Park
[not found] ` <20220223051146.GA4530@swarm08>
2022-02-23 7:12 ` Jonghyeon Kim
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220222095317.7911-1-sj@kernel.org \
--to=sj@kernel.org \
--cc=Jonathan.Cameron@Huawei.com \
--cc=akpm@linux-foundation.org \
--cc=amit@kernel.org \
--cc=benh@kernel.crashing.org \
--cc=corbet@lwn.net \
--cc=david@redhat.com \
--cc=dwmw@amazon.com \
--cc=elver@google.com \
--cc=foersleo@amazon.de \
--cc=gthelen@google.com \
--cc=linux-damon@amazon.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=markubo@amazon.de \
--cc=rientjes@google.com \
--cc=shakeelb@google.com \
--cc=shuah@kernel.org \
--cc=tome01@ajou.ac.kr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox