xref: /openbmc/linux/include/trace/events/vmscan.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
233906bc5SMel Gorman #undef TRACE_SYSTEM
333906bc5SMel Gorman #define TRACE_SYSTEM vmscan
433906bc5SMel Gorman 
533906bc5SMel Gorman #if !defined(_TRACE_VMSCAN_H) || defined(TRACE_HEADER_MULTI_READ)
633906bc5SMel Gorman #define _TRACE_VMSCAN_H
733906bc5SMel Gorman 
833906bc5SMel Gorman #include <linux/types.h>
933906bc5SMel Gorman #include <linux/tracepoint.h>
1083cd81a3SKOSAKI Motohiro #include <linux/mm.h>
1183cd81a3SKOSAKI Motohiro #include <linux/memcontrol.h>
12420adbe9SVlastimil Babka #include <trace/events/mmflags.h>
1333906bc5SMel Gorman 
14755f0225SMel Gorman #define RECLAIM_WB_ANON		0x0001u
15755f0225SMel Gorman #define RECLAIM_WB_FILE		0x0002u
16e11da5b4SMel Gorman #define RECLAIM_WB_MIXED	0x0010u
1741ac1999SMel Gorman #define RECLAIM_WB_SYNC		0x0004u /* Unused, all reclaim async */
18755f0225SMel Gorman #define RECLAIM_WB_ASYNC	0x0008u
19dcec0b60SMichal Hocko #define RECLAIM_WB_LRU		(RECLAIM_WB_ANON|RECLAIM_WB_FILE)
20755f0225SMel Gorman 
21755f0225SMel Gorman #define show_reclaim_flags(flags)				\
22755f0225SMel Gorman 	(flags) ? __print_flags(flags, "|",			\
23755f0225SMel Gorman 		{RECLAIM_WB_ANON,	"RECLAIM_WB_ANON"},	\
24755f0225SMel Gorman 		{RECLAIM_WB_FILE,	"RECLAIM_WB_FILE"},	\
25e11da5b4SMel Gorman 		{RECLAIM_WB_MIXED,	"RECLAIM_WB_MIXED"},	\
26755f0225SMel Gorman 		{RECLAIM_WB_SYNC,	"RECLAIM_WB_SYNC"},	\
27755f0225SMel Gorman 		{RECLAIM_WB_ASYNC,	"RECLAIM_WB_ASYNC"}	\
28755f0225SMel Gorman 		) : "RECLAIM_WB_NONE"
29755f0225SMel Gorman 
308cd7c588SMel Gorman #define _VMSCAN_THROTTLE_WRITEBACK	(1 << VMSCAN_THROTTLE_WRITEBACK)
31d818fca1SMel Gorman #define _VMSCAN_THROTTLE_ISOLATED	(1 << VMSCAN_THROTTLE_ISOLATED)
3269392a40SMel Gorman #define _VMSCAN_THROTTLE_NOPROGRESS	(1 << VMSCAN_THROTTLE_NOPROGRESS)
331b4e3f26SMel Gorman #define _VMSCAN_THROTTLE_CONGESTED	(1 << VMSCAN_THROTTLE_CONGESTED)
348cd7c588SMel Gorman 
358cd7c588SMel Gorman #define show_throttle_flags(flags)						\
368cd7c588SMel Gorman 	(flags) ? __print_flags(flags, "|",					\
37d818fca1SMel Gorman 		{_VMSCAN_THROTTLE_WRITEBACK,	"VMSCAN_THROTTLE_WRITEBACK"},	\
3869392a40SMel Gorman 		{_VMSCAN_THROTTLE_ISOLATED,	"VMSCAN_THROTTLE_ISOLATED"},	\
391b4e3f26SMel Gorman 		{_VMSCAN_THROTTLE_NOPROGRESS,	"VMSCAN_THROTTLE_NOPROGRESS"},	\
401b4e3f26SMel Gorman 		{_VMSCAN_THROTTLE_CONGESTED,	"VMSCAN_THROTTLE_CONGESTED"}	\
418cd7c588SMel Gorman 		) : "VMSCAN_THROTTLE_NONE"
428cd7c588SMel Gorman 
438cd7c588SMel Gorman 
4460b62ff7SYafang Shao #define trace_reclaim_flags(file) ( \
4541ac1999SMel Gorman 	(file ? RECLAIM_WB_FILE : RECLAIM_WB_ANON) | \
4641ac1999SMel Gorman 	(RECLAIM_WB_ASYNC) \
47e11da5b4SMel Gorman 	)
48e11da5b4SMel Gorman 
4933906bc5SMel Gorman TRACE_EVENT(mm_vmscan_kswapd_sleep,
5033906bc5SMel Gorman 
5133906bc5SMel Gorman 	TP_PROTO(int nid),
5233906bc5SMel Gorman 
5333906bc5SMel Gorman 	TP_ARGS(nid),
5433906bc5SMel Gorman 
5533906bc5SMel Gorman 	TP_STRUCT__entry(
5633906bc5SMel Gorman 		__field(	int,	nid	)
5733906bc5SMel Gorman 	),
5833906bc5SMel Gorman 
5933906bc5SMel Gorman 	TP_fast_assign(
6033906bc5SMel Gorman 		__entry->nid	= nid;
6133906bc5SMel Gorman 	),
6233906bc5SMel Gorman 
6333906bc5SMel Gorman 	TP_printk("nid=%d", __entry->nid)
6433906bc5SMel Gorman );
6533906bc5SMel Gorman 
6633906bc5SMel Gorman TRACE_EVENT(mm_vmscan_kswapd_wake,
6733906bc5SMel Gorman 
68e5146b12SMel Gorman 	TP_PROTO(int nid, int zid, int order),
6933906bc5SMel Gorman 
70e5146b12SMel Gorman 	TP_ARGS(nid, zid, order),
7133906bc5SMel Gorman 
7233906bc5SMel Gorman 	TP_STRUCT__entry(
7333906bc5SMel Gorman 		__field(	int,	nid	)
74e5146b12SMel Gorman 		__field(	int,	zid	)
7533906bc5SMel Gorman 		__field(	int,	order	)
7633906bc5SMel Gorman 	),
7733906bc5SMel Gorman 
7833906bc5SMel Gorman 	TP_fast_assign(
7933906bc5SMel Gorman 		__entry->nid	= nid;
80e5146b12SMel Gorman 		__entry->zid    = zid;
8133906bc5SMel Gorman 		__entry->order	= order;
8233906bc5SMel Gorman 	),
8333906bc5SMel Gorman 
843b775998SYafang Shao 	TP_printk("nid=%d order=%d",
853b775998SYafang Shao 		__entry->nid,
863b775998SYafang Shao 		__entry->order)
8733906bc5SMel Gorman );
8833906bc5SMel Gorman 
8933906bc5SMel Gorman TRACE_EVENT(mm_vmscan_wakeup_kswapd,
9033906bc5SMel Gorman 
915ecd9d40SDavid Rientjes 	TP_PROTO(int nid, int zid, int order, gfp_t gfp_flags),
9233906bc5SMel Gorman 
935ecd9d40SDavid Rientjes 	TP_ARGS(nid, zid, order, gfp_flags),
9433906bc5SMel Gorman 
9533906bc5SMel Gorman 	TP_STRUCT__entry(
9633906bc5SMel Gorman 		__field(	int,	nid		)
9733906bc5SMel Gorman 		__field(	int,	zid		)
9833906bc5SMel Gorman 		__field(	int,	order		)
99fe573327SVasily Averin 		__field(	unsigned long,	gfp_flags	)
10033906bc5SMel Gorman 	),
10133906bc5SMel Gorman 
10233906bc5SMel Gorman 	TP_fast_assign(
10333906bc5SMel Gorman 		__entry->nid		= nid;
10433906bc5SMel Gorman 		__entry->zid		= zid;
10533906bc5SMel Gorman 		__entry->order		= order;
106fe573327SVasily Averin 		__entry->gfp_flags	= (__force unsigned long)gfp_flags;
10733906bc5SMel Gorman 	),
10833906bc5SMel Gorman 
1093b775998SYafang Shao 	TP_printk("nid=%d order=%d gfp_flags=%s",
11033906bc5SMel Gorman 		__entry->nid,
1115ecd9d40SDavid Rientjes 		__entry->order,
1125ecd9d40SDavid Rientjes 		show_gfp_flags(__entry->gfp_flags))
11333906bc5SMel Gorman );
11433906bc5SMel Gorman 
115cf4dcc3eSKOSAKI Motohiro DECLARE_EVENT_CLASS(mm_vmscan_direct_reclaim_begin_template,
11633906bc5SMel Gorman 
1173481c37fSYafang Shao 	TP_PROTO(int order, gfp_t gfp_flags),
11833906bc5SMel Gorman 
1193481c37fSYafang Shao 	TP_ARGS(order, gfp_flags),
12033906bc5SMel Gorman 
12133906bc5SMel Gorman 	TP_STRUCT__entry(
12233906bc5SMel Gorman 		__field(	int,	order		)
123fe573327SVasily Averin 		__field(	unsigned long,	gfp_flags	)
12433906bc5SMel Gorman 	),
12533906bc5SMel Gorman 
12633906bc5SMel Gorman 	TP_fast_assign(
12733906bc5SMel Gorman 		__entry->order		= order;
128fe573327SVasily Averin 		__entry->gfp_flags	= (__force unsigned long)gfp_flags;
12933906bc5SMel Gorman 	),
13033906bc5SMel Gorman 
1313481c37fSYafang Shao 	TP_printk("order=%d gfp_flags=%s",
13233906bc5SMel Gorman 		__entry->order,
1333481c37fSYafang Shao 		show_gfp_flags(__entry->gfp_flags))
13433906bc5SMel Gorman );
13533906bc5SMel Gorman 
136cf4dcc3eSKOSAKI Motohiro DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_direct_reclaim_begin,
137cf4dcc3eSKOSAKI Motohiro 
1383481c37fSYafang Shao 	TP_PROTO(int order, gfp_t gfp_flags),
139cf4dcc3eSKOSAKI Motohiro 
1403481c37fSYafang Shao 	TP_ARGS(order, gfp_flags)
141cf4dcc3eSKOSAKI Motohiro );
142cf4dcc3eSKOSAKI Motohiro 
143f40a37cbSSteven Rostedt (VMware) #ifdef CONFIG_MEMCG
144bdce6d9eSKOSAKI Motohiro DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_reclaim_begin,
145bdce6d9eSKOSAKI Motohiro 
1463481c37fSYafang Shao 	TP_PROTO(int order, gfp_t gfp_flags),
147bdce6d9eSKOSAKI Motohiro 
1483481c37fSYafang Shao 	TP_ARGS(order, gfp_flags)
149bdce6d9eSKOSAKI Motohiro );
150bdce6d9eSKOSAKI Motohiro 
151bdce6d9eSKOSAKI Motohiro DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_softlimit_reclaim_begin,
152bdce6d9eSKOSAKI Motohiro 
1533481c37fSYafang Shao 	TP_PROTO(int order, gfp_t gfp_flags),
154bdce6d9eSKOSAKI Motohiro 
1553481c37fSYafang Shao 	TP_ARGS(order, gfp_flags)
156bdce6d9eSKOSAKI Motohiro );
157f40a37cbSSteven Rostedt (VMware) #endif /* CONFIG_MEMCG */
158cf4dcc3eSKOSAKI Motohiro 
159cf4dcc3eSKOSAKI Motohiro DECLARE_EVENT_CLASS(mm_vmscan_direct_reclaim_end_template,
16033906bc5SMel Gorman 
16133906bc5SMel Gorman 	TP_PROTO(unsigned long nr_reclaimed),
16233906bc5SMel Gorman 
16333906bc5SMel Gorman 	TP_ARGS(nr_reclaimed),
16433906bc5SMel Gorman 
16533906bc5SMel Gorman 	TP_STRUCT__entry(
16633906bc5SMel Gorman 		__field(	unsigned long,	nr_reclaimed	)
16733906bc5SMel Gorman 	),
16833906bc5SMel Gorman 
16933906bc5SMel Gorman 	TP_fast_assign(
17033906bc5SMel Gorman 		__entry->nr_reclaimed	= nr_reclaimed;
17133906bc5SMel Gorman 	),
17233906bc5SMel Gorman 
17333906bc5SMel Gorman 	TP_printk("nr_reclaimed=%lu", __entry->nr_reclaimed)
17433906bc5SMel Gorman );
17533906bc5SMel Gorman 
176cf4dcc3eSKOSAKI Motohiro DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_direct_reclaim_end,
177cf4dcc3eSKOSAKI Motohiro 
178cf4dcc3eSKOSAKI Motohiro 	TP_PROTO(unsigned long nr_reclaimed),
179cf4dcc3eSKOSAKI Motohiro 
180cf4dcc3eSKOSAKI Motohiro 	TP_ARGS(nr_reclaimed)
181cf4dcc3eSKOSAKI Motohiro );
182cf4dcc3eSKOSAKI Motohiro 
183f40a37cbSSteven Rostedt (VMware) #ifdef CONFIG_MEMCG
184bdce6d9eSKOSAKI Motohiro DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_memcg_reclaim_end,
185bdce6d9eSKOSAKI Motohiro 
186bdce6d9eSKOSAKI Motohiro 	TP_PROTO(unsigned long nr_reclaimed),
187bdce6d9eSKOSAKI Motohiro 
188bdce6d9eSKOSAKI Motohiro 	TP_ARGS(nr_reclaimed)
189bdce6d9eSKOSAKI Motohiro );
190bdce6d9eSKOSAKI Motohiro 
191bdce6d9eSKOSAKI Motohiro DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_memcg_softlimit_reclaim_end,
192bdce6d9eSKOSAKI Motohiro 
193bdce6d9eSKOSAKI Motohiro 	TP_PROTO(unsigned long nr_reclaimed),
194bdce6d9eSKOSAKI Motohiro 
195bdce6d9eSKOSAKI Motohiro 	TP_ARGS(nr_reclaimed)
196bdce6d9eSKOSAKI Motohiro );
197f40a37cbSSteven Rostedt (VMware) #endif /* CONFIG_MEMCG */
198bdce6d9eSKOSAKI Motohiro 
19909576073SDave Chinner TRACE_EVENT(mm_shrink_slab_start,
20009576073SDave Chinner 	TP_PROTO(struct shrinker *shr, struct shrink_control *sc,
2019092c71bSJosef Bacik 		long nr_objects_to_shrink, unsigned long cache_items,
2029092c71bSJosef Bacik 		unsigned long long delta, unsigned long total_scan,
2039092c71bSJosef Bacik 		int priority),
20409576073SDave Chinner 
2059092c71bSJosef Bacik 	TP_ARGS(shr, sc, nr_objects_to_shrink, cache_items, delta, total_scan,
2069092c71bSJosef Bacik 		priority),
20709576073SDave Chinner 
20809576073SDave Chinner 	TP_STRUCT__entry(
20909576073SDave Chinner 		__field(struct shrinker *, shr)
21009576073SDave Chinner 		__field(void *, shrink)
211df9024a8SDave Hansen 		__field(int, nid)
21209576073SDave Chinner 		__field(long, nr_objects_to_shrink)
213fe573327SVasily Averin 		__field(unsigned long, gfp_flags)
21409576073SDave Chinner 		__field(unsigned long, cache_items)
21509576073SDave Chinner 		__field(unsigned long long, delta)
21609576073SDave Chinner 		__field(unsigned long, total_scan)
2179092c71bSJosef Bacik 		__field(int, priority)
21809576073SDave Chinner 	),
21909576073SDave Chinner 
22009576073SDave Chinner 	TP_fast_assign(
22109576073SDave Chinner 		__entry->shr = shr;
222a0b02131SDave Chinner 		__entry->shrink = shr->scan_objects;
223df9024a8SDave Hansen 		__entry->nid = sc->nid;
22409576073SDave Chinner 		__entry->nr_objects_to_shrink = nr_objects_to_shrink;
225fe573327SVasily Averin 		__entry->gfp_flags = (__force unsigned long)sc->gfp_mask;
22609576073SDave Chinner 		__entry->cache_items = cache_items;
22709576073SDave Chinner 		__entry->delta = delta;
22809576073SDave Chinner 		__entry->total_scan = total_scan;
2299092c71bSJosef Bacik 		__entry->priority = priority;
23009576073SDave Chinner 	),
23109576073SDave Chinner 
232d75f773cSSakari Ailus 	TP_printk("%pS %p: nid: %d objects to shrink %ld gfp_flags %s cache items %ld delta %lld total_scan %ld priority %d",
23309576073SDave Chinner 		__entry->shrink,
23409576073SDave Chinner 		__entry->shr,
235df9024a8SDave Hansen 		__entry->nid,
23609576073SDave Chinner 		__entry->nr_objects_to_shrink,
23709576073SDave Chinner 		show_gfp_flags(__entry->gfp_flags),
23809576073SDave Chinner 		__entry->cache_items,
23909576073SDave Chinner 		__entry->delta,
2409092c71bSJosef Bacik 		__entry->total_scan,
2419092c71bSJosef Bacik 		__entry->priority)
24209576073SDave Chinner );
24309576073SDave Chinner 
24409576073SDave Chinner TRACE_EVENT(mm_shrink_slab_end,
245df9024a8SDave Hansen 	TP_PROTO(struct shrinker *shr, int nid, int shrinker_retval,
2467fe70475SDave Hansen 		long unused_scan_cnt, long new_scan_cnt, long total_scan),
24709576073SDave Chinner 
248df9024a8SDave Hansen 	TP_ARGS(shr, nid, shrinker_retval, unused_scan_cnt, new_scan_cnt,
249df9024a8SDave Hansen 		total_scan),
25009576073SDave Chinner 
25109576073SDave Chinner 	TP_STRUCT__entry(
25209576073SDave Chinner 		__field(struct shrinker *, shr)
253df9024a8SDave Hansen 		__field(int, nid)
25409576073SDave Chinner 		__field(void *, shrink)
25509576073SDave Chinner 		__field(long, unused_scan)
25609576073SDave Chinner 		__field(long, new_scan)
25709576073SDave Chinner 		__field(int, retval)
25809576073SDave Chinner 		__field(long, total_scan)
25909576073SDave Chinner 	),
26009576073SDave Chinner 
26109576073SDave Chinner 	TP_fast_assign(
26209576073SDave Chinner 		__entry->shr = shr;
263df9024a8SDave Hansen 		__entry->nid = nid;
264a0b02131SDave Chinner 		__entry->shrink = shr->scan_objects;
26509576073SDave Chinner 		__entry->unused_scan = unused_scan_cnt;
26609576073SDave Chinner 		__entry->new_scan = new_scan_cnt;
26709576073SDave Chinner 		__entry->retval = shrinker_retval;
2687fe70475SDave Hansen 		__entry->total_scan = total_scan;
26909576073SDave Chinner 	),
27009576073SDave Chinner 
271d75f773cSSakari Ailus 	TP_printk("%pS %p: nid: %d unused scan count %ld new scan count %ld total_scan %ld last shrinker return val %d",
27209576073SDave Chinner 		__entry->shrink,
27309576073SDave Chinner 		__entry->shr,
274df9024a8SDave Hansen 		__entry->nid,
27509576073SDave Chinner 		__entry->unused_scan,
27609576073SDave Chinner 		__entry->new_scan,
27709576073SDave Chinner 		__entry->total_scan,
27809576073SDave Chinner 		__entry->retval)
27909576073SDave Chinner );
280bdce6d9eSKOSAKI Motohiro 
28130b9aed8SMichal Hocko TRACE_EVENT(mm_vmscan_lru_isolate,
28297a225e6SJoonsoo Kim 	TP_PROTO(int highest_zoneidx,
283e5146b12SMel Gorman 		int order,
284a8a94d15SMel Gorman 		unsigned long nr_requested,
285a8a94d15SMel Gorman 		unsigned long nr_scanned,
2861265e3a6SMichal Hocko 		unsigned long nr_skipped,
287a8a94d15SMel Gorman 		unsigned long nr_taken,
288ea4d349fSTao Ma 		isolate_mode_t isolate_mode,
28932b3f297SMichal Hocko 		int lru),
290a8a94d15SMel Gorman 
29197a225e6SJoonsoo Kim 	TP_ARGS(highest_zoneidx, order, nr_requested, nr_scanned, nr_skipped, nr_taken, isolate_mode, lru),
292a8a94d15SMel Gorman 
293a8a94d15SMel Gorman 	TP_STRUCT__entry(
29497a225e6SJoonsoo Kim 		__field(int, highest_zoneidx)
295a8a94d15SMel Gorman 		__field(int, order)
296a8a94d15SMel Gorman 		__field(unsigned long, nr_requested)
297a8a94d15SMel Gorman 		__field(unsigned long, nr_scanned)
2981265e3a6SMichal Hocko 		__field(unsigned long, nr_skipped)
299a8a94d15SMel Gorman 		__field(unsigned long, nr_taken)
300*2b132903SVasily Averin 		__field(unsigned int, isolate_mode)
30132b3f297SMichal Hocko 		__field(int, lru)
302a8a94d15SMel Gorman 	),
303a8a94d15SMel Gorman 
304a8a94d15SMel Gorman 	TP_fast_assign(
30597a225e6SJoonsoo Kim 		__entry->highest_zoneidx = highest_zoneidx;
306a8a94d15SMel Gorman 		__entry->order = order;
307a8a94d15SMel Gorman 		__entry->nr_requested = nr_requested;
308a8a94d15SMel Gorman 		__entry->nr_scanned = nr_scanned;
3091265e3a6SMichal Hocko 		__entry->nr_skipped = nr_skipped;
310a8a94d15SMel Gorman 		__entry->nr_taken = nr_taken;
311*2b132903SVasily Averin 		__entry->isolate_mode = (__force unsigned int)isolate_mode;
31232b3f297SMichal Hocko 		__entry->lru = lru;
313a8a94d15SMel Gorman 	),
314a8a94d15SMel Gorman 
31597a225e6SJoonsoo Kim 	/*
31697a225e6SJoonsoo Kim 	 * classzone is previous name of the highest_zoneidx.
31797a225e6SJoonsoo Kim 	 * Reason not to change it is the ABI requirement of the tracepoint.
31897a225e6SJoonsoo Kim 	 */
31932b3f297SMichal Hocko 	TP_printk("isolate_mode=%d classzone=%d order=%d nr_requested=%lu nr_scanned=%lu nr_skipped=%lu nr_taken=%lu lru=%s",
320a8a94d15SMel Gorman 		__entry->isolate_mode,
32197a225e6SJoonsoo Kim 		__entry->highest_zoneidx,
322a8a94d15SMel Gorman 		__entry->order,
323a8a94d15SMel Gorman 		__entry->nr_requested,
324a8a94d15SMel Gorman 		__entry->nr_scanned,
3251265e3a6SMichal Hocko 		__entry->nr_skipped,
326a8a94d15SMel Gorman 		__entry->nr_taken,
32732b3f297SMichal Hocko 		__print_symbolic(__entry->lru, LRU_NAMES))
328a8a94d15SMel Gorman );
329a8a94d15SMel Gorman 
330e0cd5e7fSMatthew Wilcox (Oracle) TRACE_EVENT(mm_vmscan_write_folio,
331755f0225SMel Gorman 
332e0cd5e7fSMatthew Wilcox (Oracle) 	TP_PROTO(struct folio *folio),
333755f0225SMel Gorman 
334e0cd5e7fSMatthew Wilcox (Oracle) 	TP_ARGS(folio),
335755f0225SMel Gorman 
336755f0225SMel Gorman 	TP_STRUCT__entry(
3379fdd8a87SNamhyung Kim 		__field(unsigned long, pfn)
338755f0225SMel Gorman 		__field(int, reclaim_flags)
339755f0225SMel Gorman 	),
340755f0225SMel Gorman 
341755f0225SMel Gorman 	TP_fast_assign(
342e0cd5e7fSMatthew Wilcox (Oracle) 		__entry->pfn = folio_pfn(folio);
34360b62ff7SYafang Shao 		__entry->reclaim_flags = trace_reclaim_flags(
344e0cd5e7fSMatthew Wilcox (Oracle) 						folio_is_file_lru(folio));
345755f0225SMel Gorman 	),
346755f0225SMel Gorman 
34753d884a6SVincent Whitchurch 	TP_printk("page=%p pfn=0x%lx flags=%s",
3489fdd8a87SNamhyung Kim 		pfn_to_page(__entry->pfn),
3499fdd8a87SNamhyung Kim 		__entry->pfn,
350755f0225SMel Gorman 		show_reclaim_flags(__entry->reclaim_flags))
351755f0225SMel Gorman );
352755f0225SMel Gorman 
353e11da5b4SMel Gorman TRACE_EVENT(mm_vmscan_lru_shrink_inactive,
354e11da5b4SMel Gorman 
355599d0c95SMel Gorman 	TP_PROTO(int nid,
356e11da5b4SMel Gorman 		unsigned long nr_scanned, unsigned long nr_reclaimed,
357d51d1e64SSteven Rostedt 		struct reclaim_stat *stat, int priority, int file),
358e11da5b4SMel Gorman 
359d51d1e64SSteven Rostedt 	TP_ARGS(nid, nr_scanned, nr_reclaimed, stat, priority, file),
360e11da5b4SMel Gorman 
361e11da5b4SMel Gorman 	TP_STRUCT__entry(
362e11da5b4SMel Gorman 		__field(int, nid)
363e11da5b4SMel Gorman 		__field(unsigned long, nr_scanned)
364e11da5b4SMel Gorman 		__field(unsigned long, nr_reclaimed)
3655bccd166SMichal Hocko 		__field(unsigned long, nr_dirty)
3665bccd166SMichal Hocko 		__field(unsigned long, nr_writeback)
3675bccd166SMichal Hocko 		__field(unsigned long, nr_congested)
3685bccd166SMichal Hocko 		__field(unsigned long, nr_immediate)
369886cf190SKirill Tkhai 		__field(unsigned int, nr_activate0)
370886cf190SKirill Tkhai 		__field(unsigned int, nr_activate1)
3715bccd166SMichal Hocko 		__field(unsigned long, nr_ref_keep)
3725bccd166SMichal Hocko 		__field(unsigned long, nr_unmap_fail)
373e11da5b4SMel Gorman 		__field(int, priority)
374e11da5b4SMel Gorman 		__field(int, reclaim_flags)
375e11da5b4SMel Gorman 	),
376e11da5b4SMel Gorman 
377e11da5b4SMel Gorman 	TP_fast_assign(
378599d0c95SMel Gorman 		__entry->nid = nid;
379e11da5b4SMel Gorman 		__entry->nr_scanned = nr_scanned;
380e11da5b4SMel Gorman 		__entry->nr_reclaimed = nr_reclaimed;
381d51d1e64SSteven Rostedt 		__entry->nr_dirty = stat->nr_dirty;
382d51d1e64SSteven Rostedt 		__entry->nr_writeback = stat->nr_writeback;
383d51d1e64SSteven Rostedt 		__entry->nr_congested = stat->nr_congested;
384d51d1e64SSteven Rostedt 		__entry->nr_immediate = stat->nr_immediate;
385886cf190SKirill Tkhai 		__entry->nr_activate0 = stat->nr_activate[0];
386886cf190SKirill Tkhai 		__entry->nr_activate1 = stat->nr_activate[1];
387d51d1e64SSteven Rostedt 		__entry->nr_ref_keep = stat->nr_ref_keep;
388d51d1e64SSteven Rostedt 		__entry->nr_unmap_fail = stat->nr_unmap_fail;
389e11da5b4SMel Gorman 		__entry->priority = priority;
39060b62ff7SYafang Shao 		__entry->reclaim_flags = trace_reclaim_flags(file);
391e11da5b4SMel Gorman 	),
392e11da5b4SMel Gorman 
393886cf190SKirill Tkhai 	TP_printk("nid=%d nr_scanned=%ld nr_reclaimed=%ld nr_dirty=%ld nr_writeback=%ld nr_congested=%ld nr_immediate=%ld nr_activate_anon=%d nr_activate_file=%d nr_ref_keep=%ld nr_unmap_fail=%ld priority=%d flags=%s",
394599d0c95SMel Gorman 		__entry->nid,
395e11da5b4SMel Gorman 		__entry->nr_scanned, __entry->nr_reclaimed,
3965bccd166SMichal Hocko 		__entry->nr_dirty, __entry->nr_writeback,
3975bccd166SMichal Hocko 		__entry->nr_congested, __entry->nr_immediate,
398886cf190SKirill Tkhai 		__entry->nr_activate0, __entry->nr_activate1,
399886cf190SKirill Tkhai 		__entry->nr_ref_keep, __entry->nr_unmap_fail,
400886cf190SKirill Tkhai 		__entry->priority,
401e11da5b4SMel Gorman 		show_reclaim_flags(__entry->reclaim_flags))
402e11da5b4SMel Gorman );
403e11da5b4SMel Gorman 
4049d998b4fSMichal Hocko TRACE_EVENT(mm_vmscan_lru_shrink_active,
4059d998b4fSMichal Hocko 
4069d998b4fSMichal Hocko 	TP_PROTO(int nid, unsigned long nr_taken,
4079d998b4fSMichal Hocko 		unsigned long nr_active, unsigned long nr_deactivated,
4089d998b4fSMichal Hocko 		unsigned long nr_referenced, int priority, int file),
4099d998b4fSMichal Hocko 
4109d998b4fSMichal Hocko 	TP_ARGS(nid, nr_taken, nr_active, nr_deactivated, nr_referenced, priority, file),
4119d998b4fSMichal Hocko 
4129d998b4fSMichal Hocko 	TP_STRUCT__entry(
4139d998b4fSMichal Hocko 		__field(int, nid)
4149d998b4fSMichal Hocko 		__field(unsigned long, nr_taken)
4159d998b4fSMichal Hocko 		__field(unsigned long, nr_active)
4169d998b4fSMichal Hocko 		__field(unsigned long, nr_deactivated)
4179d998b4fSMichal Hocko 		__field(unsigned long, nr_referenced)
4189d998b4fSMichal Hocko 		__field(int, priority)
4199d998b4fSMichal Hocko 		__field(int, reclaim_flags)
4209d998b4fSMichal Hocko 	),
4219d998b4fSMichal Hocko 
4229d998b4fSMichal Hocko 	TP_fast_assign(
4239d998b4fSMichal Hocko 		__entry->nid = nid;
4249d998b4fSMichal Hocko 		__entry->nr_taken = nr_taken;
4259d998b4fSMichal Hocko 		__entry->nr_active = nr_active;
4269d998b4fSMichal Hocko 		__entry->nr_deactivated = nr_deactivated;
4279d998b4fSMichal Hocko 		__entry->nr_referenced = nr_referenced;
4289d998b4fSMichal Hocko 		__entry->priority = priority;
42960b62ff7SYafang Shao 		__entry->reclaim_flags = trace_reclaim_flags(file);
4309d998b4fSMichal Hocko 	),
4319d998b4fSMichal Hocko 
4329d998b4fSMichal Hocko 	TP_printk("nid=%d nr_taken=%ld nr_active=%ld nr_deactivated=%ld nr_referenced=%ld priority=%d flags=%s",
4339d998b4fSMichal Hocko 		__entry->nid,
4349d998b4fSMichal Hocko 		__entry->nr_taken,
4359d998b4fSMichal Hocko 		__entry->nr_active, __entry->nr_deactivated, __entry->nr_referenced,
4369d998b4fSMichal Hocko 		__entry->priority,
4379d998b4fSMichal Hocko 		show_reclaim_flags(__entry->reclaim_flags))
4389d998b4fSMichal Hocko );
4399d998b4fSMichal Hocko 
440132bb8cfSYafang Shao TRACE_EVENT(mm_vmscan_node_reclaim_begin,
441132bb8cfSYafang Shao 
442132bb8cfSYafang Shao 	TP_PROTO(int nid, int order, gfp_t gfp_flags),
443132bb8cfSYafang Shao 
444132bb8cfSYafang Shao 	TP_ARGS(nid, order, gfp_flags),
445132bb8cfSYafang Shao 
446132bb8cfSYafang Shao 	TP_STRUCT__entry(
447132bb8cfSYafang Shao 		__field(int, nid)
448132bb8cfSYafang Shao 		__field(int, order)
449fe573327SVasily Averin 		__field(unsigned long, gfp_flags)
450132bb8cfSYafang Shao 	),
451132bb8cfSYafang Shao 
452132bb8cfSYafang Shao 	TP_fast_assign(
453132bb8cfSYafang Shao 		__entry->nid = nid;
454132bb8cfSYafang Shao 		__entry->order = order;
455fe573327SVasily Averin 		__entry->gfp_flags = (__force unsigned long)gfp_flags;
456132bb8cfSYafang Shao 	),
457132bb8cfSYafang Shao 
458132bb8cfSYafang Shao 	TP_printk("nid=%d order=%d gfp_flags=%s",
459132bb8cfSYafang Shao 		__entry->nid,
460132bb8cfSYafang Shao 		__entry->order,
461132bb8cfSYafang Shao 		show_gfp_flags(__entry->gfp_flags))
462132bb8cfSYafang Shao );
463132bb8cfSYafang Shao 
464132bb8cfSYafang Shao DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_node_reclaim_end,
465132bb8cfSYafang Shao 
466132bb8cfSYafang Shao 	TP_PROTO(unsigned long nr_reclaimed),
467132bb8cfSYafang Shao 
468132bb8cfSYafang Shao 	TP_ARGS(nr_reclaimed)
469132bb8cfSYafang Shao );
470132bb8cfSYafang Shao 
4718cd7c588SMel Gorman TRACE_EVENT(mm_vmscan_throttled,
4728cd7c588SMel Gorman 
4738cd7c588SMel Gorman 	TP_PROTO(int nid, int usec_timeout, int usec_delayed, int reason),
4748cd7c588SMel Gorman 
4758cd7c588SMel Gorman 	TP_ARGS(nid, usec_timeout, usec_delayed, reason),
4768cd7c588SMel Gorman 
4778cd7c588SMel Gorman 	TP_STRUCT__entry(
4788cd7c588SMel Gorman 		__field(int, nid)
4798cd7c588SMel Gorman 		__field(int, usec_timeout)
4808cd7c588SMel Gorman 		__field(int, usec_delayed)
4818cd7c588SMel Gorman 		__field(int, reason)
4828cd7c588SMel Gorman 	),
4838cd7c588SMel Gorman 
4848cd7c588SMel Gorman 	TP_fast_assign(
4858cd7c588SMel Gorman 		__entry->nid = nid;
4868cd7c588SMel Gorman 		__entry->usec_timeout = usec_timeout;
4878cd7c588SMel Gorman 		__entry->usec_delayed = usec_delayed;
4888cd7c588SMel Gorman 		__entry->reason = 1U << reason;
4898cd7c588SMel Gorman 	),
4908cd7c588SMel Gorman 
4918cd7c588SMel Gorman 	TP_printk("nid=%d usec_timeout=%d usect_delayed=%d reason=%s",
4928cd7c588SMel Gorman 		__entry->nid,
4938cd7c588SMel Gorman 		__entry->usec_timeout,
4948cd7c588SMel Gorman 		__entry->usec_delayed,
4958cd7c588SMel Gorman 		show_throttle_flags(__entry->reason))
4968cd7c588SMel Gorman );
49733906bc5SMel Gorman #endif /* _TRACE_VMSCAN_H */
49833906bc5SMel Gorman 
49933906bc5SMel Gorman /* This part must be outside protection */
50033906bc5SMel Gorman #include <trace/define_trace.h>
501