mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: SJ Park <sj@kernel.org>
To: Gutierrez Asier <gutierrez.asier@huawei-partners.com>
Cc: SJ Park <sj@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	damon@lists.linux.dev, linux-kernel@vger.kernel.org,
	linux-mm@kvack.org
Subject: Re: [PATCH REPOST 0/5] mm/damon/vaddr: support {prep,apply}_probes
Date: Wed,  9 Sep 2026 07:31:43 -0700	[thread overview]
Message-ID: <20260909143143.106666-1-sj@kernel.org> (raw)
In-Reply-To: <6f1e4bde-da16-4510-b1c6-16ba2a24d3f3@huawei-partners.com>

Hi Asier,

On Wed, 9 Sep 2026 17:25:51 +0300 Gutierrez Asier <gutierrez.asier@huawei-partners.com> wrote:

> Hi SJ,
> 
> On 9/9/2026 5:04 PM, SJ Park wrote:
> > DAMON supports data attributes monitoring.  However, only the physical
> > address space operation set (paddr) is supporting it.  Add the support
> > to the virtual address space operation set (vaddr).
> > 
> > Patch 1 adds prep_probes support to vaddr.  Patch 2 moves probe filter
> > handling code in paddr.c that can be reused by vaddr to ops-common.c.
> > Patch 3 adds minimum apply_probes support to vaddr.  Patch 4 extends the
> > support for hugetlb.  Patch 5 extends the support for pgidle_unset
> > filter.
> > 
> > Test
> > ====
> > 
> > I confirmed it can capture ~48 mb working set of masim in vaddr mode,
> > like below.
> > 
> > First, start masim [1] to access ~48 mb memory at a time, in the
> > background.
> > 
> >     $ ./masim/masim.py run \
> >             --config_file ./masim/configs/stairs-50mb.cfg \
> >             --repeat 10 --quiet &
> > 
> > Note that the config says the working set is 50mb.  It is 50 million
> > bytes, so ~48 MiB.
> > 
> > Start traditional access monitoring of masim's virtual address space
> > using damo [2].
> > 
> >     $ sudo ./damo/damo start $(pidof masim)
> > 
> > Confirm it can capture the ~48 MiB working set as the 4-th region on the
> > snapshot.
> > 
> >     $ sudo ./damo/damo report access
> >     heatmap:
> >     11111111334[...]3000000000000000000000000000000000000000489999997777777743333333555556[...]8
> >     # min/max temperatures: -1,150,000,000, 80,009,499, column size: 6.963
> >     MiB
> >     intervals: sample 5 ms aggr 100 ms (max access hz 200)
> >     0   addr 85.355 TiB   size 55.703 MiB  access 0 hz   age 9.500 s
> >     1   addr 85.355 TiB   size 18.984 MiB  access 0 hz   age 6.700 s
> >     2   addr 127.183 TiB  size 278.516 MiB access 0 hz   age 11.500 s
> >     3   addr 127.183 TiB  size 7.570 MiB   access 0 hz   age 900 ms
> >     4   addr 127.183 TiB  size 48.133 MiB  access 190 hz age 800 ms
> >     5   addr 127.183 TiB  size 54.977 MiB  access 0 hz   age 1.700 s
> >     6   addr 127.183 TiB  size 55.113 MiB  access 0 hz   age 6.700 s
> >     7   addr 127.183 TiB  size 37.902 MiB  access 0 hz   age 3.900 s
> >     8   addr 127.990 TiB  size 120.000 KiB access 0 hz   age 11.400 s
> >     9   addr 127.990 TiB  size 8.000 KiB   access 70 hz  age 0 ns
> >     10  addr 127.990 TiB  size 4.000 KiB   access 0 hz   age 11.200 s
> >     memory bw estimate: 8.931 GiB per second
> >     total size: 557.027 MiB
> >     record DAMON intervals: sample 5 ms, aggr 100 ms
> > 
> > Stop access monitoring and start probe-only mode access monitoring.
> > 
> >     $ sudo ./damo/damo stop
> >     $ sudo ./damo/damo start $(pidof masim) --probe_prep set_pgidle \
> >             --probe_filter allow pgidle_unset --probe_weight 1
> > 
> > Confirm it can also capture the ~48 MiB working set as the 11-th region
> > on the snapshot.
> > 
> >     $ sudo ./damo/damo report attrs
> >     heatmap:
> >     00000000113[...]40000000000000000000000000000000000000000000000001111114999999533333336[...]6
> >     # min/max temperatures: -840,000,000, 330,002,000, column size: 6.961
> >     MiB
> >     probe prep: set_pgidle, filter: allow pgidle_unset (weight: 1)
> >     intervals: sample 5 ms aggr 100 ms (max probe hits 20)
> >     #   size         address       age           probe_hits
> >     0   8.000 KiB    127.990 TiB   8.700 s       0
> >     1   120.000 KiB  127.990 TiB   8.600 s       0
> >     2   55.543 MiB   127.183 TiB   8.400 s       0
> >     3   110.008 MiB  127.183 TiB   8.300 s       0
> >     4   55.352 MiB   127.183 TiB   8.100 s       0
> >     5   55.605 MiB   127.183 TiB   8 s           0
> >     6   55.691 MiB   85.355 TiB    7.900 s       0
> >     7   54.430 MiB   127.183 TiB   7.900 s       0
> >     8   50.391 MiB   127.183 TiB   6.900 s       0
> >     9   18.879 MiB   85.355 TiB    6 s           0
> >     10  52.844 MiB   127.183 TiB   3.500 s       0
> >     11  48.039 MiB   127.183 TiB   3.300 s       20
> >     12  4.000 KiB    127.990 TiB   8.500 s       20
> >     memory bw estimate: 0 B per second
> >     total size: 556.910 MiB
> >     record DAMON intervals: sample 5 ms, aggr 100 ms
> > 
> > [1] https://github.com/sjp38/masim
> > [2] https://github.com/damonitor/damo
> > 
> > Changes from v1 original post
> > - v1: https://lore.kernel.org/20260906184417.96621-1-sj@kernel.org
> > - Rebase to latest mm-new.
> > Changes from RFC
> > - RFC: https://lore.kernel.org/20260905202634.88102-1-sj@kernel.org
> > - Drop RFC tag.
> > - Rebase to latest mm-new.
> > 
> > SJ Park (5):
> >   mm/damon/vaddr: support prep_probes
> >   mm/damon/paddr: move probe filter handling to ops-common
> >   mm/damon/vaddr: support apply_probe
> >   mm/damon/vaddr: extend apply_probes() for hugetlb
> >   mm/damon/vaddr: support pgidle_unset probe filter type
> > 
> >  mm/damon/ops-common.c |  32 ++++++
> >  mm/damon/ops-common.h |   2 +
> >  mm/damon/paddr.c      |  23 +----
> >  mm/damon/vaddr.c      | 232 ++++++++++++++++++++++++++++++++++++++++++
> >  4 files changed, 267 insertions(+), 22 deletions(-)
> > 
> > 
> > base-commit: da659d141e9797b3a2e5d0e2b457bfa4e8a8cb2d
> 
> Nice to see the progress with probes.
> 
> Since you are adding prep_probes for vaddr, do we need to check for
> the existence of prep_probes in kdamond_fn?
> 
> How about this?
> 
> diff --git a/mm/damon/core.c b/mm/damon/core.c
> index 645cb367019a..7b308cbf21ab 100644
> --- a/mm/damon/core.c
> +++ b/mm/damon/core.c
> @@ -3935,7 +3935,7 @@ static int kdamond_fn(void *data)
>                 if (kdamond_wait_activation(ctx))
>                         break;
>  
> -               do_prep = ctx->ops.prep_probes && damon_has_prep(ctx);
> +               do_prep = damon_has_prep(ctx);
>  
>                 if (!access_check_disabled && ctx->ops.prepare_access_checks)
>                         ctx->ops.prepare_access_checks(ctx);
> 
> And maybe change the name of the variable to has_prep.

