* [RFC PATCH 00/12] mm/damos/stat: introduce nr_snapshots, max_nr_snapshots and tracepoint @ 2025-11-23 18:43 SeongJae Park 2025-11-23 18:43 ` [RFC PATCH 12/12] mm/damon/core: add trace point for damos stat per apply interval SeongJae Park 2025-11-23 19:54 ` [RFC PATCH 00/12] mm/damos/stat: introduce nr_snapshots, max_nr_snapshots and tracepoint SeongJae Park 0 siblings, 2 replies; 5+ messages in thread From: SeongJae Park @ 2025-11-23 18:43 UTC (permalink / raw) Cc: SeongJae Park, Liam R. Howlett, Andrew Morton, David Hildenbrand, Jonathan Corbet, Lorenzo Stoakes, Masami Hiramatsu, Mathieu Desnoyers, Michal Hocko, Mike Rapoport, Steven Rostedt, Suren Baghdasaryan, Vlastimil Babka, damon, linux-doc, linux-kernel, linux-mm, linux-trace-kernel Introduce three changes for improving DAMOS stat's provided information, deterministic control, and reading usability. DAMOS provides stats that are important for understanding its behavior. It lacks information about how many DAMON-generated monitoring output snapshots it has worked on. Add a new stat, nr_snapshots, to show the information. Users can control DAMOS schemes in multiple ways. Using the online parameters commit feature, they can install and uninstall DAMOS schemes whenever they want while keeping DAMON runs. DAMOS quotas and watermarks can be used for manually or automatically turning on/off or adjusting the aggressiveness of the scheme. DAMOS filters can be used for applying the scheme to specific memory entities based on their types and locations. Some users want their DAMOS scheme to be applied to only specific number of DAMON snapshots, for more deterministic control. One example use case is tracepoint based snapshot reading. Add a new knob, max_nr_snapshots, to support this. If the nr_snapshots parameter becomes same to or greater than the value of this parameter, the scheme is deactivated. Users can read DAMOS stats via DAMON's sysfs interface. For deep level investigations on environments having advanced tools like perf and bpftrace, exposing the stats via a tracepoint can be useful. Implement a new tracepoint, namely damon:damos_stat_after_apply_interval. First five patches (patches 1-5) of this series implement the new stat, nr_snapshots, on the core layer (patch 1), expose on DAMON sysfs user interface (patch 2), and update documents (patches 3-5). Following six patches (patches 6-11) are for the new stat based DAMOS deactivation (max_nr_snapshots). The first one (patch 6) of this group updates a kernel-doc comment before making further changes. Then an implementation of it on the core layer (patch 7), an introduction of a new DAMON sysfs interface file for users of the feature (patch 8), and three updates of the documents (patches 9-11) follow. The final one (patch 12) introduces the new tracepoint that exposes the DAMOS stat values for each scheme apply interval. SeongJae Park (12): mm/damon/core: introduce nr_snapshots damos stat mm/damon/sysfs-schemes: introduce nr_snapshots damos stat file Docs/mm/damon/design: update for nr_snapshots damos stat Docs/admin-guide/mm/damon/usage: update for nr_snapshots damos stat Docs/ABI/damon: update for nr_snapshots damos stat mm/damon: update damos kerneldoc for stat field mm/damon/core: implement max_nr_snapshots mm/damon/sysfs-schemes: implement max_nr_snapshots file Docs/mm/damon/design: update for max_nr_snapshots Docs/admin-guide/mm/damon/usage: update for max_nr_snapshots Docs/ABI/damon: update for max_nr_snapshots mm/damon/core: add trace point for damos stat per apply interval .../ABI/testing/sysfs-kernel-mm-damon | 13 ++++++ Documentation/admin-guide/mm/damon/usage.rst | 11 ++--- Documentation/mm/damon/design.rst | 7 +++ include/linux/damon.h | 12 ++++-- include/trace/events/damon.h | 41 ++++++++++++++++++ mm/damon/core.c | 37 ++++++++++++++-- mm/damon/sysfs-schemes.c | 43 +++++++++++++++++++ 7 files changed, 153 insertions(+), 11 deletions(-) base-commit: 522f1a9fc5f1f0a11af39ba5bedae446322ca0a2 -- 2.47.3 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [RFC PATCH 12/12] mm/damon/core: add trace point for damos stat per apply interval 2025-11-23 18:43 [RFC PATCH 00/12] mm/damos/stat: introduce nr_snapshots, max_nr_snapshots and tracepoint SeongJae Park @ 2025-11-23 18:43 ` SeongJae Park 2025-11-24 15:15 ` Steven Rostedt 2025-11-23 19:54 ` [RFC PATCH 00/12] mm/damos/stat: introduce nr_snapshots, max_nr_snapshots and tracepoint SeongJae Park 1 sibling, 1 reply; 5+ messages in thread From: SeongJae Park @ 2025-11-23 18:43 UTC (permalink / raw) Cc: SeongJae Park, Andrew Morton, Masami Hiramatsu, Mathieu Desnoyers, Steven Rostedt, damon, linux-kernel, linux-mm, linux-trace-kernel DAMON users can read DAMOS stats via DAMON sysfs interface. It enables efficient, simple and flexible usages of the stats. Especially for systems not having advanced tools like perf or bpftrace, that can be useful. But if the advanced tools are available, exposing the stats via tracepoint can reduce unnecessary reimplementation of the wheels. Add a new tracepoint for DAMOS stats, namely damos_stat_after_apply_interval. The tracepoint is triggered for each scheme's apply interval and exposes the whole stat values. If the user needs sub-apply interval information for any chance, damos_before_apply tracepoint could be used. Signed-off-by: SeongJae Park <sj@kernel.org> --- include/trace/events/damon.h | 41 ++++++++++++++++++++++++++++++++++++ mm/damon/core.c | 15 +++++++++++++ 2 files changed, 56 insertions(+) diff --git a/include/trace/events/damon.h b/include/trace/events/damon.h index 852d725afea2..24fc402ab3c8 100644 --- a/include/trace/events/damon.h +++ b/include/trace/events/damon.h @@ -9,6 +9,47 @@ #include <linux/types.h> #include <linux/tracepoint.h> +TRACE_EVENT(damos_stat_after_apply_interval, + + TP_PROTO(unsigned int context_idx, unsigned int scheme_idx, + struct damos_stat *stat), + + TP_ARGS(context_idx, scheme_idx, stat), + + TP_STRUCT__entry( + __field(unsigned int, context_idx) + __field(unsigned int, scheme_idx) + __field(unsigned long, nr_tried) + __field(unsigned long, sz_tried) + __field(unsigned long, nr_applied) + __field(unsigned long, sz_applied) + __field(unsigned long, sz_ops_filter_passed) + __field(unsigned long, qt_exceeds) + __field(unsigned long, nr_snapshots) + ), + + TP_fast_assign( + __entry->context_idx = context_idx; + __entry->scheme_idx = scheme_idx; + __entry->nr_tried = stat->nr_tried; + __entry->sz_tried = stat->sz_tried; + __entry->nr_applied = stat->nr_applied; + __entry->sz_applied = stat->sz_applied; + __entry->sz_ops_filter_passed = stat->sz_ops_filter_passed; + __entry->qt_exceeds = stat->qt_exceeds; + __entry->nr_snapshots = stat->nr_snapshots; + ), + + TP_printk("ctx_idx=%u scheme_idx=%u nr_tried=%lu sz_tried=%lu " + "nr_applied=%lu sz_tried=%lu sz_ops_filter_passed=%lu " + "qt_exceeds=%lu nr_snapshots=%lu", + __entry->context_idx, __entry->scheme_idx, + __entry->nr_tried, __entry->sz_tried, + __entry->nr_applied, __entry->sz_applied, + __entry->sz_ops_filter_passed, __entry->qt_exceeds, + __entry->nr_snapshots) +); + TRACE_EVENT(damos_esz, TP_PROTO(unsigned int context_idx, unsigned int scheme_idx, diff --git a/mm/damon/core.c b/mm/damon/core.c index 36313cd1ff1c..2f212a18e4a0 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -2256,6 +2256,19 @@ static void damos_adjust_quota(struct damon_ctx *c, struct damos *s) quota->min_score = score; } +static void damos_trace_stat(struct damon_ctx *c, struct damos *s) +{ + unsigned int cidx = 0, sidx = 0; + struct damos *siter; + + damon_for_each_scheme(siter, c) { + if (siter == s) + break; + sidx++; + } + trace_damos_stat_after_apply_interval(cidx, sidx, &s->stat); +} + static void kdamond_apply_schemes(struct damon_ctx *c) { struct damon_target *t; @@ -2294,6 +2307,8 @@ static void kdamond_apply_schemes(struct damon_ctx *c) (s->apply_interval_us ? s->apply_interval_us : c->attrs.aggr_interval) / sample_interval; s->last_applied = NULL; + if (trace_damos_stat_after_apply_interval_enabled()) + damos_trace_stat(c, s); } mutex_unlock(&c->walk_control_lock); } -- 2.47.3 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [RFC PATCH 12/12] mm/damon/core: add trace point for damos stat per apply interval 2025-11-23 18:43 ` [RFC PATCH 12/12] mm/damon/core: add trace point for damos stat per apply interval SeongJae Park @ 2025-11-24 15:15 ` Steven Rostedt 2025-11-24 15:37 ` SeongJae Park 0 siblings, 1 reply; 5+ messages in thread From: Steven Rostedt @ 2025-11-24 15:15 UTC (permalink / raw) To: SeongJae Park Cc: Andrew Morton, Masami Hiramatsu, Mathieu Desnoyers, damon, linux-kernel, linux-mm, linux-trace-kernel On Sun, 23 Nov 2025 10:43:26 -0800 SeongJae Park <sj@kernel.org> wrote: > --- a/mm/damon/core.c > +++ b/mm/damon/core.c > @@ -2256,6 +2256,19 @@ static void damos_adjust_quota(struct damon_ctx *c, struct damos *s) > quota->min_score = score; > } > > +static void damos_trace_stat(struct damon_ctx *c, struct damos *s) > +{ > + unsigned int cidx = 0, sidx = 0; > + struct damos *siter; > + > + damon_for_each_scheme(siter, c) { > + if (siter == s) > + break; > + sidx++; > + } > + trace_damos_stat_after_apply_interval(cidx, sidx, &s->stat); > +} > + > static void kdamond_apply_schemes(struct damon_ctx *c) > { > struct damon_target *t; > @@ -2294,6 +2307,8 @@ static void kdamond_apply_schemes(struct damon_ctx *c) > (s->apply_interval_us ? s->apply_interval_us : > c->attrs.aggr_interval) / sample_interval; > s->last_applied = NULL; > + if (trace_damos_stat_after_apply_interval_enabled()) > + damos_trace_stat(c, s); > } > mutex_unlock(&c->walk_control_lock); > } I wonder if the above would look better (and still produce good assembly) if it was: static inline void damos_trace_stat(struct damon_ctx *c, struct damos *s) { unsigned int cidx = 0, sidx = 0; struct damos *siter; if (!trace_damos_stat_after_apply_interval_enabled()) return; damon_for_each_scheme(siter, c) { if (siter == s) break; sidx++; } trace_damos_stat_after_apply_interval(cidx, sidx, &s->stat); } static void kdamond_apply_schemes(struct damon_ctx *c) { struct damon_target *t; > @@ -2294,6 +2307,8 @@ static void kdamond_apply_schemes(struct damon_ctx *c) (s->apply_interval_us ? s->apply_interval_us : c->attrs.aggr_interval) / sample_interval; s->last_applied = NULL; damos_trace_stat(c, s); } mutex_unlock(&c->walk_control_lock); } I have no real preference. I just think keeping the "if ()" statement out of the main code as a more aesthetic look. But the above should be equivalent in actual functionality. -- Steve ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RFC PATCH 12/12] mm/damon/core: add trace point for damos stat per apply interval 2025-11-24 15:15 ` Steven Rostedt @ 2025-11-24 15:37 ` SeongJae Park 0 siblings, 0 replies; 5+ messages in thread From: SeongJae Park @ 2025-11-24 15:37 UTC (permalink / raw) To: Steven Rostedt Cc: SeongJae Park, Andrew Morton, Masami Hiramatsu, Mathieu Desnoyers, damon, linux-kernel, linux-mm, linux-trace-kernel On Mon, 24 Nov 2025 10:15:45 -0500 Steven Rostedt <rostedt@goodmis.org> wrote: > On Sun, 23 Nov 2025 10:43:26 -0800 > SeongJae Park <sj@kernel.org> wrote: > > > --- a/mm/damon/core.c > > +++ b/mm/damon/core.c [...] > I wonder if the above would look better (and still produce good assembly) > if it was: [...] > I have no real preference. I just think keeping the "if ()" statement out > of the main code as a more aesthetic look. But the above should be > equivalent in actual functionality. Thank you for this suggestion, Steve! I'll update this patch as you suggested in the next version. Thanks, SJ [...] ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [RFC PATCH 00/12] mm/damos/stat: introduce nr_snapshots, max_nr_snapshots and tracepoint 2025-11-23 18:43 [RFC PATCH 00/12] mm/damos/stat: introduce nr_snapshots, max_nr_snapshots and tracepoint SeongJae Park 2025-11-23 18:43 ` [RFC PATCH 12/12] mm/damon/core: add trace point for damos stat per apply interval SeongJae Park @ 2025-11-23 19:54 ` SeongJae Park 1 sibling, 0 replies; 5+ messages in thread From: SeongJae Park @ 2025-11-23 19:54 UTC (permalink / raw) To: SeongJae Park Cc: Liam R. Howlett, Andrew Morton, David Hildenbrand, Jonathan Corbet, Lorenzo Stoakes, Masami Hiramatsu, Mathieu Desnoyers, Michal Hocko, Mike Rapoport, Steven Rostedt, Suren Baghdasaryan, Vlastimil Babka, damon, linux-doc, linux-kernel, linux-mm, linux-trace-kernel On Sun, 23 Nov 2025 10:43:14 -0800 SeongJae Park <sj@kernel.org> wrote: > Introduce three changes for improving DAMOS stat's provided information, > deterministic control, and reading usability. FYI, I'm not aiming to make this be merged in 6.19-rc1. Thanks, SJ [...] ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2025-11-24 15:37 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-11-23 18:43 [RFC PATCH 00/12] mm/damos/stat: introduce nr_snapshots, max_nr_snapshots and tracepoint SeongJae Park 2025-11-23 18:43 ` [RFC PATCH 12/12] mm/damon/core: add trace point for damos stat per apply interval SeongJae Park 2025-11-24 15:15 ` Steven Rostedt 2025-11-24 15:37 ` SeongJae Park 2025-11-23 19:54 ` [RFC PATCH 00/12] mm/damos/stat: introduce nr_snapshots, max_nr_snapshots and tracepoint SeongJae Park
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).