mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 14:12:06 +00:00
a72217ad59
damos_before_apply tracepoint is exposing access rate of DAMON regions using nr_accesses field of regions, which was actually used by DAMOS in the past. However, it has changed to use nr_accesses_bp instead. Update the tracepoint to expose the value that DAMOS is really using. Note that it doesn't expose the value as is in the basis point, but after converting it to the natural number by dividing it by 10,000. Therefore this change doesn't make user-visible behavioral differences. Link: https://lkml.kernel.org/r/20230916020945.47296-4-sj@kernel.org Signed-off-by: SeongJae Park <sj@kernel.org> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Shuah Khan <shuah@kernel.org> Cc: Steven Rostedt (Google) <rostedt@goodmis.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
86 lines
2.2 KiB
C
86 lines
2.2 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#undef TRACE_SYSTEM
|
|
#define TRACE_SYSTEM damon
|
|
|
|
#if !defined(_TRACE_DAMON_H) || defined(TRACE_HEADER_MULTI_READ)
|
|
#define _TRACE_DAMON_H
|
|
|
|
#include <linux/damon.h>
|
|
#include <linux/types.h>
|
|
#include <linux/tracepoint.h>
|
|
|
|
TRACE_EVENT_CONDITION(damos_before_apply,
|
|
|
|
TP_PROTO(unsigned int context_idx, unsigned int scheme_idx,
|
|
unsigned int target_idx, struct damon_region *r,
|
|
unsigned int nr_regions, bool do_trace),
|
|
|
|
TP_ARGS(context_idx, target_idx, scheme_idx, r, nr_regions, do_trace),
|
|
|
|
TP_CONDITION(do_trace),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(unsigned int, context_idx)
|
|
__field(unsigned int, scheme_idx)
|
|
__field(unsigned long, target_idx)
|
|
__field(unsigned long, start)
|
|
__field(unsigned long, end)
|
|
__field(unsigned int, nr_accesses)
|
|
__field(unsigned int, age)
|
|
__field(unsigned int, nr_regions)
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->context_idx = context_idx;
|
|
__entry->scheme_idx = scheme_idx;
|
|
__entry->target_idx = target_idx;
|
|
__entry->start = r->ar.start;
|
|
__entry->end = r->ar.end;
|
|
__entry->nr_accesses = r->nr_accesses_bp / 10000;
|
|
__entry->age = r->age;
|
|
__entry->nr_regions = nr_regions;
|
|
),
|
|
|
|
TP_printk("ctx_idx=%u scheme_idx=%u target_idx=%lu nr_regions=%u %lu-%lu: %u %u",
|
|
__entry->context_idx, __entry->scheme_idx,
|
|
__entry->target_idx, __entry->nr_regions,
|
|
__entry->start, __entry->end,
|
|
__entry->nr_accesses, __entry->age)
|
|
);
|
|
|
|
TRACE_EVENT(damon_aggregated,
|
|
|
|
TP_PROTO(unsigned int target_id, struct damon_region *r,
|
|
unsigned int nr_regions),
|
|
|
|
TP_ARGS(target_id, r, nr_regions),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(unsigned long, target_id)
|
|
__field(unsigned int, nr_regions)
|
|
__field(unsigned long, start)
|
|
__field(unsigned long, end)
|
|
__field(unsigned int, nr_accesses)
|
|
__field(unsigned int, age)
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->target_id = target_id;
|
|
__entry->nr_regions = nr_regions;
|
|
__entry->start = r->ar.start;
|
|
__entry->end = r->ar.end;
|
|
__entry->nr_accesses = r->nr_accesses;
|
|
__entry->age = r->age;
|
|
),
|
|
|
|
TP_printk("target_id=%lu nr_regions=%u %lu-%lu: %u %u",
|
|
__entry->target_id, __entry->nr_regions,
|
|
__entry->start, __entry->end,
|
|
__entry->nr_accesses, __entry->age)
|
|
);
|
|
|
|
#endif /* _TRACE_DAMON_H */
|
|
|
|
/* This part must be outside protection */
|
|
#include <trace/define_trace.h>
|