mm/ksm: add tracepoint for ksm advisor
authorStefan Roesch <shr@devkernel.io>
Mon, 18 Dec 2023 23:10:53 +0000 (15:10 -0800)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 29 Dec 2023 19:58:27 +0000 (11:58 -0800)
This adds a new tracepoint for the ksm advisor.  It reports the last scan
time, the new setting of the pages_to_scan parameter and the average cpu
percent usage of the ksmd background thread for the last scan.

Link: https://lkml.kernel.org/r/20231218231054.1625219-4-shr@devkernel.io
Signed-off-by: Stefan Roesch <shr@devkernel.io>
Acked-by: David Hildenbrand <david@redhat.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Rik van Riel <riel@surriel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
include/trace/events/ksm.h
mm/ksm.c

index b5ac35c1d0e8887ede61262121d59db05c397f88..e728647b5d268ef7fa79a81972ff25a913b783e9 100644 (file)
@@ -245,6 +245,39 @@ TRACE_EVENT(ksm_remove_rmap_item,
                        __entry->pfn, __entry->rmap_item, __entry->mm)
 );
 
+/**
+ * ksm_advisor - called after the advisor has run
+ *
+ * @scan_time:         scan time in seconds
+ * @pages_to_scan:     new pages_to_scan value
+ * @cpu_percent:       cpu usage in percent
+ *
+ * Allows to trace the ksm advisor.
+ */
+TRACE_EVENT(ksm_advisor,
+
+       TP_PROTO(s64 scan_time, unsigned long pages_to_scan,
+                unsigned int cpu_percent),
+
+       TP_ARGS(scan_time, pages_to_scan, cpu_percent),
+
+       TP_STRUCT__entry(
+               __field(s64,            scan_time)
+               __field(unsigned long,  pages_to_scan)
+               __field(unsigned int,   cpu_percent)
+       ),
+
+       TP_fast_assign(
+               __entry->scan_time      = scan_time;
+               __entry->pages_to_scan  = pages_to_scan;
+               __entry->cpu_percent    = cpu_percent;
+       ),
+
+       TP_printk("ksm scan time %lld pages_to_scan %lu cpu percent %u",
+                       __entry->scan_time, __entry->pages_to_scan,
+                       __entry->cpu_percent)
+);
+
 #endif /* _TRACE_KSM_H */
 
 /* This part must be outside protection */
index ce30017455621b4d78835a84df27491ed1e26ffc..8fa6053a225d950db513058aba37df080e973e0b 100644 (file)
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -458,6 +458,7 @@ static void scan_time_advisor(void)
        advisor_ctx.cpu_time = cpu_time;
 
        ksm_thread_pages_to_scan = pages;
+       trace_ksm_advisor(scan_time, pages, cpu_percent);
 }
 
 static void advisor_stop_scan(void)