All of lore.kernel.org
 help / color / mirror / Atom feed
From: SeongJae Park <sj@kernel.org>
To: SeongJae Park <sj@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	damon@lists.linux.dev, kernel-team@meta.com,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [RFC PATCH 03/11] mm/damon/core: implement DAMOS_QUOTA_NODE_MEMCG_USED_BP
Date: Tue,  7 Oct 2025 17:00:14 -0700	[thread overview]
Message-ID: <20251008000014.2845-1-sj@kernel.org> (raw)
In-Reply-To: <20250619220023.24023-4-sj@kernel.org>

On Thu, 19 Jun 2025 15:00:15 -0700 SeongJae Park <sj@kernel.org> wrote:

> Implement the behavior of DAMOS_QUOTA_NODE_MEMCG_USED_BP.  It uses sum
> of active/inactive anon/file pages of a given cgroup on a given NUMA
> node as the value of the metric.
> 
> Signed-off-by: SeongJae Park <sj@kernel.org>
> ---
>  mm/damon/core.c | 32 ++++++++++++++++++++++++++++++++
>  1 file changed, 32 insertions(+)
> 
> diff --git a/mm/damon/core.c b/mm/damon/core.c
> index d675dd932a23..1481b43f2710 100644
> --- a/mm/damon/core.c
> +++ b/mm/damon/core.c
[...]
> +static unsigned long damos_get_node_memcg_used_bp(
> +		struct damos_quota_goal *goal)
> +{
> +	struct mem_cgroup *memcg;
> +	struct lruvec *lruvec;
> +	unsigned long used_pages;
> +	struct sysinfo i;
> +
> +	rcu_read_lock();
> +	memcg = mem_cgroup_from_id(goal->memcg_id);
> +	mem_cgroup_flush_stats(memcg);
> +	lruvec = mem_cgroup_lruvec(memcg, NODE_DATA(goal->nid));
> +	used_pages = lruvec_page_state(lruvec, NR_ACTIVE_ANON);
> +	used_pages += lruvec_page_state(lruvec, NR_INACTIVE_ANON);
> +	used_pages += lruvec_page_state(lruvec, NR_ACTIVE_FILE);
> +	used_pages += lruvec_page_state(lruvec, NR_INACTIVE_FILE);
> +	rcu_read_unlock();

mem_cgroup_flush_stats() calls css_rstat_flush() which may block.  But the
above diff is putting it inside an RCU read-side critical section.  Actually
only mem_cgroup_from_id() needs to be called inside an RCU read-side critical
section.  I will revise the next version to call rcu_read_unlock() right after
mem_cgroup_from_id().

Also, mem_cgroup_from_id() could return NULL if the memcg is removeed while
DAMON is running, but this diff is not checking the NULL return case.  I will
add the handling in the next version.

> +
> +	si_meminfo_node(&i, goal->nid);
> +	return used_pages * PAGE_SIZE * 10000 / i.totalram;

i.totalram is in number of pages unit, but the above code is assuming it is in
bytes unit.  This makes the result significantly wrong.  I will fix this in the
next version.


Thanks,
SJ

[...]

  reply	other threads:[~2025-10-08  0:00 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-06-19 22:00 [RFC PATCH 00/11] mm/damon: allow DAMOS auto-tuned for per-memcg per-node memory usage SeongJae Park
2025-06-19 22:00 ` [RFC PATCH 01/11] mm/damon: document damos_quota_goal->nid use case SeongJae Park
2025-06-19 22:00 ` [RFC PATCH 02/11] mm/damon: add a new DAMOS quota goal metric for cgroup on node memory usage SeongJae Park
2025-10-09  0:37   ` SeongJae Park
2025-06-19 22:00 ` [RFC PATCH 03/11] mm/damon/core: implement DAMOS_QUOTA_NODE_MEMCG_USED_BP SeongJae Park
2025-10-08  0:00   ` SeongJae Park [this message]
2025-06-19 22:00 ` [RFC PATCH 04/11] mm/damon/sysfs-schemes: implement path file under quota goal directory SeongJae Park
2025-06-19 22:00 ` [RFC PATCH 05/11] mm/damon/sysfs-schemes: connect quota goal path file to DAMON core SeongJae Park
2025-06-19 22:00 ` [RFC PATCH 06/11] Docs/mm/damon/design: document DAMOS_QUOTA_NODE_MEMCG_USED_BP SeongJae Park
2025-06-19 22:00 ` [RFC PATCH 07/11] Docs/admin-guide/mm/damon/usage: document DAMOS quota goal path file SeongJae Park
2025-06-19 22:00 ` [RFC PATCH 08/11] mm/damon: add DAMOS_QUOTA_NODE_MEMCG_FREE_BP quota tuning goal metric SeongJae Park
2025-06-19 22:00 ` [RFC PATCH 09/11] mm/damon/core: implement DAMOS_QUOTA_NODE_MEMCG_FREE_BP SeongJae Park
2025-06-19 22:00 ` [RFC PATCH 10/11] mm/damon/sysfs-schemes: support DAMOS_QUOTA_NODE_MEMCG_FREE_BP SeongJae Park
2025-06-19 22:00 ` [RFC PATCH 11/11] Docs/mm/damon/design: document DAMOS_QUOTA_NODE_MEMCG_FREE_BP SeongJae Park

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=20251008000014.2845-1-sj@kernel.org \
    --to=sj@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=damon@lists.linux.dev \
    --cc=kernel-team@meta.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.