/* SPDX-License-Identifier: GPL-2.0 */
#undef TRACE_SYSTEM
#define TRACE_SYSTEM ksm
#if !defined (_TRACE_KSM_H) || defined (TRACE_HEADER_MULTI_READ)
#define _TRACE_KSM_H
#include <linux/tracepoint.h>
/**
* ksm_scan_template - called for start / stop scan
*
* @ seq : sequence number of scan
* @ rmap_entries : actual number of rmap entries
*
* Allows to trace the start / stop of a ksm scan .
*/
DECLARE_EVENT_CLASS(ksm_scan_template,
TP_PROTO(int seq, u32 rmap_entries),
TP_ARGS(seq, rmap_entries),
TP_STRUCT__entry(
__field(int , seq)
__field(u32, rmap_entries)
),
TP_fast_assign(
__entry->seq = seq;
__entry->rmap_entries = rmap_entries;
),
TP_printk("seq %d rmap size %d" ,
__entry->seq, __entry->rmap_entries)
);
/**
* ksm_start_scan - called after a new ksm scan is started
*
* @ seq : sequence number of scan
* @ rmap_entries : actual number of rmap entries
*
* Allows to trace the start of a ksm scan .
*/
DEFINE_EVENT(ksm_scan_template, ksm_start_scan,
TP_PROTO(int seq, u32 rmap_entries),
TP_ARGS(seq, rmap_entries)
);
/**
* ksm_stop_scan - called after a new ksm scan has completed
*
* @ seq : sequence number of scan
* @ rmap_entries : actual number of rmap entries
*
* Allows to trace the completion of a ksm scan .
*/
DEFINE_EVENT(ksm_scan_template, ksm_stop_scan,
TP_PROTO(int seq, u32 rmap_entries),
TP_ARGS(seq, rmap_entries)
);
/**
* ksm_enter - called after a new process has been added / removed from ksm
*
* @ mm : address of the mm object of the process
*
* Allows to trace the when a process has been added or removed from ksm .
*/
DECLARE_EVENT_CLASS(ksm_enter_exit_template,
TP_PROTO(void *mm),
TP_ARGS(mm),
TP_STRUCT__entry(
__field(void *, mm)
),
TP_fast_assign(
__entry->mm = mm;
),
TP_printk("mm %p" , __entry->mm)
);
/**
* ksm_enter - called after a new process has been added to ksm
*
* @ mm : address of the mm object of the process
*
* Allows to trace the when a process has been added to ksm .
*/
DEFINE_EVENT(ksm_enter_exit_template, ksm_enter,
TP_PROTO(void *mm),
TP_ARGS(mm)
);
/**
* ksm_exit - called after a new process has been removed from ksm
*
* @ mm : address of the mm object of the process
*
* Allows to trace the when a process has been removed from ksm .
*/
DEFINE_EVENT(ksm_enter_exit_template, ksm_exit,
TP_PROTO(void *mm),
TP_ARGS(mm)
);
/**
* ksm_merge_one_page - called after a page has been merged
*
* @ pfn : page frame number of ksm page
* @ rmap_item : address of rmap_item object
* @ mm : address of the process mm struct
* @ err : success
*
* Allows to trace the ksm merging of individual pages .
*/
TRACE_EVENT(ksm_merge_one_page,
TP_PROTO(unsigned long pfn, void *rmap_item, void *mm, int err),
TP_ARGS(pfn, rmap_item, mm, err),
TP_STRUCT__entry(
__field(unsigned long , pfn)
__field(void *, rmap_item)
__field(void *, mm)
__field(int , err)
),
TP_fast_assign(
__entry->pfn = pfn;
__entry->rmap_item = rmap_item;
__entry->mm = mm;
__entry->err = err;
),
TP_printk("ksm pfn %lu rmap_item %p mm %p error %d" ,
__entry->pfn, __entry->rmap_item, __entry->mm, __entry->err)
);
/**
* ksm_merge_with_ksm_page - called after a page has been merged with a ksm page
*
* @ ksm_page : address ksm page
* @ pfn : page frame number of ksm page
* @ rmap_item : address of rmap_item object
* @ mm : address of the mm object of the process
* @ err : success
*
* Allows to trace the merging of a page with a ksm page .
*/
TRACE_EVENT(ksm_merge_with_ksm_page,
TP_PROTO(void *ksm_page, unsigned long pfn, void *rmap_item, void *mm, int err),
TP_ARGS(ksm_page, pfn, rmap_item, mm, err),
TP_STRUCT__entry(
__field(void *, ksm_page)
__field(unsigned long , pfn)
__field(void *, rmap_item)
__field(void *, mm)
__field(int , err)
),
TP_fast_assign(
__entry->ksm_page = ksm_page;
__entry->pfn = pfn;
__entry->rmap_item = rmap_item;
__entry->mm = mm;
__entry->err = err;
),
TP_printk("%spfn %lu rmap_item %p mm %p error %d" ,
(__entry->ksm_page ? "ksm " : "" ),
__entry->pfn, __entry->rmap_item, __entry->mm, __entry->err)
);
/**
* ksm_remove_ksm_page - called after a ksm page has been removed
*
* @ pfn : page frame number of ksm page
*
* Allows to trace the removing of stable ksm pages .
*/
TRACE_EVENT(ksm_remove_ksm_page,
TP_PROTO(unsigned long pfn),
TP_ARGS(pfn),
TP_STRUCT__entry(
__field(unsigned long , pfn)
),
TP_fast_assign(
__entry->pfn = pfn;
),
TP_printk("pfn %lu" , __entry->pfn)
);
/**
* ksm_remove_rmap_item - called after a rmap_item has been removed from the
* stable tree
*
* @ pfn : page frame number of ksm page
* @ rmap_item : address of rmap_item object
* @ mm : address of the process mm struct
*
* Allows to trace the removal of pages from the stable tree list .
*/
TRACE_EVENT(ksm_remove_rmap_item,
TP_PROTO(unsigned long pfn, void *rmap_item, void *mm),
TP_ARGS(pfn, rmap_item, mm),
TP_STRUCT__entry(
__field(unsigned long , pfn)
__field(void *, rmap_item)
__field(void *, mm)
),
TP_fast_assign(
__entry->pfn = pfn;
__entry->rmap_item = rmap_item;
__entry->mm = mm;
),
TP_printk("pfn %lu rmap_item %p mm %p" ,
__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 */
#include <trace/define_trace.h>
Messung V0.5 in Prozent C=96 H=100 G=97
¤ Dauer der Verarbeitung: 0.28 Sekunden
(vorverarbeitet am 2026-09-28)
¤
*© Formatika GbR, Deutschland