| .. | .. |
|---|
| 27 | 27 | {RECLAIM_WB_ASYNC, "RECLAIM_WB_ASYNC"} \ |
|---|
| 28 | 28 | ) : "RECLAIM_WB_NONE" |
|---|
| 29 | 29 | |
|---|
| 30 | | -#define trace_reclaim_flags(page) ( \ |
|---|
| 31 | | - (page_is_file_cache(page) ? RECLAIM_WB_FILE : RECLAIM_WB_ANON) | \ |
|---|
| 30 | +#define trace_reclaim_flags(file) ( \ |
|---|
| 31 | + (file ? RECLAIM_WB_FILE : RECLAIM_WB_ANON) | \ |
|---|
| 32 | 32 | (RECLAIM_WB_ASYNC) \ |
|---|
| 33 | | - ) |
|---|
| 34 | | - |
|---|
| 35 | | -#define trace_shrink_flags(file) \ |
|---|
| 36 | | - ( \ |
|---|
| 37 | | - (file ? RECLAIM_WB_FILE : RECLAIM_WB_ANON) | \ |
|---|
| 38 | | - (RECLAIM_WB_ASYNC) \ |
|---|
| 39 | 33 | ) |
|---|
| 40 | 34 | |
|---|
| 41 | 35 | TRACE_EVENT(mm_vmscan_kswapd_sleep, |
|---|
| .. | .. |
|---|
| 73 | 67 | __entry->order = order; |
|---|
| 74 | 68 | ), |
|---|
| 75 | 69 | |
|---|
| 76 | | - TP_printk("nid=%d zid=%d order=%d", __entry->nid, __entry->zid, __entry->order) |
|---|
| 70 | + TP_printk("nid=%d order=%d", |
|---|
| 71 | + __entry->nid, |
|---|
| 72 | + __entry->order) |
|---|
| 77 | 73 | ); |
|---|
| 78 | 74 | |
|---|
| 79 | 75 | TRACE_EVENT(mm_vmscan_wakeup_kswapd, |
|---|
| .. | .. |
|---|
| 96 | 92 | __entry->gfp_flags = gfp_flags; |
|---|
| 97 | 93 | ), |
|---|
| 98 | 94 | |
|---|
| 99 | | - TP_printk("nid=%d zid=%d order=%d gfp_flags=%s", |
|---|
| 95 | + TP_printk("nid=%d order=%d gfp_flags=%s", |
|---|
| 100 | 96 | __entry->nid, |
|---|
| 101 | | - __entry->zid, |
|---|
| 102 | 97 | __entry->order, |
|---|
| 103 | 98 | show_gfp_flags(__entry->gfp_flags)) |
|---|
| 104 | 99 | ); |
|---|
| 105 | 100 | |
|---|
| 106 | 101 | DECLARE_EVENT_CLASS(mm_vmscan_direct_reclaim_begin_template, |
|---|
| 107 | 102 | |
|---|
| 108 | | - TP_PROTO(int order, int may_writepage, gfp_t gfp_flags, int classzone_idx), |
|---|
| 103 | + TP_PROTO(int order, gfp_t gfp_flags), |
|---|
| 109 | 104 | |
|---|
| 110 | | - TP_ARGS(order, may_writepage, gfp_flags, classzone_idx), |
|---|
| 105 | + TP_ARGS(order, gfp_flags), |
|---|
| 111 | 106 | |
|---|
| 112 | 107 | TP_STRUCT__entry( |
|---|
| 113 | 108 | __field( int, order ) |
|---|
| 114 | | - __field( int, may_writepage ) |
|---|
| 115 | 109 | __field( gfp_t, gfp_flags ) |
|---|
| 116 | | - __field( int, classzone_idx ) |
|---|
| 117 | 110 | ), |
|---|
| 118 | 111 | |
|---|
| 119 | 112 | TP_fast_assign( |
|---|
| 120 | 113 | __entry->order = order; |
|---|
| 121 | | - __entry->may_writepage = may_writepage; |
|---|
| 122 | 114 | __entry->gfp_flags = gfp_flags; |
|---|
| 123 | | - __entry->classzone_idx = classzone_idx; |
|---|
| 124 | 115 | ), |
|---|
| 125 | 116 | |
|---|
| 126 | | - TP_printk("order=%d may_writepage=%d gfp_flags=%s classzone_idx=%d", |
|---|
| 117 | + TP_printk("order=%d gfp_flags=%s", |
|---|
| 127 | 118 | __entry->order, |
|---|
| 128 | | - __entry->may_writepage, |
|---|
| 129 | | - show_gfp_flags(__entry->gfp_flags), |
|---|
| 130 | | - __entry->classzone_idx) |
|---|
| 119 | + show_gfp_flags(__entry->gfp_flags)) |
|---|
| 131 | 120 | ); |
|---|
| 132 | 121 | |
|---|
| 133 | 122 | DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_direct_reclaim_begin, |
|---|
| 134 | 123 | |
|---|
| 135 | | - TP_PROTO(int order, int may_writepage, gfp_t gfp_flags, int classzone_idx), |
|---|
| 124 | + TP_PROTO(int order, gfp_t gfp_flags), |
|---|
| 136 | 125 | |
|---|
| 137 | | - TP_ARGS(order, may_writepage, gfp_flags, classzone_idx) |
|---|
| 126 | + TP_ARGS(order, gfp_flags) |
|---|
| 138 | 127 | ); |
|---|
| 139 | 128 | |
|---|
| 140 | 129 | #ifdef CONFIG_MEMCG |
|---|
| 141 | 130 | DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_reclaim_begin, |
|---|
| 142 | 131 | |
|---|
| 143 | | - TP_PROTO(int order, int may_writepage, gfp_t gfp_flags, int classzone_idx), |
|---|
| 132 | + TP_PROTO(int order, gfp_t gfp_flags), |
|---|
| 144 | 133 | |
|---|
| 145 | | - TP_ARGS(order, may_writepage, gfp_flags, classzone_idx) |
|---|
| 134 | + TP_ARGS(order, gfp_flags) |
|---|
| 146 | 135 | ); |
|---|
| 147 | 136 | |
|---|
| 148 | 137 | DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_softlimit_reclaim_begin, |
|---|
| 149 | 138 | |
|---|
| 150 | | - TP_PROTO(int order, int may_writepage, gfp_t gfp_flags, int classzone_idx), |
|---|
| 139 | + TP_PROTO(int order, gfp_t gfp_flags), |
|---|
| 151 | 140 | |
|---|
| 152 | | - TP_ARGS(order, may_writepage, gfp_flags, classzone_idx) |
|---|
| 141 | + TP_ARGS(order, gfp_flags) |
|---|
| 153 | 142 | ); |
|---|
| 154 | 143 | #endif /* CONFIG_MEMCG */ |
|---|
| 155 | 144 | |
|---|
| .. | .. |
|---|
| 226 | 215 | __entry->priority = priority; |
|---|
| 227 | 216 | ), |
|---|
| 228 | 217 | |
|---|
| 229 | | - TP_printk("%pF %p: nid: %d objects to shrink %ld gfp_flags %s cache items %ld delta %lld total_scan %ld priority %d", |
|---|
| 218 | + TP_printk("%pS %p: nid: %d objects to shrink %ld gfp_flags %s cache items %ld delta %lld total_scan %ld priority %d", |
|---|
| 230 | 219 | __entry->shrink, |
|---|
| 231 | 220 | __entry->shr, |
|---|
| 232 | 221 | __entry->nid, |
|---|
| .. | .. |
|---|
| 265 | 254 | __entry->total_scan = total_scan; |
|---|
| 266 | 255 | ), |
|---|
| 267 | 256 | |
|---|
| 268 | | - TP_printk("%pF %p: nid: %d unused scan count %ld new scan count %ld total_scan %ld last shrinker return val %d", |
|---|
| 257 | + TP_printk("%pS %p: nid: %d unused scan count %ld new scan count %ld total_scan %ld last shrinker return val %d", |
|---|
| 269 | 258 | __entry->shrink, |
|---|
| 270 | 259 | __entry->shr, |
|---|
| 271 | 260 | __entry->nid, |
|---|
| .. | .. |
|---|
| 276 | 265 | ); |
|---|
| 277 | 266 | |
|---|
| 278 | 267 | TRACE_EVENT(mm_vmscan_lru_isolate, |
|---|
| 279 | | - TP_PROTO(int classzone_idx, |
|---|
| 268 | + TP_PROTO(int highest_zoneidx, |
|---|
| 280 | 269 | int order, |
|---|
| 281 | 270 | unsigned long nr_requested, |
|---|
| 282 | 271 | unsigned long nr_scanned, |
|---|
| .. | .. |
|---|
| 285 | 274 | isolate_mode_t isolate_mode, |
|---|
| 286 | 275 | int lru), |
|---|
| 287 | 276 | |
|---|
| 288 | | - TP_ARGS(classzone_idx, order, nr_requested, nr_scanned, nr_skipped, nr_taken, isolate_mode, lru), |
|---|
| 277 | + TP_ARGS(highest_zoneidx, order, nr_requested, nr_scanned, nr_skipped, nr_taken, isolate_mode, lru), |
|---|
| 289 | 278 | |
|---|
| 290 | 279 | TP_STRUCT__entry( |
|---|
| 291 | | - __field(int, classzone_idx) |
|---|
| 280 | + __field(int, highest_zoneidx) |
|---|
| 292 | 281 | __field(int, order) |
|---|
| 293 | 282 | __field(unsigned long, nr_requested) |
|---|
| 294 | 283 | __field(unsigned long, nr_scanned) |
|---|
| 295 | 284 | __field(unsigned long, nr_skipped) |
|---|
| 296 | 285 | __field(unsigned long, nr_taken) |
|---|
| 297 | | - __field(isolate_mode_t, isolate_mode) |
|---|
| 286 | + __field(unsigned int, isolate_mode) |
|---|
| 298 | 287 | __field(int, lru) |
|---|
| 299 | 288 | ), |
|---|
| 300 | 289 | |
|---|
| 301 | 290 | TP_fast_assign( |
|---|
| 302 | | - __entry->classzone_idx = classzone_idx; |
|---|
| 291 | + __entry->highest_zoneidx = highest_zoneidx; |
|---|
| 303 | 292 | __entry->order = order; |
|---|
| 304 | 293 | __entry->nr_requested = nr_requested; |
|---|
| 305 | 294 | __entry->nr_scanned = nr_scanned; |
|---|
| 306 | 295 | __entry->nr_skipped = nr_skipped; |
|---|
| 307 | 296 | __entry->nr_taken = nr_taken; |
|---|
| 308 | | - __entry->isolate_mode = isolate_mode; |
|---|
| 297 | + __entry->isolate_mode = (__force unsigned int)isolate_mode; |
|---|
| 309 | 298 | __entry->lru = lru; |
|---|
| 310 | 299 | ), |
|---|
| 311 | 300 | |
|---|
| 301 | + /* |
|---|
| 302 | + * classzone is previous name of the highest_zoneidx. |
|---|
| 303 | + * Reason not to change it is the ABI requirement of the tracepoint. |
|---|
| 304 | + */ |
|---|
| 312 | 305 | TP_printk("isolate_mode=%d classzone=%d order=%d nr_requested=%lu nr_scanned=%lu nr_skipped=%lu nr_taken=%lu lru=%s", |
|---|
| 313 | 306 | __entry->isolate_mode, |
|---|
| 314 | | - __entry->classzone_idx, |
|---|
| 307 | + __entry->highest_zoneidx, |
|---|
| 315 | 308 | __entry->order, |
|---|
| 316 | 309 | __entry->nr_requested, |
|---|
| 317 | 310 | __entry->nr_scanned, |
|---|
| .. | .. |
|---|
| 333 | 326 | |
|---|
| 334 | 327 | TP_fast_assign( |
|---|
| 335 | 328 | __entry->pfn = page_to_pfn(page); |
|---|
| 336 | | - __entry->reclaim_flags = trace_reclaim_flags(page); |
|---|
| 329 | + __entry->reclaim_flags = trace_reclaim_flags( |
|---|
| 330 | + page_is_file_lru(page)); |
|---|
| 337 | 331 | ), |
|---|
| 338 | 332 | |
|---|
| 339 | 333 | TP_printk("page=%p pfn=%lu flags=%s", |
|---|
| .. | .. |
|---|
| 358 | 352 | __field(unsigned long, nr_writeback) |
|---|
| 359 | 353 | __field(unsigned long, nr_congested) |
|---|
| 360 | 354 | __field(unsigned long, nr_immediate) |
|---|
| 361 | | - __field(unsigned long, nr_activate) |
|---|
| 355 | + __field(unsigned int, nr_activate0) |
|---|
| 356 | + __field(unsigned int, nr_activate1) |
|---|
| 362 | 357 | __field(unsigned long, nr_ref_keep) |
|---|
| 363 | 358 | __field(unsigned long, nr_unmap_fail) |
|---|
| 364 | 359 | __field(int, priority) |
|---|
| .. | .. |
|---|
| 373 | 368 | __entry->nr_writeback = stat->nr_writeback; |
|---|
| 374 | 369 | __entry->nr_congested = stat->nr_congested; |
|---|
| 375 | 370 | __entry->nr_immediate = stat->nr_immediate; |
|---|
| 376 | | - __entry->nr_activate = stat->nr_activate; |
|---|
| 371 | + __entry->nr_activate0 = stat->nr_activate[0]; |
|---|
| 372 | + __entry->nr_activate1 = stat->nr_activate[1]; |
|---|
| 377 | 373 | __entry->nr_ref_keep = stat->nr_ref_keep; |
|---|
| 378 | 374 | __entry->nr_unmap_fail = stat->nr_unmap_fail; |
|---|
| 379 | 375 | __entry->priority = priority; |
|---|
| 380 | | - __entry->reclaim_flags = trace_shrink_flags(file); |
|---|
| 376 | + __entry->reclaim_flags = trace_reclaim_flags(file); |
|---|
| 381 | 377 | ), |
|---|
| 382 | 378 | |
|---|
| 383 | | - TP_printk("nid=%d nr_scanned=%ld nr_reclaimed=%ld nr_dirty=%ld nr_writeback=%ld nr_congested=%ld nr_immediate=%ld nr_activate=%ld nr_ref_keep=%ld nr_unmap_fail=%ld priority=%d flags=%s", |
|---|
| 379 | + 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", |
|---|
| 384 | 380 | __entry->nid, |
|---|
| 385 | 381 | __entry->nr_scanned, __entry->nr_reclaimed, |
|---|
| 386 | 382 | __entry->nr_dirty, __entry->nr_writeback, |
|---|
| 387 | 383 | __entry->nr_congested, __entry->nr_immediate, |
|---|
| 388 | | - __entry->nr_activate, __entry->nr_ref_keep, |
|---|
| 389 | | - __entry->nr_unmap_fail, __entry->priority, |
|---|
| 384 | + __entry->nr_activate0, __entry->nr_activate1, |
|---|
| 385 | + __entry->nr_ref_keep, __entry->nr_unmap_fail, |
|---|
| 386 | + __entry->priority, |
|---|
| 390 | 387 | show_reclaim_flags(__entry->reclaim_flags)) |
|---|
| 391 | 388 | ); |
|---|
| 392 | 389 | |
|---|
| .. | .. |
|---|
| 415 | 412 | __entry->nr_deactivated = nr_deactivated; |
|---|
| 416 | 413 | __entry->nr_referenced = nr_referenced; |
|---|
| 417 | 414 | __entry->priority = priority; |
|---|
| 418 | | - __entry->reclaim_flags = trace_shrink_flags(file); |
|---|
| 415 | + __entry->reclaim_flags = trace_reclaim_flags(file); |
|---|
| 419 | 416 | ), |
|---|
| 420 | 417 | |
|---|
| 421 | 418 | TP_printk("nid=%d nr_taken=%ld nr_active=%ld nr_deactivated=%ld nr_referenced=%ld priority=%d flags=%s", |
|---|
| .. | .. |
|---|
| 454 | 451 | __entry->total_active = total_active; |
|---|
| 455 | 452 | __entry->active = active; |
|---|
| 456 | 453 | __entry->ratio = ratio; |
|---|
| 457 | | - __entry->reclaim_flags = trace_shrink_flags(file) & RECLAIM_WB_LRU; |
|---|
| 454 | + __entry->reclaim_flags = trace_reclaim_flags(file) & |
|---|
| 455 | + RECLAIM_WB_LRU; |
|---|
| 458 | 456 | ), |
|---|
| 459 | 457 | |
|---|
| 460 | 458 | TP_printk("nid=%d reclaim_idx=%d total_inactive=%ld inactive=%ld total_active=%ld active=%ld ratio=%ld flags=%s", |
|---|
| .. | .. |
|---|
| 465 | 463 | __entry->ratio, |
|---|
| 466 | 464 | show_reclaim_flags(__entry->reclaim_flags)) |
|---|
| 467 | 465 | ); |
|---|
| 466 | + |
|---|
| 467 | +TRACE_EVENT(mm_vmscan_node_reclaim_begin, |
|---|
| 468 | + |
|---|
| 469 | + TP_PROTO(int nid, int order, gfp_t gfp_flags), |
|---|
| 470 | + |
|---|
| 471 | + TP_ARGS(nid, order, gfp_flags), |
|---|
| 472 | + |
|---|
| 473 | + TP_STRUCT__entry( |
|---|
| 474 | + __field(int, nid) |
|---|
| 475 | + __field(int, order) |
|---|
| 476 | + __field(gfp_t, gfp_flags) |
|---|
| 477 | + ), |
|---|
| 478 | + |
|---|
| 479 | + TP_fast_assign( |
|---|
| 480 | + __entry->nid = nid; |
|---|
| 481 | + __entry->order = order; |
|---|
| 482 | + __entry->gfp_flags = gfp_flags; |
|---|
| 483 | + ), |
|---|
| 484 | + |
|---|
| 485 | + TP_printk("nid=%d order=%d gfp_flags=%s", |
|---|
| 486 | + __entry->nid, |
|---|
| 487 | + __entry->order, |
|---|
| 488 | + show_gfp_flags(__entry->gfp_flags)) |
|---|
| 489 | +); |
|---|
| 490 | + |
|---|
| 491 | +DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_node_reclaim_end, |
|---|
| 492 | + |
|---|
| 493 | + TP_PROTO(unsigned long nr_reclaimed), |
|---|
| 494 | + |
|---|
| 495 | + TP_ARGS(nr_reclaimed) |
|---|
| 496 | +); |
|---|
| 497 | + |
|---|
| 468 | 498 | #endif /* _TRACE_VMSCAN_H */ |
|---|
| 469 | 499 | |
|---|
| 470 | 500 | /* This part must be outside protection */ |
|---|