162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#undef TRACE_SYSTEM 362306a36Sopenharmony_ci#define TRACE_SYSTEM vmscan 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#if !defined(_TRACE_VMSCAN_H) || defined(TRACE_HEADER_MULTI_READ) 662306a36Sopenharmony_ci#define _TRACE_VMSCAN_H 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#include <linux/types.h> 962306a36Sopenharmony_ci#include <linux/tracepoint.h> 1062306a36Sopenharmony_ci#include <linux/mm.h> 1162306a36Sopenharmony_ci#include <linux/memcontrol.h> 1262306a36Sopenharmony_ci#include <trace/events/mmflags.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#define RECLAIM_WB_ANON 0x0001u 1562306a36Sopenharmony_ci#define RECLAIM_WB_FILE 0x0002u 1662306a36Sopenharmony_ci#define RECLAIM_WB_MIXED 0x0010u 1762306a36Sopenharmony_ci#define RECLAIM_WB_SYNC 0x0004u /* Unused, all reclaim async */ 1862306a36Sopenharmony_ci#define RECLAIM_WB_ASYNC 0x0008u 1962306a36Sopenharmony_ci#define RECLAIM_WB_LRU (RECLAIM_WB_ANON|RECLAIM_WB_FILE) 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci#define show_reclaim_flags(flags) \ 2262306a36Sopenharmony_ci (flags) ? __print_flags(flags, "|", \ 2362306a36Sopenharmony_ci {RECLAIM_WB_ANON, "RECLAIM_WB_ANON"}, \ 2462306a36Sopenharmony_ci {RECLAIM_WB_FILE, "RECLAIM_WB_FILE"}, \ 2562306a36Sopenharmony_ci {RECLAIM_WB_MIXED, "RECLAIM_WB_MIXED"}, \ 2662306a36Sopenharmony_ci {RECLAIM_WB_SYNC, "RECLAIM_WB_SYNC"}, \ 2762306a36Sopenharmony_ci {RECLAIM_WB_ASYNC, "RECLAIM_WB_ASYNC"} \ 2862306a36Sopenharmony_ci ) : "RECLAIM_WB_NONE" 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci#define _VMSCAN_THROTTLE_WRITEBACK (1 << VMSCAN_THROTTLE_WRITEBACK) 3162306a36Sopenharmony_ci#define _VMSCAN_THROTTLE_ISOLATED (1 << VMSCAN_THROTTLE_ISOLATED) 3262306a36Sopenharmony_ci#define _VMSCAN_THROTTLE_NOPROGRESS (1 << VMSCAN_THROTTLE_NOPROGRESS) 3362306a36Sopenharmony_ci#define _VMSCAN_THROTTLE_CONGESTED (1 << VMSCAN_THROTTLE_CONGESTED) 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci#define show_throttle_flags(flags) \ 3662306a36Sopenharmony_ci (flags) ? __print_flags(flags, "|", \ 3762306a36Sopenharmony_ci {_VMSCAN_THROTTLE_WRITEBACK, "VMSCAN_THROTTLE_WRITEBACK"}, \ 3862306a36Sopenharmony_ci {_VMSCAN_THROTTLE_ISOLATED, "VMSCAN_THROTTLE_ISOLATED"}, \ 3962306a36Sopenharmony_ci {_VMSCAN_THROTTLE_NOPROGRESS, "VMSCAN_THROTTLE_NOPROGRESS"}, \ 4062306a36Sopenharmony_ci {_VMSCAN_THROTTLE_CONGESTED, "VMSCAN_THROTTLE_CONGESTED"} \ 4162306a36Sopenharmony_ci ) : "VMSCAN_THROTTLE_NONE" 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci#define trace_reclaim_flags(file) ( \ 4562306a36Sopenharmony_ci (file ? RECLAIM_WB_FILE : RECLAIM_WB_ANON) | \ 4662306a36Sopenharmony_ci (RECLAIM_WB_ASYNC) \ 4762306a36Sopenharmony_ci ) 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ciTRACE_EVENT(mm_vmscan_kswapd_sleep, 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci TP_PROTO(int nid), 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci TP_ARGS(nid), 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci TP_STRUCT__entry( 5662306a36Sopenharmony_ci __field( int, nid ) 5762306a36Sopenharmony_ci ), 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci TP_fast_assign( 6062306a36Sopenharmony_ci __entry->nid = nid; 6162306a36Sopenharmony_ci ), 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci TP_printk("nid=%d", __entry->nid) 6462306a36Sopenharmony_ci); 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ciTRACE_EVENT(mm_vmscan_kswapd_wake, 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci TP_PROTO(int nid, int zid, int order), 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci TP_ARGS(nid, zid, order), 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci TP_STRUCT__entry( 7362306a36Sopenharmony_ci __field( int, nid ) 7462306a36Sopenharmony_ci __field( int, zid ) 7562306a36Sopenharmony_ci __field( int, order ) 7662306a36Sopenharmony_ci ), 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci TP_fast_assign( 7962306a36Sopenharmony_ci __entry->nid = nid; 8062306a36Sopenharmony_ci __entry->zid = zid; 8162306a36Sopenharmony_ci __entry->order = order; 8262306a36Sopenharmony_ci ), 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci TP_printk("nid=%d order=%d", 8562306a36Sopenharmony_ci __entry->nid, 8662306a36Sopenharmony_ci __entry->order) 8762306a36Sopenharmony_ci); 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ciTRACE_EVENT(mm_vmscan_wakeup_kswapd, 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci TP_PROTO(int nid, int zid, int order, gfp_t gfp_flags), 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ci TP_ARGS(nid, zid, order, gfp_flags), 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci TP_STRUCT__entry( 9662306a36Sopenharmony_ci __field( int, nid ) 9762306a36Sopenharmony_ci __field( int, zid ) 9862306a36Sopenharmony_ci __field( int, order ) 9962306a36Sopenharmony_ci __field( unsigned long, gfp_flags ) 10062306a36Sopenharmony_ci ), 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci TP_fast_assign( 10362306a36Sopenharmony_ci __entry->nid = nid; 10462306a36Sopenharmony_ci __entry->zid = zid; 10562306a36Sopenharmony_ci __entry->order = order; 10662306a36Sopenharmony_ci __entry->gfp_flags = (__force unsigned long)gfp_flags; 10762306a36Sopenharmony_ci ), 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ci TP_printk("nid=%d order=%d gfp_flags=%s", 11062306a36Sopenharmony_ci __entry->nid, 11162306a36Sopenharmony_ci __entry->order, 11262306a36Sopenharmony_ci show_gfp_flags(__entry->gfp_flags)) 11362306a36Sopenharmony_ci); 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_ciDECLARE_EVENT_CLASS(mm_vmscan_direct_reclaim_begin_template, 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci TP_PROTO(int order, gfp_t gfp_flags), 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_ci TP_ARGS(order, gfp_flags), 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci TP_STRUCT__entry( 12262306a36Sopenharmony_ci __field( int, order ) 12362306a36Sopenharmony_ci __field( unsigned long, gfp_flags ) 12462306a36Sopenharmony_ci ), 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_ci TP_fast_assign( 12762306a36Sopenharmony_ci __entry->order = order; 12862306a36Sopenharmony_ci __entry->gfp_flags = (__force unsigned long)gfp_flags; 12962306a36Sopenharmony_ci ), 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_ci TP_printk("order=%d gfp_flags=%s", 13262306a36Sopenharmony_ci __entry->order, 13362306a36Sopenharmony_ci show_gfp_flags(__entry->gfp_flags)) 13462306a36Sopenharmony_ci); 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_ciDEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_direct_reclaim_begin, 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_ci TP_PROTO(int order, gfp_t gfp_flags), 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_ci TP_ARGS(order, gfp_flags) 14162306a36Sopenharmony_ci); 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_ci#ifdef CONFIG_MEMCG 14462306a36Sopenharmony_ciDEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_reclaim_begin, 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_ci TP_PROTO(int order, gfp_t gfp_flags), 14762306a36Sopenharmony_ci 14862306a36Sopenharmony_ci TP_ARGS(order, gfp_flags) 14962306a36Sopenharmony_ci); 15062306a36Sopenharmony_ci 15162306a36Sopenharmony_ciDEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_softlimit_reclaim_begin, 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_ci TP_PROTO(int order, gfp_t gfp_flags), 15462306a36Sopenharmony_ci 15562306a36Sopenharmony_ci TP_ARGS(order, gfp_flags) 15662306a36Sopenharmony_ci); 15762306a36Sopenharmony_ci#endif /* CONFIG_MEMCG */ 15862306a36Sopenharmony_ci 15962306a36Sopenharmony_ciDECLARE_EVENT_CLASS(mm_vmscan_direct_reclaim_end_template, 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ci TP_PROTO(unsigned long nr_reclaimed), 16262306a36Sopenharmony_ci 16362306a36Sopenharmony_ci TP_ARGS(nr_reclaimed), 16462306a36Sopenharmony_ci 16562306a36Sopenharmony_ci TP_STRUCT__entry( 16662306a36Sopenharmony_ci __field( unsigned long, nr_reclaimed ) 16762306a36Sopenharmony_ci ), 16862306a36Sopenharmony_ci 16962306a36Sopenharmony_ci TP_fast_assign( 17062306a36Sopenharmony_ci __entry->nr_reclaimed = nr_reclaimed; 17162306a36Sopenharmony_ci ), 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ci TP_printk("nr_reclaimed=%lu", __entry->nr_reclaimed) 17462306a36Sopenharmony_ci); 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_ciDEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_direct_reclaim_end, 17762306a36Sopenharmony_ci 17862306a36Sopenharmony_ci TP_PROTO(unsigned long nr_reclaimed), 17962306a36Sopenharmony_ci 18062306a36Sopenharmony_ci TP_ARGS(nr_reclaimed) 18162306a36Sopenharmony_ci); 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_ci#ifdef CONFIG_MEMCG 18462306a36Sopenharmony_ciDEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_memcg_reclaim_end, 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_ci TP_PROTO(unsigned long nr_reclaimed), 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ci TP_ARGS(nr_reclaimed) 18962306a36Sopenharmony_ci); 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_ciDEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_memcg_softlimit_reclaim_end, 19262306a36Sopenharmony_ci 19362306a36Sopenharmony_ci TP_PROTO(unsigned long nr_reclaimed), 19462306a36Sopenharmony_ci 19562306a36Sopenharmony_ci TP_ARGS(nr_reclaimed) 19662306a36Sopenharmony_ci); 19762306a36Sopenharmony_ci#endif /* CONFIG_MEMCG */ 19862306a36Sopenharmony_ci 19962306a36Sopenharmony_ciTRACE_EVENT(mm_shrink_slab_start, 20062306a36Sopenharmony_ci TP_PROTO(struct shrinker *shr, struct shrink_control *sc, 20162306a36Sopenharmony_ci long nr_objects_to_shrink, unsigned long cache_items, 20262306a36Sopenharmony_ci unsigned long long delta, unsigned long total_scan, 20362306a36Sopenharmony_ci int priority), 20462306a36Sopenharmony_ci 20562306a36Sopenharmony_ci TP_ARGS(shr, sc, nr_objects_to_shrink, cache_items, delta, total_scan, 20662306a36Sopenharmony_ci priority), 20762306a36Sopenharmony_ci 20862306a36Sopenharmony_ci TP_STRUCT__entry( 20962306a36Sopenharmony_ci __field(struct shrinker *, shr) 21062306a36Sopenharmony_ci __field(void *, shrink) 21162306a36Sopenharmony_ci __field(int, nid) 21262306a36Sopenharmony_ci __field(long, nr_objects_to_shrink) 21362306a36Sopenharmony_ci __field(unsigned long, gfp_flags) 21462306a36Sopenharmony_ci __field(unsigned long, cache_items) 21562306a36Sopenharmony_ci __field(unsigned long long, delta) 21662306a36Sopenharmony_ci __field(unsigned long, total_scan) 21762306a36Sopenharmony_ci __field(int, priority) 21862306a36Sopenharmony_ci ), 21962306a36Sopenharmony_ci 22062306a36Sopenharmony_ci TP_fast_assign( 22162306a36Sopenharmony_ci __entry->shr = shr; 22262306a36Sopenharmony_ci __entry->shrink = shr->scan_objects; 22362306a36Sopenharmony_ci __entry->nid = sc->nid; 22462306a36Sopenharmony_ci __entry->nr_objects_to_shrink = nr_objects_to_shrink; 22562306a36Sopenharmony_ci __entry->gfp_flags = (__force unsigned long)sc->gfp_mask; 22662306a36Sopenharmony_ci __entry->cache_items = cache_items; 22762306a36Sopenharmony_ci __entry->delta = delta; 22862306a36Sopenharmony_ci __entry->total_scan = total_scan; 22962306a36Sopenharmony_ci __entry->priority = priority; 23062306a36Sopenharmony_ci ), 23162306a36Sopenharmony_ci 23262306a36Sopenharmony_ci TP_printk("%pS %p: nid: %d objects to shrink %ld gfp_flags %s cache items %ld delta %lld total_scan %ld priority %d", 23362306a36Sopenharmony_ci __entry->shrink, 23462306a36Sopenharmony_ci __entry->shr, 23562306a36Sopenharmony_ci __entry->nid, 23662306a36Sopenharmony_ci __entry->nr_objects_to_shrink, 23762306a36Sopenharmony_ci show_gfp_flags(__entry->gfp_flags), 23862306a36Sopenharmony_ci __entry->cache_items, 23962306a36Sopenharmony_ci __entry->delta, 24062306a36Sopenharmony_ci __entry->total_scan, 24162306a36Sopenharmony_ci __entry->priority) 24262306a36Sopenharmony_ci); 24362306a36Sopenharmony_ci 24462306a36Sopenharmony_ciTRACE_EVENT(mm_shrink_slab_end, 24562306a36Sopenharmony_ci TP_PROTO(struct shrinker *shr, int nid, int shrinker_retval, 24662306a36Sopenharmony_ci long unused_scan_cnt, long new_scan_cnt, long total_scan), 24762306a36Sopenharmony_ci 24862306a36Sopenharmony_ci TP_ARGS(shr, nid, shrinker_retval, unused_scan_cnt, new_scan_cnt, 24962306a36Sopenharmony_ci total_scan), 25062306a36Sopenharmony_ci 25162306a36Sopenharmony_ci TP_STRUCT__entry( 25262306a36Sopenharmony_ci __field(struct shrinker *, shr) 25362306a36Sopenharmony_ci __field(int, nid) 25462306a36Sopenharmony_ci __field(void *, shrink) 25562306a36Sopenharmony_ci __field(long, unused_scan) 25662306a36Sopenharmony_ci __field(long, new_scan) 25762306a36Sopenharmony_ci __field(int, retval) 25862306a36Sopenharmony_ci __field(long, total_scan) 25962306a36Sopenharmony_ci ), 26062306a36Sopenharmony_ci 26162306a36Sopenharmony_ci TP_fast_assign( 26262306a36Sopenharmony_ci __entry->shr = shr; 26362306a36Sopenharmony_ci __entry->nid = nid; 26462306a36Sopenharmony_ci __entry->shrink = shr->scan_objects; 26562306a36Sopenharmony_ci __entry->unused_scan = unused_scan_cnt; 26662306a36Sopenharmony_ci __entry->new_scan = new_scan_cnt; 26762306a36Sopenharmony_ci __entry->retval = shrinker_retval; 26862306a36Sopenharmony_ci __entry->total_scan = total_scan; 26962306a36Sopenharmony_ci ), 27062306a36Sopenharmony_ci 27162306a36Sopenharmony_ci TP_printk("%pS %p: nid: %d unused scan count %ld new scan count %ld total_scan %ld last shrinker return val %d", 27262306a36Sopenharmony_ci __entry->shrink, 27362306a36Sopenharmony_ci __entry->shr, 27462306a36Sopenharmony_ci __entry->nid, 27562306a36Sopenharmony_ci __entry->unused_scan, 27662306a36Sopenharmony_ci __entry->new_scan, 27762306a36Sopenharmony_ci __entry->total_scan, 27862306a36Sopenharmony_ci __entry->retval) 27962306a36Sopenharmony_ci); 28062306a36Sopenharmony_ci 28162306a36Sopenharmony_ciTRACE_EVENT(mm_vmscan_lru_isolate, 28262306a36Sopenharmony_ci TP_PROTO(int highest_zoneidx, 28362306a36Sopenharmony_ci int order, 28462306a36Sopenharmony_ci unsigned long nr_requested, 28562306a36Sopenharmony_ci unsigned long nr_scanned, 28662306a36Sopenharmony_ci unsigned long nr_skipped, 28762306a36Sopenharmony_ci unsigned long nr_taken, 28862306a36Sopenharmony_ci isolate_mode_t isolate_mode, 28962306a36Sopenharmony_ci int lru), 29062306a36Sopenharmony_ci 29162306a36Sopenharmony_ci TP_ARGS(highest_zoneidx, order, nr_requested, nr_scanned, nr_skipped, nr_taken, isolate_mode, lru), 29262306a36Sopenharmony_ci 29362306a36Sopenharmony_ci TP_STRUCT__entry( 29462306a36Sopenharmony_ci __field(int, highest_zoneidx) 29562306a36Sopenharmony_ci __field(int, order) 29662306a36Sopenharmony_ci __field(unsigned long, nr_requested) 29762306a36Sopenharmony_ci __field(unsigned long, nr_scanned) 29862306a36Sopenharmony_ci __field(unsigned long, nr_skipped) 29962306a36Sopenharmony_ci __field(unsigned long, nr_taken) 30062306a36Sopenharmony_ci __field(unsigned int, isolate_mode) 30162306a36Sopenharmony_ci __field(int, lru) 30262306a36Sopenharmony_ci ), 30362306a36Sopenharmony_ci 30462306a36Sopenharmony_ci TP_fast_assign( 30562306a36Sopenharmony_ci __entry->highest_zoneidx = highest_zoneidx; 30662306a36Sopenharmony_ci __entry->order = order; 30762306a36Sopenharmony_ci __entry->nr_requested = nr_requested; 30862306a36Sopenharmony_ci __entry->nr_scanned = nr_scanned; 30962306a36Sopenharmony_ci __entry->nr_skipped = nr_skipped; 31062306a36Sopenharmony_ci __entry->nr_taken = nr_taken; 31162306a36Sopenharmony_ci __entry->isolate_mode = (__force unsigned int)isolate_mode; 31262306a36Sopenharmony_ci __entry->lru = lru; 31362306a36Sopenharmony_ci ), 31462306a36Sopenharmony_ci 31562306a36Sopenharmony_ci /* 31662306a36Sopenharmony_ci * classzone is previous name of the highest_zoneidx. 31762306a36Sopenharmony_ci * Reason not to change it is the ABI requirement of the tracepoint. 31862306a36Sopenharmony_ci */ 31962306a36Sopenharmony_ci TP_printk("isolate_mode=%d classzone=%d order=%d nr_requested=%lu nr_scanned=%lu nr_skipped=%lu nr_taken=%lu lru=%s", 32062306a36Sopenharmony_ci __entry->isolate_mode, 32162306a36Sopenharmony_ci __entry->highest_zoneidx, 32262306a36Sopenharmony_ci __entry->order, 32362306a36Sopenharmony_ci __entry->nr_requested, 32462306a36Sopenharmony_ci __entry->nr_scanned, 32562306a36Sopenharmony_ci __entry->nr_skipped, 32662306a36Sopenharmony_ci __entry->nr_taken, 32762306a36Sopenharmony_ci __print_symbolic(__entry->lru, LRU_NAMES)) 32862306a36Sopenharmony_ci); 32962306a36Sopenharmony_ci 33062306a36Sopenharmony_ciTRACE_EVENT(mm_vmscan_write_folio, 33162306a36Sopenharmony_ci 33262306a36Sopenharmony_ci TP_PROTO(struct folio *folio), 33362306a36Sopenharmony_ci 33462306a36Sopenharmony_ci TP_ARGS(folio), 33562306a36Sopenharmony_ci 33662306a36Sopenharmony_ci TP_STRUCT__entry( 33762306a36Sopenharmony_ci __field(unsigned long, pfn) 33862306a36Sopenharmony_ci __field(int, reclaim_flags) 33962306a36Sopenharmony_ci ), 34062306a36Sopenharmony_ci 34162306a36Sopenharmony_ci TP_fast_assign( 34262306a36Sopenharmony_ci __entry->pfn = folio_pfn(folio); 34362306a36Sopenharmony_ci __entry->reclaim_flags = trace_reclaim_flags( 34462306a36Sopenharmony_ci folio_is_file_lru(folio)); 34562306a36Sopenharmony_ci ), 34662306a36Sopenharmony_ci 34762306a36Sopenharmony_ci TP_printk("page=%p pfn=0x%lx flags=%s", 34862306a36Sopenharmony_ci pfn_to_page(__entry->pfn), 34962306a36Sopenharmony_ci __entry->pfn, 35062306a36Sopenharmony_ci show_reclaim_flags(__entry->reclaim_flags)) 35162306a36Sopenharmony_ci); 35262306a36Sopenharmony_ci 35362306a36Sopenharmony_ci#ifdef CONFIG_HYPERHOLD_ZSWAPD 35462306a36Sopenharmony_ciTRACE_EVENT(mm_vmscan_lru_zswapd_shrink_active, 35562306a36Sopenharmony_ci 35662306a36Sopenharmony_ci TP_PROTO(int nid, unsigned long nr_taken, 35762306a36Sopenharmony_ci unsigned long nr_deactivated, int priority), 35862306a36Sopenharmony_ci 35962306a36Sopenharmony_ci TP_ARGS(nid, nr_taken, nr_deactivated, priority), 36062306a36Sopenharmony_ci 36162306a36Sopenharmony_ci TP_STRUCT__entry( 36262306a36Sopenharmony_ci __field(int, nid) 36362306a36Sopenharmony_ci __field(unsigned long, nr_taken) 36462306a36Sopenharmony_ci __field(unsigned long, nr_deactivated) 36562306a36Sopenharmony_ci __field(int, priority) 36662306a36Sopenharmony_ci ), 36762306a36Sopenharmony_ci 36862306a36Sopenharmony_ci TP_fast_assign( 36962306a36Sopenharmony_ci __entry->nid = nid; 37062306a36Sopenharmony_ci __entry->nr_taken = nr_taken; 37162306a36Sopenharmony_ci __entry->nr_deactivated = nr_deactivated; 37262306a36Sopenharmony_ci __entry->priority = priority; 37362306a36Sopenharmony_ci ), 37462306a36Sopenharmony_ci 37562306a36Sopenharmony_ci TP_printk("nid=%d nr_taken=%ld nr_deactivated=%ld priority=%d", 37662306a36Sopenharmony_ci __entry->nid, 37762306a36Sopenharmony_ci __entry->nr_taken, 37862306a36Sopenharmony_ci __entry->nr_deactivated, 37962306a36Sopenharmony_ci __entry->priority) 38062306a36Sopenharmony_ci); 38162306a36Sopenharmony_ci#endif 38262306a36Sopenharmony_ci 38362306a36Sopenharmony_ciTRACE_EVENT(mm_vmscan_lru_shrink_inactive, 38462306a36Sopenharmony_ci 38562306a36Sopenharmony_ci TP_PROTO(int nid, 38662306a36Sopenharmony_ci unsigned long nr_scanned, unsigned long nr_reclaimed, 38762306a36Sopenharmony_ci struct reclaim_stat *stat, int priority, int file), 38862306a36Sopenharmony_ci 38962306a36Sopenharmony_ci TP_ARGS(nid, nr_scanned, nr_reclaimed, stat, priority, file), 39062306a36Sopenharmony_ci 39162306a36Sopenharmony_ci TP_STRUCT__entry( 39262306a36Sopenharmony_ci __field(int, nid) 39362306a36Sopenharmony_ci __field(unsigned long, nr_scanned) 39462306a36Sopenharmony_ci __field(unsigned long, nr_reclaimed) 39562306a36Sopenharmony_ci __field(unsigned long, nr_dirty) 39662306a36Sopenharmony_ci __field(unsigned long, nr_writeback) 39762306a36Sopenharmony_ci __field(unsigned long, nr_congested) 39862306a36Sopenharmony_ci __field(unsigned long, nr_immediate) 39962306a36Sopenharmony_ci __field(unsigned int, nr_activate0) 40062306a36Sopenharmony_ci __field(unsigned int, nr_activate1) 40162306a36Sopenharmony_ci __field(unsigned long, nr_ref_keep) 40262306a36Sopenharmony_ci __field(unsigned long, nr_unmap_fail) 40362306a36Sopenharmony_ci __field(int, priority) 40462306a36Sopenharmony_ci __field(int, reclaim_flags) 40562306a36Sopenharmony_ci ), 40662306a36Sopenharmony_ci 40762306a36Sopenharmony_ci TP_fast_assign( 40862306a36Sopenharmony_ci __entry->nid = nid; 40962306a36Sopenharmony_ci __entry->nr_scanned = nr_scanned; 41062306a36Sopenharmony_ci __entry->nr_reclaimed = nr_reclaimed; 41162306a36Sopenharmony_ci __entry->nr_dirty = stat->nr_dirty; 41262306a36Sopenharmony_ci __entry->nr_writeback = stat->nr_writeback; 41362306a36Sopenharmony_ci __entry->nr_congested = stat->nr_congested; 41462306a36Sopenharmony_ci __entry->nr_immediate = stat->nr_immediate; 41562306a36Sopenharmony_ci __entry->nr_activate0 = stat->nr_activate[0]; 41662306a36Sopenharmony_ci __entry->nr_activate1 = stat->nr_activate[1]; 41762306a36Sopenharmony_ci __entry->nr_ref_keep = stat->nr_ref_keep; 41862306a36Sopenharmony_ci __entry->nr_unmap_fail = stat->nr_unmap_fail; 41962306a36Sopenharmony_ci __entry->priority = priority; 42062306a36Sopenharmony_ci __entry->reclaim_flags = trace_reclaim_flags(file); 42162306a36Sopenharmony_ci ), 42262306a36Sopenharmony_ci 42362306a36Sopenharmony_ci 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", 42462306a36Sopenharmony_ci __entry->nid, 42562306a36Sopenharmony_ci __entry->nr_scanned, __entry->nr_reclaimed, 42662306a36Sopenharmony_ci __entry->nr_dirty, __entry->nr_writeback, 42762306a36Sopenharmony_ci __entry->nr_congested, __entry->nr_immediate, 42862306a36Sopenharmony_ci __entry->nr_activate0, __entry->nr_activate1, 42962306a36Sopenharmony_ci __entry->nr_ref_keep, __entry->nr_unmap_fail, 43062306a36Sopenharmony_ci __entry->priority, 43162306a36Sopenharmony_ci show_reclaim_flags(__entry->reclaim_flags)) 43262306a36Sopenharmony_ci); 43362306a36Sopenharmony_ci 43462306a36Sopenharmony_ciTRACE_EVENT(mm_vmscan_lru_shrink_active, 43562306a36Sopenharmony_ci 43662306a36Sopenharmony_ci TP_PROTO(int nid, unsigned long nr_taken, 43762306a36Sopenharmony_ci unsigned long nr_active, unsigned long nr_deactivated, 43862306a36Sopenharmony_ci unsigned long nr_referenced, int priority, int file), 43962306a36Sopenharmony_ci 44062306a36Sopenharmony_ci TP_ARGS(nid, nr_taken, nr_active, nr_deactivated, nr_referenced, priority, file), 44162306a36Sopenharmony_ci 44262306a36Sopenharmony_ci TP_STRUCT__entry( 44362306a36Sopenharmony_ci __field(int, nid) 44462306a36Sopenharmony_ci __field(unsigned long, nr_taken) 44562306a36Sopenharmony_ci __field(unsigned long, nr_active) 44662306a36Sopenharmony_ci __field(unsigned long, nr_deactivated) 44762306a36Sopenharmony_ci __field(unsigned long, nr_referenced) 44862306a36Sopenharmony_ci __field(int, priority) 44962306a36Sopenharmony_ci __field(int, reclaim_flags) 45062306a36Sopenharmony_ci ), 45162306a36Sopenharmony_ci 45262306a36Sopenharmony_ci TP_fast_assign( 45362306a36Sopenharmony_ci __entry->nid = nid; 45462306a36Sopenharmony_ci __entry->nr_taken = nr_taken; 45562306a36Sopenharmony_ci __entry->nr_active = nr_active; 45662306a36Sopenharmony_ci __entry->nr_deactivated = nr_deactivated; 45762306a36Sopenharmony_ci __entry->nr_referenced = nr_referenced; 45862306a36Sopenharmony_ci __entry->priority = priority; 45962306a36Sopenharmony_ci __entry->reclaim_flags = trace_reclaim_flags(file); 46062306a36Sopenharmony_ci ), 46162306a36Sopenharmony_ci 46262306a36Sopenharmony_ci TP_printk("nid=%d nr_taken=%ld nr_active=%ld nr_deactivated=%ld nr_referenced=%ld priority=%d flags=%s", 46362306a36Sopenharmony_ci __entry->nid, 46462306a36Sopenharmony_ci __entry->nr_taken, 46562306a36Sopenharmony_ci __entry->nr_active, __entry->nr_deactivated, __entry->nr_referenced, 46662306a36Sopenharmony_ci __entry->priority, 46762306a36Sopenharmony_ci show_reclaim_flags(__entry->reclaim_flags)) 46862306a36Sopenharmony_ci); 46962306a36Sopenharmony_ci 47062306a36Sopenharmony_ciTRACE_EVENT(mm_vmscan_node_reclaim_begin, 47162306a36Sopenharmony_ci 47262306a36Sopenharmony_ci TP_PROTO(int nid, int order, gfp_t gfp_flags), 47362306a36Sopenharmony_ci 47462306a36Sopenharmony_ci TP_ARGS(nid, order, gfp_flags), 47562306a36Sopenharmony_ci 47662306a36Sopenharmony_ci TP_STRUCT__entry( 47762306a36Sopenharmony_ci __field(int, nid) 47862306a36Sopenharmony_ci __field(int, order) 47962306a36Sopenharmony_ci __field(unsigned long, gfp_flags) 48062306a36Sopenharmony_ci ), 48162306a36Sopenharmony_ci 48262306a36Sopenharmony_ci TP_fast_assign( 48362306a36Sopenharmony_ci __entry->nid = nid; 48462306a36Sopenharmony_ci __entry->order = order; 48562306a36Sopenharmony_ci __entry->gfp_flags = (__force unsigned long)gfp_flags; 48662306a36Sopenharmony_ci ), 48762306a36Sopenharmony_ci 48862306a36Sopenharmony_ci TP_printk("nid=%d order=%d gfp_flags=%s", 48962306a36Sopenharmony_ci __entry->nid, 49062306a36Sopenharmony_ci __entry->order, 49162306a36Sopenharmony_ci show_gfp_flags(__entry->gfp_flags)) 49262306a36Sopenharmony_ci); 49362306a36Sopenharmony_ci 49462306a36Sopenharmony_ciDEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_node_reclaim_end, 49562306a36Sopenharmony_ci 49662306a36Sopenharmony_ci TP_PROTO(unsigned long nr_reclaimed), 49762306a36Sopenharmony_ci 49862306a36Sopenharmony_ci TP_ARGS(nr_reclaimed) 49962306a36Sopenharmony_ci); 50062306a36Sopenharmony_ci 50162306a36Sopenharmony_ciTRACE_EVENT(mm_vmscan_throttled, 50262306a36Sopenharmony_ci 50362306a36Sopenharmony_ci TP_PROTO(int nid, int usec_timeout, int usec_delayed, int reason), 50462306a36Sopenharmony_ci 50562306a36Sopenharmony_ci TP_ARGS(nid, usec_timeout, usec_delayed, reason), 50662306a36Sopenharmony_ci 50762306a36Sopenharmony_ci TP_STRUCT__entry( 50862306a36Sopenharmony_ci __field(int, nid) 50962306a36Sopenharmony_ci __field(int, usec_timeout) 51062306a36Sopenharmony_ci __field(int, usec_delayed) 51162306a36Sopenharmony_ci __field(int, reason) 51262306a36Sopenharmony_ci ), 51362306a36Sopenharmony_ci 51462306a36Sopenharmony_ci TP_fast_assign( 51562306a36Sopenharmony_ci __entry->nid = nid; 51662306a36Sopenharmony_ci __entry->usec_timeout = usec_timeout; 51762306a36Sopenharmony_ci __entry->usec_delayed = usec_delayed; 51862306a36Sopenharmony_ci __entry->reason = 1U << reason; 51962306a36Sopenharmony_ci ), 52062306a36Sopenharmony_ci 52162306a36Sopenharmony_ci TP_printk("nid=%d usec_timeout=%d usect_delayed=%d reason=%s", 52262306a36Sopenharmony_ci __entry->nid, 52362306a36Sopenharmony_ci __entry->usec_timeout, 52462306a36Sopenharmony_ci __entry->usec_delayed, 52562306a36Sopenharmony_ci show_throttle_flags(__entry->reason)) 52662306a36Sopenharmony_ci); 52762306a36Sopenharmony_ci#endif /* _TRACE_VMSCAN_H */ 52862306a36Sopenharmony_ci 52962306a36Sopenharmony_ci/* This part must be outside protection */ 53062306a36Sopenharmony_ci#include <trace/define_trace.h> 531