| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284 |
- /* 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>
|