Commit | Line | Data |
---|---|---|
b283666f PW |
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 | TRACE_EVENT(mm_vmscan_kswapd_sleep, | |
8 | ||
9 | TP_PROTO(int nid), | |
10 | ||
11 | TP_ARGS(nid), | |
12 | ||
13 | TP_STRUCT__entry( | |
14 | __field( int, nid ) | |
15 | ), | |
16 | ||
17 | TP_fast_assign( | |
18 | tp_assign(nid, nid); | |
19 | ), | |
20 | ||
21 | TP_printk("nid=%d", __entry->nid) | |
22 | ) | |
23 | ||
24 | TRACE_EVENT(mm_vmscan_kswapd_wake, | |
25 | ||
26 | TP_PROTO(int nid, int order), | |
27 | ||
28 | TP_ARGS(nid, order), | |
29 | ||
30 | TP_STRUCT__entry( | |
31 | __field( int, nid ) | |
32 | __field( int, order ) | |
33 | ), | |
34 | ||
35 | TP_fast_assign( | |
36 | tp_assign(nid, nid); | |
37 | tp_assign(order, order); | |
38 | ), | |
39 | ||
40 | TP_printk("nid=%d order=%d", __entry->nid, __entry->order) | |
41 | ) | |
42 | ||
43 | TRACE_EVENT(mm_vmscan_wakeup_kswapd, | |
44 | ||
45 | TP_PROTO(int nid, int zid, int order), | |
46 | ||
47 | TP_ARGS(nid, zid, order), | |
48 | ||
49 | TP_STRUCT__entry( | |
50 | __field( int, nid ) | |
51 | __field( int, zid ) | |
52 | __field( int, order ) | |
53 | ), | |
54 | ||
55 | TP_fast_assign( | |
56 | tp_assign(nid, nid); | |
57 | tp_assign(zid, zid); | |
58 | tp_assign(order, order); | |
59 | ), | |
60 | ||
61 | TP_printk("nid=%d zid=%d order=%d", | |
62 | __entry->nid, | |
63 | __entry->zid, | |
64 | __entry->order) | |
65 | ) | |
66 | ||
67 | DECLARE_EVENT_CLASS(mm_vmscan_direct_reclaim_begin_template, | |
68 | ||
69 | TP_PROTO(int order, int may_writepage, gfp_t gfp_flags), | |
70 | ||
71 | TP_ARGS(order, may_writepage, gfp_flags), | |
72 | ||
73 | TP_STRUCT__entry( | |
74 | __field( int, order ) | |
75 | __field( int, may_writepage ) | |
76 | __field( gfp_t, gfp_flags ) | |
77 | ), | |
78 | ||
79 | TP_fast_assign( | |
80 | tp_assign(order, order); | |
81 | tp_assign(may_writepage, may_writepage); | |
82 | tp_assign(gfp_flags, gfp_flags); | |
83 | ), | |
84 | ||
85 | TP_printk("order=%d may_writepage=%d gfp_flags=%s", | |
86 | __entry->order, | |
87 | __entry->may_writepage, | |
88 | show_gfp_flags(__entry->gfp_flags)) | |
89 | ) | |
90 | ||
91 | DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_direct_reclaim_begin, | |
92 | ||
93 | TP_PROTO(int order, int may_writepage, gfp_t gfp_flags), | |
94 | ||
95 | TP_ARGS(order, may_writepage, gfp_flags) | |
96 | ) | |
97 | ||
98 | DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_reclaim_begin, | |
99 | ||
100 | TP_PROTO(int order, int may_writepage, gfp_t gfp_flags), | |
101 | ||
102 | TP_ARGS(order, may_writepage, gfp_flags) | |
103 | ) | |
104 | ||
105 | DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_softlimit_reclaim_begin, | |
106 | ||
107 | TP_PROTO(int order, int may_writepage, gfp_t gfp_flags), | |
108 | ||
109 | TP_ARGS(order, may_writepage, gfp_flags) | |
110 | ) | |
111 | ||
112 | DECLARE_EVENT_CLASS(mm_vmscan_direct_reclaim_end_template, | |
113 | ||
114 | TP_PROTO(unsigned long nr_reclaimed), | |
115 | ||
116 | TP_ARGS(nr_reclaimed), | |
117 | ||
118 | TP_STRUCT__entry( | |
119 | __field( unsigned long, nr_reclaimed ) | |
120 | ), | |
121 | ||
122 | TP_fast_assign( | |
123 | tp_assign(nr_reclaimed, nr_reclaimed); | |
124 | ), | |
125 | ||
126 | TP_printk("nr_reclaimed=%lu", __entry->nr_reclaimed) | |
127 | ) | |
128 | ||
129 | DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_direct_reclaim_end, | |
130 | ||
131 | TP_PROTO(unsigned long nr_reclaimed), | |
132 | ||
133 | TP_ARGS(nr_reclaimed) | |
134 | ) | |
135 | ||
136 | DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_memcg_reclaim_end, | |
137 | ||
138 | TP_PROTO(unsigned long nr_reclaimed), | |
139 | ||
140 | TP_ARGS(nr_reclaimed) | |
141 | ) | |
142 | ||
143 | DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_memcg_softlimit_reclaim_end, | |
144 | ||
145 | TP_PROTO(unsigned long nr_reclaimed), | |
146 | ||
147 | TP_ARGS(nr_reclaimed) | |
148 | ) | |
149 | ||
150 | TRACE_EVENT(mm_shrink_slab_start, | |
151 | TP_PROTO(struct shrinker *shr, struct shrink_control *sc, | |
152 | long nr_objects_to_shrink, unsigned long pgs_scanned, | |
153 | unsigned long lru_pgs, unsigned long cache_items, | |
154 | unsigned long long delta, unsigned long total_scan), | |
155 | ||
156 | TP_ARGS(shr, sc, nr_objects_to_shrink, pgs_scanned, lru_pgs, | |
157 | cache_items, delta, total_scan), | |
158 | ||
159 | TP_STRUCT__entry( | |
160 | __field(struct shrinker *, shr) | |
161 | __field(void *, shrink) | |
162 | __field(long, nr_objects_to_shrink) | |
163 | __field(gfp_t, gfp_flags) | |
164 | __field(unsigned long, pgs_scanned) | |
165 | __field(unsigned long, lru_pgs) | |
166 | __field(unsigned long, cache_items) | |
167 | __field(unsigned long long, delta) | |
168 | __field(unsigned long, total_scan) | |
169 | ), | |
170 | ||
171 | TP_fast_assign( | |
172 | tp_assign(shr,shr); | |
173 | tp_assign(shrink, shr->shrink); | |
174 | tp_assign(nr_objects_to_shrink, nr_objects_to_shrink); | |
175 | tp_assign(gfp_flags, sc->gfp_mask); | |
176 | tp_assign(pgs_scanned, pgs_scanned); | |
177 | tp_assign(lru_pgs, lru_pgs); | |
178 | tp_assign(cache_items, cache_items); | |
179 | tp_assign(delta, delta); | |
180 | tp_assign(total_scan, total_scan); | |
181 | ), | |
182 | ||
183 | 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", | |
184 | __entry->shrink, | |
185 | __entry->shr, | |
186 | __entry->nr_objects_to_shrink, | |
187 | show_gfp_flags(__entry->gfp_flags), | |
188 | __entry->pgs_scanned, | |
189 | __entry->lru_pgs, | |
190 | __entry->cache_items, | |
191 | __entry->delta, | |
192 | __entry->total_scan) | |
193 | ) | |
194 | ||
195 | TRACE_EVENT(mm_shrink_slab_end, | |
196 | TP_PROTO(struct shrinker *shr, int shrinker_retval, | |
197 | long unused_scan_cnt, long new_scan_cnt), | |
198 | ||
199 | TP_ARGS(shr, shrinker_retval, unused_scan_cnt, new_scan_cnt), | |
200 | ||
201 | TP_STRUCT__entry( | |
202 | __field(struct shrinker *, shr) | |
203 | __field(void *, shrink) | |
204 | __field(long, unused_scan) | |
205 | __field(long, new_scan) | |
206 | __field(int, retval) | |
207 | __field(long, total_scan) | |
208 | ), | |
209 | ||
210 | TP_fast_assign( | |
211 | tp_assign(shr, shr); | |
212 | tp_assign(shrink, shr->shrink); | |
213 | tp_assign(unused_scan, unused_scan_cnt); | |
214 | tp_assign(new_scan, new_scan_cnt); | |
215 | tp_assign(retval, shrinker_retval); | |
216 | tp_assign(total_scan, new_scan_cnt - unused_scan_cnt); | |
217 | ), | |
218 | ||
219 | TP_printk("%pF %p: unused scan count %ld new scan count %ld total_scan %ld last shrinker return val %d", | |
220 | __entry->shrink, | |
221 | __entry->shr, | |
222 | __entry->unused_scan, | |
223 | __entry->new_scan, | |
224 | __entry->total_scan, | |
225 | __entry->retval) | |
226 | ) | |
227 | ||
228 | DECLARE_EVENT_CLASS(mm_vmscan_lru_isolate_template, | |
229 | ||
230 | TP_PROTO(int order, | |
231 | unsigned long nr_requested, | |
232 | unsigned long nr_scanned, | |
233 | unsigned long nr_taken, | |
234 | unsigned long nr_lumpy_taken, | |
235 | unsigned long nr_lumpy_dirty, | |
236 | unsigned long nr_lumpy_failed, | |
237 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)) | |
238 | isolate_mode_t isolate_mode), | |
239 | #else | |
240 | isolate_mode_t isolate_mode, | |
241 | int file), | |
242 | #endif | |
243 | ||
244 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)) | |
245 | TP_ARGS(order, nr_requested, nr_scanned, nr_taken, nr_lumpy_taken, nr_lumpy_dirty, nr_lumpy_failed, isolate_mode), | |
246 | #else | |
247 | TP_ARGS(order, nr_requested, nr_scanned, nr_taken, nr_lumpy_taken, nr_lumpy_dirty, nr_lumpy_failed, isolate_mode, file), | |
248 | #endif | |
249 | ||
250 | TP_STRUCT__entry( | |
251 | __field(int, order) | |
252 | __field(unsigned long, nr_requested) | |
253 | __field(unsigned long, nr_scanned) | |
254 | __field(unsigned long, nr_taken) | |
255 | __field(unsigned long, nr_lumpy_taken) | |
256 | __field(unsigned long, nr_lumpy_dirty) | |
257 | __field(unsigned long, nr_lumpy_failed) | |
258 | __field(isolate_mode_t, isolate_mode) | |
259 | #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) | |
260 | __field(int, file) | |
261 | #endif | |
262 | ), | |
263 | ||
264 | TP_fast_assign( | |
265 | tp_assign(order, order); | |
266 | tp_assign(nr_requested, nr_requested); | |
267 | tp_assign(nr_scanned, nr_scanned); | |
268 | tp_assign(nr_taken, nr_taken); | |
269 | tp_assign(nr_lumpy_taken, nr_lumpy_taken); | |
270 | tp_assign(nr_lumpy_dirty, nr_lumpy_dirty); | |
271 | tp_assign(nr_lumpy_failed, nr_lumpy_failed); | |
272 | tp_assign(isolate_mode, isolate_mode); | |
273 | #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) | |
274 | tp_assign(file, file); | |
275 | #endif | |
276 | ), | |
277 | ||
278 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)) | |
279 | TP_printk("isolate_mode=%d order=%d nr_requested=%lu nr_scanned=%lu nr_taken=%lu contig_taken=%lu contig_dirty=%lu contig_failed=%lu", | |
280 | #else | |
281 | TP_printk("isolate_mode=%d order=%d nr_requested=%lu nr_scanned=%lu nr_taken=%lu contig_taken=%lu contig_dirty=%lu contig_failed=%lu file=%d", | |
282 | #endif | |
283 | __entry->isolate_mode, | |
284 | __entry->order, | |
285 | __entry->nr_requested, | |
286 | __entry->nr_scanned, | |
287 | __entry->nr_taken, | |
288 | __entry->nr_lumpy_taken, | |
289 | __entry->nr_lumpy_dirty, | |
290 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)) | |
291 | __entry->nr_lumpy_failed) | |
292 | #else | |
293 | __entry->nr_lumpy_failed, | |
294 | __entry->file) | |
295 | #endif | |
296 | ) | |
297 | ||
298 | 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 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)) | |
305 | unsigned long nr_lumpy_taken, | |
306 | unsigned long nr_lumpy_dirty, | |
307 | unsigned long nr_lumpy_failed, | |
308 | #endif | |
309 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)) | |
310 | isolate_mode_t isolate_mode), | |
311 | #else | |
312 | isolate_mode_t isolate_mode, | |
313 | int file), | |
314 | #endif | |
315 | ||
316 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)) | |
317 | TP_ARGS(order, nr_requested, nr_scanned, nr_taken, nr_lumpy_taken, nr_lumpy_dirty, nr_lumpy_failed, isolate_mode) | |
318 | #elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)) | |
319 | TP_ARGS(order, nr_requested, nr_scanned, nr_taken, nr_lumpy_taken, nr_lumpy_dirty, nr_lumpy_failed, isolate_mode, file) | |
320 | #else | |
321 | TP_ARGS(order, nr_requested, nr_scanned, nr_taken, isolate_mode, file) | |
322 | #endif | |
323 | ||
324 | ) | |
325 | ||
326 | DEFINE_EVENT(mm_vmscan_lru_isolate_template, mm_vmscan_memcg_isolate, | |
327 | ||
328 | TP_PROTO(int order, | |
329 | unsigned long nr_requested, | |
330 | unsigned long nr_scanned, | |
331 | unsigned long nr_taken, | |
332 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)) | |
333 | unsigned long nr_lumpy_taken, | |
334 | unsigned long nr_lumpy_dirty, | |
335 | unsigned long nr_lumpy_failed, | |
336 | #endif | |
337 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)) | |
338 | isolate_mode_t isolate_mode), | |
339 | #else | |
340 | isolate_mode_t isolate_mode, | |
341 | int file), | |
342 | #endif | |
343 | ||
344 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)) | |
345 | TP_ARGS(order, nr_requested, nr_scanned, nr_taken, nr_lumpy_taken, nr_lumpy_dirty, nr_lumpy_failed, isolate_mode) | |
346 | #elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)) | |
347 | TP_ARGS(order, nr_requested, nr_scanned, nr_taken, nr_lumpy_taken, nr_lumpy_dirty, nr_lumpy_failed, isolate_mode, file) | |
348 | #else | |
349 | TP_ARGS(order, nr_requested, nr_scanned, nr_taken, isolate_mode, file) | |
350 | #endif | |
351 | ||
352 | ) | |
353 | ||
354 | TRACE_EVENT(mm_vmscan_writepage, | |
355 | ||
356 | TP_PROTO(struct page *page, | |
357 | int reclaim_flags), | |
358 | ||
359 | TP_ARGS(page, reclaim_flags), | |
360 | ||
361 | TP_STRUCT__entry( | |
362 | __field(struct page *, page) | |
363 | __field(int, reclaim_flags) | |
364 | ), | |
365 | ||
366 | TP_fast_assign( | |
367 | tp_assign(page, page); | |
368 | tp_assign(reclaim_flags, reclaim_flags); | |
369 | ), | |
370 | ||
371 | TP_printk("page=%p pfn=%lu flags=%s", | |
372 | __entry->page, | |
373 | page_to_pfn(__entry->page), | |
374 | show_reclaim_flags(__entry->reclaim_flags)) | |
375 | ) | |
376 | ||
377 | TRACE_EVENT(mm_vmscan_lru_shrink_inactive, | |
378 | ||
379 | TP_PROTO(int nid, int zid, | |
380 | unsigned long nr_scanned, unsigned long nr_reclaimed, | |
381 | int priority, int reclaim_flags), | |
382 | ||
383 | TP_ARGS(nid, zid, nr_scanned, nr_reclaimed, priority, reclaim_flags), | |
384 | ||
385 | TP_STRUCT__entry( | |
386 | __field(int, nid) | |
387 | __field(int, zid) | |
388 | __field(unsigned long, nr_scanned) | |
389 | __field(unsigned long, nr_reclaimed) | |
390 | __field(int, priority) | |
391 | __field(int, reclaim_flags) | |
392 | ), | |
393 | ||
394 | TP_fast_assign( | |
395 | tp_assign(nid, nid); | |
396 | tp_assign(zid, zid); | |
397 | tp_assign(nr_scanned, nr_scanned); | |
398 | tp_assign(nr_reclaimed, nr_reclaimed); | |
399 | tp_assign(priority, priority); | |
400 | tp_assign(reclaim_flags, reclaim_flags); | |
401 | ), | |
402 | ||
403 | TP_printk("nid=%d zid=%d nr_scanned=%ld nr_reclaimed=%ld priority=%d flags=%s", | |
404 | __entry->nid, __entry->zid, | |
405 | __entry->nr_scanned, __entry->nr_reclaimed, | |
406 | __entry->priority, | |
407 | show_reclaim_flags(__entry->reclaim_flags)) | |
408 | ) | |
409 | ||
410 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)) | |
411 | ||
412 | TRACE_EVENT(replace_swap_token, | |
413 | TP_PROTO(struct mm_struct *old_mm, | |
414 | struct mm_struct *new_mm), | |
415 | ||
416 | TP_ARGS(old_mm, new_mm), | |
417 | ||
418 | TP_STRUCT__entry( | |
419 | __field(struct mm_struct*, old_mm) | |
420 | __field(unsigned int, old_prio) | |
421 | __field(struct mm_struct*, new_mm) | |
422 | __field(unsigned int, new_prio) | |
423 | ), | |
424 | ||
425 | TP_fast_assign( | |
426 | tp_assign(old_mm, old_mm); | |
427 | tp_assign(old_prio, old_mm ? old_mm->token_priority : 0); | |
428 | tp_assign(new_mm, new_mm); | |
429 | tp_assign(new_prio, new_mm->token_priority); | |
430 | ), | |
431 | ||
432 | TP_printk("old_token_mm=%p old_prio=%u new_token_mm=%p new_prio=%u", | |
433 | __entry->old_mm, __entry->old_prio, | |
434 | __entry->new_mm, __entry->new_prio) | |
435 | ) | |
436 | ||
437 | DECLARE_EVENT_CLASS(put_swap_token_template, | |
438 | TP_PROTO(struct mm_struct *swap_token_mm), | |
439 | ||
440 | TP_ARGS(swap_token_mm), | |
441 | ||
442 | TP_STRUCT__entry( | |
443 | __field(struct mm_struct*, swap_token_mm) | |
444 | ), | |
445 | ||
446 | TP_fast_assign( | |
447 | tp_assign(swap_token_mm, swap_token_mm); | |
448 | ), | |
449 | ||
450 | TP_printk("token_mm=%p", __entry->swap_token_mm) | |
451 | ) | |
452 | ||
453 | DEFINE_EVENT(put_swap_token_template, put_swap_token, | |
454 | TP_PROTO(struct mm_struct *swap_token_mm), | |
455 | TP_ARGS(swap_token_mm) | |
456 | ) | |
457 | ||
458 | DEFINE_EVENT_CONDITION(put_swap_token_template, disable_swap_token, | |
459 | TP_PROTO(struct mm_struct *swap_token_mm), | |
460 | TP_ARGS(swap_token_mm), | |
461 | TP_CONDITION(swap_token_mm != NULL) | |
462 | ) | |
463 | ||
464 | TRACE_EVENT_CONDITION(update_swap_token_priority, | |
465 | TP_PROTO(struct mm_struct *mm, | |
466 | unsigned int old_prio, | |
467 | struct mm_struct *swap_token_mm), | |
468 | ||
469 | TP_ARGS(mm, old_prio, swap_token_mm), | |
470 | ||
471 | TP_CONDITION(mm->token_priority != old_prio), | |
472 | ||
473 | TP_STRUCT__entry( | |
474 | __field(struct mm_struct*, mm) | |
475 | __field(unsigned int, old_prio) | |
476 | __field(unsigned int, new_prio) | |
477 | __field(struct mm_struct*, swap_token_mm) | |
478 | __field(unsigned int, swap_token_prio) | |
479 | ), | |
480 | ||
481 | TP_fast_assign( | |
482 | tp_assign(mm, mm); | |
483 | tp_assign(old_prio, old_prio); | |
484 | tp_assign(new_prio, mm->token_priority); | |
485 | tp_assign(swap_token_mm, swap_token_mm); | |
486 | tp_assign(swap_token_prio, swap_token_mm ? swap_token_mm->token_priority : 0); | |
487 | ), | |
488 | ||
489 | TP_printk("mm=%p old_prio=%u new_prio=%u swap_token_mm=%p token_prio=%u", | |
490 | __entry->mm, __entry->old_prio, __entry->new_prio, | |
491 | __entry->swap_token_mm, __entry->swap_token_prio) | |
492 | ) | |
493 | ||
494 | #endif | |
495 | ||
496 | #endif /* _TRACE_VMSCAN_H */ | |
497 | ||
498 | /* This part must be outside protection */ | |
499 | #include "../../../probes/define_trace.h" |