Branch data Line data Source code
1 : : #undef TRACE_SYSTEM
2 : : #define TRACE_SYSTEM vmscan
3 : :
4 : : #if !defined(_TRACE_VMSCAN_H) || defined(TRACE_HEADER_MULTI_READ)
5 : : #define _TRACE_VMSCAN_H
6 : :
7 : : #include <linux/types.h>
8 : : #include <linux/tracepoint.h>
9 : : #include <linux/mm.h>
10 : : #include <linux/memcontrol.h>
11 : : #include <trace/events/gfpflags.h>
12 : :
13 : : #define RECLAIM_WB_ANON 0x0001u
14 : : #define RECLAIM_WB_FILE 0x0002u
15 : : #define RECLAIM_WB_MIXED 0x0010u
16 : : #define RECLAIM_WB_SYNC 0x0004u /* Unused, all reclaim async */
17 : : #define RECLAIM_WB_ASYNC 0x0008u
18 : :
19 : : #define show_reclaim_flags(flags) \
20 : : (flags) ? __print_flags(flags, "|", \
21 : : {RECLAIM_WB_ANON, "RECLAIM_WB_ANON"}, \
22 : : {RECLAIM_WB_FILE, "RECLAIM_WB_FILE"}, \
23 : : {RECLAIM_WB_MIXED, "RECLAIM_WB_MIXED"}, \
24 : : {RECLAIM_WB_SYNC, "RECLAIM_WB_SYNC"}, \
25 : : {RECLAIM_WB_ASYNC, "RECLAIM_WB_ASYNC"} \
26 : : ) : "RECLAIM_WB_NONE"
27 : :
28 : : #define trace_reclaim_flags(page) ( \
29 : : (page_is_file_cache(page) ? RECLAIM_WB_FILE : RECLAIM_WB_ANON) | \
30 : : (RECLAIM_WB_ASYNC) \
31 : : )
32 : :
33 : : #define trace_shrink_flags(file) \
34 : : ( \
35 : : (file ? RECLAIM_WB_FILE : RECLAIM_WB_ANON) | \
36 : : (RECLAIM_WB_ASYNC) \
37 : : )
38 : :
39 [ - + # # ]: 25 : TRACE_EVENT(mm_vmscan_kswapd_sleep,
[ # # ]
[ # # # # ]
[ # # # # ]
[ # # ][ # # ]
[ # # ]
40 : :
41 : : TP_PROTO(int nid),
42 : :
43 : : TP_ARGS(nid),
44 : :
45 : : TP_STRUCT__entry(
46 : : __field( int, nid )
47 : : ),
48 : :
49 : : TP_fast_assign(
50 : : __entry->nid = nid;
51 : : ),
52 : :
53 : : TP_printk("nid=%d", __entry->nid)
54 : : );
55 : :
56 [ - + # # ]: 13209 : TRACE_EVENT(mm_vmscan_kswapd_wake,
[ # # ]
[ # # # # ]
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
57 : :
58 : : TP_PROTO(int nid, int order),
59 : :
60 : : TP_ARGS(nid, order),
61 : :
62 : : TP_STRUCT__entry(
63 : : __field( int, nid )
64 : : __field( int, order )
65 : : ),
66 : :
67 : : TP_fast_assign(
68 : : __entry->nid = nid;
69 : : __entry->order = order;
70 : : ),
71 : :
72 : : TP_printk("nid=%d order=%d", __entry->nid, __entry->order)
73 : : );
74 : :
75 [ - + # # ]: 241 : TRACE_EVENT(mm_vmscan_wakeup_kswapd,
[ # # ]
[ # # # # ]
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
76 : :
77 : : TP_PROTO(int nid, int zid, int order),
78 : :
79 : : TP_ARGS(nid, zid, order),
80 : :
81 : : TP_STRUCT__entry(
82 : : __field( int, nid )
83 : : __field( int, zid )
84 : : __field( int, order )
85 : : ),
86 : :
87 : : TP_fast_assign(
88 : : __entry->nid = nid;
89 : : __entry->zid = zid;
90 : : __entry->order = order;
91 : : ),
92 : :
93 : : TP_printk("nid=%d zid=%d order=%d",
94 : : __entry->nid,
95 : : __entry->zid,
96 : : __entry->order)
97 : : );
98 : :
99 [ # # # # ]: 0 : DECLARE_EVENT_CLASS(mm_vmscan_direct_reclaim_begin_template,
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
100 : :
101 : : TP_PROTO(int order, int may_writepage, gfp_t gfp_flags),
102 : :
103 : : TP_ARGS(order, may_writepage, gfp_flags),
104 : :
105 : : TP_STRUCT__entry(
106 : : __field( int, order )
107 : : __field( int, may_writepage )
108 : : __field( gfp_t, gfp_flags )
109 : : ),
110 : :
111 : : TP_fast_assign(
112 : : __entry->order = order;
113 : : __entry->may_writepage = may_writepage;
114 : : __entry->gfp_flags = gfp_flags;
115 : : ),
116 : :
117 : : TP_printk("order=%d may_writepage=%d gfp_flags=%s",
118 : : __entry->order,
119 : : __entry->may_writepage,
120 : : show_gfp_flags(__entry->gfp_flags))
121 : : );
122 : :
123 [ - + # # ]: 37053 : DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_direct_reclaim_begin,
[ # # ]
124 : :
125 : : TP_PROTO(int order, int may_writepage, gfp_t gfp_flags),
126 : :
127 : : TP_ARGS(order, may_writepage, gfp_flags)
128 : : );
129 : :
130 : : DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_reclaim_begin,
131 : :
132 : : TP_PROTO(int order, int may_writepage, gfp_t gfp_flags),
133 : :
134 : : TP_ARGS(order, may_writepage, gfp_flags)
135 : : );
136 : :
137 : : DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_softlimit_reclaim_begin,
138 : :
139 : : TP_PROTO(int order, int may_writepage, gfp_t gfp_flags),
140 : :
141 : : TP_ARGS(order, may_writepage, gfp_flags)
142 : : );
143 : :
144 [ # # # # ]: 0 : DECLARE_EVENT_CLASS(mm_vmscan_direct_reclaim_end_template,
[ # # # # ]
[ # # ][ # # ]
[ # # ]
145 : :
146 : : TP_PROTO(unsigned long nr_reclaimed),
147 : :
148 : : TP_ARGS(nr_reclaimed),
149 : :
150 : : TP_STRUCT__entry(
151 : : __field( unsigned long, nr_reclaimed )
152 : : ),
153 : :
154 : : TP_fast_assign(
155 : : __entry->nr_reclaimed = nr_reclaimed;
156 : : ),
157 : :
158 : : TP_printk("nr_reclaimed=%lu", __entry->nr_reclaimed)
159 : : );
160 : :
161 [ - + # # ]: 37053 : DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_direct_reclaim_end,
[ # # ]
162 : :
163 : : TP_PROTO(unsigned long nr_reclaimed),
164 : :
165 : : TP_ARGS(nr_reclaimed)
166 : : );
167 : :
168 : : DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_memcg_reclaim_end,
169 : :
170 : : TP_PROTO(unsigned long nr_reclaimed),
171 : :
172 : : TP_ARGS(nr_reclaimed)
173 : : );
174 : :
175 : : DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_memcg_softlimit_reclaim_end,
176 : :
177 : : TP_PROTO(unsigned long nr_reclaimed),
178 : :
179 : : TP_ARGS(nr_reclaimed)
180 : : );
181 : :
182 [ - + # # ]: 2884120 : TRACE_EVENT(mm_shrink_slab_start,
[ # # ]
[ # # # # ]
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
183 : : TP_PROTO(struct shrinker *shr, struct shrink_control *sc,
184 : : long nr_objects_to_shrink, unsigned long pgs_scanned,
185 : : unsigned long lru_pgs, unsigned long cache_items,
186 : : unsigned long long delta, unsigned long total_scan),
187 : :
188 : : TP_ARGS(shr, sc, nr_objects_to_shrink, pgs_scanned, lru_pgs,
189 : : cache_items, delta, total_scan),
190 : :
191 : : TP_STRUCT__entry(
192 : : __field(struct shrinker *, shr)
193 : : __field(void *, shrink)
194 : : __field(long, nr_objects_to_shrink)
195 : : __field(gfp_t, gfp_flags)
196 : : __field(unsigned long, pgs_scanned)
197 : : __field(unsigned long, lru_pgs)
198 : : __field(unsigned long, cache_items)
199 : : __field(unsigned long long, delta)
200 : : __field(unsigned long, total_scan)
201 : : ),
202 : :
203 : : TP_fast_assign(
204 : : __entry->shr = shr;
205 : : __entry->shrink = shr->scan_objects;
206 : : __entry->nr_objects_to_shrink = nr_objects_to_shrink;
207 : : __entry->gfp_flags = sc->gfp_mask;
208 : : __entry->pgs_scanned = pgs_scanned;
209 : : __entry->lru_pgs = lru_pgs;
210 : : __entry->cache_items = cache_items;
211 : : __entry->delta = delta;
212 : : __entry->total_scan = total_scan;
213 : : ),
214 : :
215 : : TP_printk("%pF %p: objects to shrink %ld gfp_flags %s pgs_scanned %ld lru_pgs %ld cache items %ld delta %lld total_scan %ld",
216 : : __entry->shrink,
217 : : __entry->shr,
218 : : __entry->nr_objects_to_shrink,
219 : : show_gfp_flags(__entry->gfp_flags),
220 : : __entry->pgs_scanned,
221 : : __entry->lru_pgs,
222 : : __entry->cache_items,
223 : : __entry->delta,
224 : : __entry->total_scan)
225 : : );
226 : :
227 [ - + # # ]: 2884442 : TRACE_EVENT(mm_shrink_slab_end,
[ # # ]
[ # # # # ]
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
228 : : TP_PROTO(struct shrinker *shr, int shrinker_retval,
229 : : long unused_scan_cnt, long new_scan_cnt),
230 : :
231 : : TP_ARGS(shr, shrinker_retval, unused_scan_cnt, new_scan_cnt),
232 : :
233 : : TP_STRUCT__entry(
234 : : __field(struct shrinker *, shr)
235 : : __field(void *, shrink)
236 : : __field(long, unused_scan)
237 : : __field(long, new_scan)
238 : : __field(int, retval)
239 : : __field(long, total_scan)
240 : : ),
241 : :
242 : : TP_fast_assign(
243 : : __entry->shr = shr;
244 : : __entry->shrink = shr->scan_objects;
245 : : __entry->unused_scan = unused_scan_cnt;
246 : : __entry->new_scan = new_scan_cnt;
247 : : __entry->retval = shrinker_retval;
248 : : __entry->total_scan = new_scan_cnt - unused_scan_cnt;
249 : : ),
250 : :
251 : : TP_printk("%pF %p: unused scan count %ld new scan count %ld total_scan %ld last shrinker return val %d",
252 : : __entry->shrink,
253 : : __entry->shr,
254 : : __entry->unused_scan,
255 : : __entry->new_scan,
256 : : __entry->total_scan,
257 : : __entry->retval)
258 : : );
259 : :
260 [ # # # # ]: 0 : DECLARE_EVENT_CLASS(mm_vmscan_lru_isolate_template,
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
261 : :
262 : : TP_PROTO(int order,
263 : : unsigned long nr_requested,
264 : : unsigned long nr_scanned,
265 : : unsigned long nr_taken,
266 : : isolate_mode_t isolate_mode,
267 : : int file),
268 : :
269 : : TP_ARGS(order, nr_requested, nr_scanned, nr_taken, isolate_mode, file),
270 : :
271 : : TP_STRUCT__entry(
272 : : __field(int, order)
273 : : __field(unsigned long, nr_requested)
274 : : __field(unsigned long, nr_scanned)
275 : : __field(unsigned long, nr_taken)
276 : : __field(isolate_mode_t, isolate_mode)
277 : : __field(int, file)
278 : : ),
279 : :
280 : : TP_fast_assign(
281 : : __entry->order = order;
282 : : __entry->nr_requested = nr_requested;
283 : : __entry->nr_scanned = nr_scanned;
284 : : __entry->nr_taken = nr_taken;
285 : : __entry->isolate_mode = isolate_mode;
286 : : __entry->file = file;
287 : : ),
288 : :
289 : : TP_printk("isolate_mode=%d order=%d nr_requested=%lu nr_scanned=%lu nr_taken=%lu file=%d",
290 : : __entry->isolate_mode,
291 : : __entry->order,
292 : : __entry->nr_requested,
293 : : __entry->nr_scanned,
294 : : __entry->nr_taken,
295 : : __entry->file)
296 : : );
297 : :
298 [ - + # # ]: 210221 : DEFINE_EVENT(mm_vmscan_lru_isolate_template, mm_vmscan_lru_isolate,
[ # # ]
299 : :
300 : : TP_PROTO(int order,
301 : : unsigned long nr_requested,
302 : : unsigned long nr_scanned,
303 : : unsigned long nr_taken,
304 : : isolate_mode_t isolate_mode,
305 : : int file),
306 : :
307 : : TP_ARGS(order, nr_requested, nr_scanned, nr_taken, isolate_mode, file)
308 : :
309 : : );
310 : :
311 : : DEFINE_EVENT(mm_vmscan_lru_isolate_template, mm_vmscan_memcg_isolate,
312 : :
313 : : TP_PROTO(int order,
314 : : unsigned long nr_requested,
315 : : unsigned long nr_scanned,
316 : : unsigned long nr_taken,
317 : : isolate_mode_t isolate_mode,
318 : : int file),
319 : :
320 : : TP_ARGS(order, nr_requested, nr_scanned, nr_taken, isolate_mode, file)
321 : :
322 : : );
323 : :
324 [ - + # # ]: 29 : TRACE_EVENT(mm_vmscan_writepage,
[ # # ]
[ # # # # ]
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
325 : :
326 : : TP_PROTO(struct page *page,
327 : : int reclaim_flags),
328 : :
329 : : TP_ARGS(page, reclaim_flags),
330 : :
331 : : TP_STRUCT__entry(
332 : : __field(struct page *, page)
333 : : __field(int, reclaim_flags)
334 : : ),
335 : :
336 : : TP_fast_assign(
337 : : __entry->page = page;
338 : : __entry->reclaim_flags = reclaim_flags;
339 : : ),
340 : :
341 : : TP_printk("page=%p pfn=%lu flags=%s",
342 : : __entry->page,
343 : : page_to_pfn(__entry->page),
344 : : show_reclaim_flags(__entry->reclaim_flags))
345 : : );
346 : :
347 [ - + # # ]: 8242 : TRACE_EVENT(mm_vmscan_lru_shrink_inactive,
[ # # ]
[ # # # # ]
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
348 : :
349 : : TP_PROTO(int nid, int zid,
350 : : unsigned long nr_scanned, unsigned long nr_reclaimed,
351 : : int priority, int reclaim_flags),
352 : :
353 : : TP_ARGS(nid, zid, nr_scanned, nr_reclaimed, priority, reclaim_flags),
354 : :
355 : : TP_STRUCT__entry(
356 : : __field(int, nid)
357 : : __field(int, zid)
358 : : __field(unsigned long, nr_scanned)
359 : : __field(unsigned long, nr_reclaimed)
360 : : __field(int, priority)
361 : : __field(int, reclaim_flags)
362 : : ),
363 : :
364 : : TP_fast_assign(
365 : : __entry->nid = nid;
366 : : __entry->zid = zid;
367 : : __entry->nr_scanned = nr_scanned;
368 : : __entry->nr_reclaimed = nr_reclaimed;
369 : : __entry->priority = priority;
370 : : __entry->reclaim_flags = reclaim_flags;
371 : : ),
372 : :
373 : : TP_printk("nid=%d zid=%d nr_scanned=%ld nr_reclaimed=%ld priority=%d flags=%s",
374 : : __entry->nid, __entry->zid,
375 : : __entry->nr_scanned, __entry->nr_reclaimed,
376 : : __entry->priority,
377 : : show_reclaim_flags(__entry->reclaim_flags))
378 : : );
379 : :
380 : : #endif /* _TRACE_VMSCAN_H */
381 : :
382 : : /* This part must be outside protection */
383 : : #include <trace/define_trace.h>
|