I'm sorry but I don't understand a benefit of the change.  Rather, I show it
could cause a problem.  Later code does below:

                if (do_prep)
                        ctx->ops.prep_probes(ctx, access_check_disabled);

If do_prep is true but ctx->ops.prep_probes is NULL, this will cause a problem.

Am I missing something?


Thanks,
SJ

[...]

  reply	other threads:[~2026-09-09 14:31 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-09 14:04 SJ Park
2026-09-09 14:04 ` [PATCH REPOST 1/5] mm/damon/vaddr: support prep_probes SJ Park
2026-09-11  1:59   ` Lian Wang
2026-09-09 14:04 ` [PATCH REPOST 2/5] mm/damon/paddr: move probe filter handling to ops-common SJ Park
2026-09-11  2:00   ` Lian Wang
2026-09-09 14:04 ` [PATCH REPOST 3/5] mm/damon/vaddr: support apply_probe SJ Park
2026-09-09 14:04 ` [PATCH REPOST 4/5] mm/damon/vaddr: extend apply_probes() for hugetlb SJ Park
2026-09-11  2:00   ` Lian Wang
2026-09-11  9:53   ` Kunwu Chan
2026-09-09 14:04 ` [PATCH REPOST 5/5] mm/damon/vaddr: support pgidle_unset probe filter type SJ Park
2026-09-11  2:01   ` Lian Wang
2026-09-11 13:33     ` SJ Park
2026-09-11 10:04   ` Kunwu Chan
2026-09-11 13:32     ` SJ Park
2026-09-11 15:32       ` KunWu Chan
2026-09-09 14:25 ` [PATCH REPOST 0/5] mm/damon/vaddr: support {prep,apply}_probes Gutierrez Asier
2026-09-09 14:31   ` SJ Park [this message]
2026-09-09 14:39     ` Gutierrez Asier
2026-09-09 14:43       ` SJ Park
2026-09-09 14:33 ` SJ 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=20260909143143.106666-1-sj@kernel.org \
    --to=sj@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=damon@lists.linux.dev \
    --cc=gutierrez.asier@huawei-partners.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®