brintos

brintos / linux-shallow public Read only

0
0
Text · 6.0 KiB · e728647 Raw
285 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#undef TRACE_SYSTEM3#define TRACE_SYSTEM ksm4 5#if !defined(_TRACE_KSM_H) || defined(TRACE_HEADER_MULTI_READ)6#define _TRACE_KSM_H7 8#include <linux/tracepoint.h>9 10/**11 * ksm_scan_template - called for start / stop scan12 *13 * @seq:		sequence number of scan14 * @rmap_entries:	actual number of rmap entries15 *16 * Allows to trace the start / stop of a ksm scan.17 */18DECLARE_EVENT_CLASS(ksm_scan_template,19 20	TP_PROTO(int seq, u32 rmap_entries),21 22	TP_ARGS(seq, rmap_entries),23 24	TP_STRUCT__entry(25		__field(int,	seq)26		__field(u32,	rmap_entries)27	),28 29	TP_fast_assign(30		__entry->seq		= seq;31		__entry->rmap_entries	= rmap_entries;32	),33 34	TP_printk("seq %d rmap size %d",35			__entry->seq, __entry->rmap_entries)36);37 38/**39 * ksm_start_scan - called after a new ksm scan is started40 *41 * @seq:		sequence number of scan42 * @rmap_entries:	actual number of rmap entries43 *44 * Allows to trace the start of a ksm scan.45 */46DEFINE_EVENT(ksm_scan_template, ksm_start_scan,47 48	TP_PROTO(int seq, u32 rmap_entries),49 50	TP_ARGS(seq, rmap_entries)51);52 53/**54 * ksm_stop_scan - called after a new ksm scan has completed55 *56 * @seq:		sequence number of scan57 * @rmap_entries:	actual number of rmap entries58 *59 * Allows to trace the completion of a ksm scan.60 */61DEFINE_EVENT(ksm_scan_template, ksm_stop_scan,62 63	TP_PROTO(int seq, u32 rmap_entries),64 65	TP_ARGS(seq, rmap_entries)66);67 68/**69 * ksm_enter - called after a new process has been added / removed from ksm70 *71 * @mm:			address of the mm object of the process72 *73 * Allows to trace the when a process has been added or removed from ksm.74 */75DECLARE_EVENT_CLASS(ksm_enter_exit_template,76 77	TP_PROTO(void *mm),78 79	TP_ARGS(mm),80 81	TP_STRUCT__entry(82		__field(void *,		mm)83	),84 85	TP_fast_assign(86		__entry->mm	= mm;87	),88 89	TP_printk("mm %p", __entry->mm)90);91 92/**93 * ksm_enter - called after a new process has been added to ksm94 *95 * @mm:			address of the mm object of the process96 *97 * Allows to trace the when a process has been added to ksm.98 */99DEFINE_EVENT(ksm_enter_exit_template, ksm_enter,100 101	TP_PROTO(void *mm),102 103	TP_ARGS(mm)104);105 106/**107 * ksm_exit - called after a new process has been removed from ksm108 *109 * @mm:			address of the mm object of the process110 *111 * Allows to trace the when a process has been removed from ksm.112 */113DEFINE_EVENT(ksm_enter_exit_template, ksm_exit,114 115	TP_PROTO(void *mm),116 117	TP_ARGS(mm)118);119 120/**121 * ksm_merge_one_page - called after a page has been merged122 *123 * @pfn:		page frame number of ksm page124 * @rmap_item:		address of rmap_item  object125 * @mm:			address of the process mm struct126 * @err:		success127 *128 * Allows to trace the ksm merging of individual pages.129 */130TRACE_EVENT(ksm_merge_one_page,131 132	TP_PROTO(unsigned long pfn, void *rmap_item, void *mm, int err),133 134	TP_ARGS(pfn, rmap_item, mm, err),135 136	TP_STRUCT__entry(137		__field(unsigned long,	pfn)138		__field(void *,		rmap_item)139		__field(void *,		mm)140		__field(int,		err)141	),142 143	TP_fast_assign(144		__entry->pfn		= pfn;145		__entry->rmap_item	= rmap_item;146		__entry->mm		= mm;147		__entry->err		= err;148	),149 150	TP_printk("ksm pfn %lu rmap_item %p mm %p error %d",151			__entry->pfn, __entry->rmap_item, __entry->mm, __entry->err)152);153 154/**155 * ksm_merge_with_ksm_page - called after a page has been merged with a ksm page156 *157 * @ksm_page:		address ksm page158 * @pfn:		page frame number of ksm page159 * @rmap_item:		address of rmap_item  object160 * @mm:			address of the mm object of the process161 * @err:		success162 *163 * Allows to trace the merging of a page with a ksm page.164 */165TRACE_EVENT(ksm_merge_with_ksm_page,166 167	TP_PROTO(void *ksm_page, unsigned long pfn, void *rmap_item, void *mm, int err),168 169	TP_ARGS(ksm_page, pfn, rmap_item, mm, err),170 171	TP_STRUCT__entry(172		__field(void *,		ksm_page)173		__field(unsigned long,	pfn)174		__field(void *,		rmap_item)175		__field(void *,		mm)176		__field(int,		err)177	),178 179	TP_fast_assign(180		__entry->ksm_page	= ksm_page;181		__entry->pfn		= pfn;182		__entry->rmap_item	= rmap_item;183		__entry->mm		= mm;184		__entry->err		= err;185	),186 187	TP_printk("%spfn %lu rmap_item %p mm %p error %d",188		  (__entry->ksm_page ? "ksm " : ""),189		  __entry->pfn, __entry->rmap_item, __entry->mm, __entry->err)190);191 192/**193 * ksm_remove_ksm_page - called after a ksm page has been removed194 *195 * @pfn:		page frame number of ksm page196 *197 * Allows to trace the removing of stable ksm pages.198 */199TRACE_EVENT(ksm_remove_ksm_page,200 201	TP_PROTO(unsigned long pfn),202 203	TP_ARGS(pfn),204 205	TP_STRUCT__entry(206		__field(unsigned long, pfn)207	),208 209	TP_fast_assign(210		__entry->pfn = pfn;211	),212 213	TP_printk("pfn %lu", __entry->pfn)214);215 216/**217 * ksm_remove_rmap_item - called after a rmap_item has been removed from the218 *                        stable tree219 *220 * @pfn:		page frame number of ksm page221 * @rmap_item:		address of rmap_item  object222 * @mm:			address of the process mm struct223 *224 * Allows to trace the removal of pages from the stable tree list.225 */226TRACE_EVENT(ksm_remove_rmap_item,227 228	TP_PROTO(unsigned long pfn, void *rmap_item, void *mm),229 230	TP_ARGS(pfn, rmap_item, mm),231 232	TP_STRUCT__entry(233		__field(unsigned long,	pfn)234		__field(void *,		rmap_item)235		__field(void *,		mm)236	),237 238	TP_fast_assign(239		__entry->pfn		= pfn;240		__entry->rmap_item	= rmap_item;241		__entry->mm		= mm;242	),243 244	TP_printk("pfn %lu rmap_item %p mm %p",245			__entry->pfn, __entry->rmap_item, __entry->mm)246);247 248/**249 * ksm_advisor - called after the advisor has run250 *251 * @scan_time:		scan time in seconds252 * @pages_to_scan:	new pages_to_scan value253 * @cpu_percent:	cpu usage in percent254 *255 * Allows to trace the ksm advisor.256 */257TRACE_EVENT(ksm_advisor,258 259	TP_PROTO(s64 scan_time, unsigned long pages_to_scan,260		 unsigned int cpu_percent),261 262	TP_ARGS(scan_time, pages_to_scan, cpu_percent),263 264	TP_STRUCT__entry(265		__field(s64,		scan_time)266		__field(unsigned long,	pages_to_scan)267		__field(unsigned int,	cpu_percent)268	),269 270	TP_fast_assign(271		__entry->scan_time	= scan_time;272		__entry->pages_to_scan	= pages_to_scan;273		__entry->cpu_percent	= cpu_percent;274	),275 276	TP_printk("ksm scan time %lld pages_to_scan %lu cpu percent %u",277			__entry->scan_time, __entry->pages_to_scan,278			__entry->cpu_percent)279);280 281#endif /* _TRACE_KSM_H */282 283/* This part must be outside protection */284#include <trace/define_trace.h>285