1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 243d2b113SKAMEZAWA Hiroyuki #undef TRACE_SYSTEM 343d2b113SKAMEZAWA Hiroyuki #define TRACE_SYSTEM oom 443d2b113SKAMEZAWA Hiroyuki 543d2b113SKAMEZAWA Hiroyuki #if !defined(_TRACE_OOM_H) || defined(TRACE_HEADER_MULTI_READ) 643d2b113SKAMEZAWA Hiroyuki #define _TRACE_OOM_H 743d2b113SKAMEZAWA Hiroyuki #include <linux/tracepoint.h> 8d379f01dSMichal Hocko #include <trace/events/mmflags.h> 943d2b113SKAMEZAWA Hiroyuki 10*0a657f6eSCarlos Galo #define PG_COUNT_TO_KB(x) ((x) << (PAGE_SHIFT - 10)) 11*0a657f6eSCarlos Galo 1243d2b113SKAMEZAWA Hiroyuki TRACE_EVENT(oom_score_adj_update, 1343d2b113SKAMEZAWA Hiroyuki 1443d2b113SKAMEZAWA Hiroyuki TP_PROTO(struct task_struct *task), 1543d2b113SKAMEZAWA Hiroyuki 1643d2b113SKAMEZAWA Hiroyuki TP_ARGS(task), 1743d2b113SKAMEZAWA Hiroyuki 1843d2b113SKAMEZAWA Hiroyuki TP_STRUCT__entry( 1943d2b113SKAMEZAWA Hiroyuki __field( pid_t, pid) 2043d2b113SKAMEZAWA Hiroyuki __array( char, comm, TASK_COMM_LEN ) 21a9c58b90SDavid Rientjes __field( short, oom_score_adj) 2243d2b113SKAMEZAWA Hiroyuki ), 2343d2b113SKAMEZAWA Hiroyuki 2443d2b113SKAMEZAWA Hiroyuki TP_fast_assign( 2543d2b113SKAMEZAWA Hiroyuki __entry->pid = task->pid; 2643d2b113SKAMEZAWA Hiroyuki memcpy(__entry->comm, task->comm, TASK_COMM_LEN); 2743d2b113SKAMEZAWA Hiroyuki __entry->oom_score_adj = task->signal->oom_score_adj; 2843d2b113SKAMEZAWA Hiroyuki ), 2943d2b113SKAMEZAWA Hiroyuki 30a9c58b90SDavid Rientjes TP_printk("pid=%d comm=%s oom_score_adj=%hd", 3143d2b113SKAMEZAWA Hiroyuki __entry->pid, __entry->comm, __entry->oom_score_adj) 3243d2b113SKAMEZAWA Hiroyuki ); 3343d2b113SKAMEZAWA Hiroyuki 34d379f01dSMichal Hocko TRACE_EVENT(reclaim_retry_zone, 35d379f01dSMichal Hocko 36d379f01dSMichal Hocko TP_PROTO(struct zoneref *zoneref, 37d379f01dSMichal Hocko int order, 38d379f01dSMichal Hocko unsigned long reclaimable, 39d379f01dSMichal Hocko unsigned long available, 40d379f01dSMichal Hocko unsigned long min_wmark, 41d379f01dSMichal Hocko int no_progress_loops, 42d379f01dSMichal Hocko bool wmark_check), 43d379f01dSMichal Hocko 44d379f01dSMichal Hocko TP_ARGS(zoneref, order, reclaimable, available, min_wmark, no_progress_loops, wmark_check), 45d379f01dSMichal Hocko 46d379f01dSMichal Hocko TP_STRUCT__entry( 47d379f01dSMichal Hocko __field( int, node) 48d379f01dSMichal Hocko __field( int, zone_idx) 49d379f01dSMichal Hocko __field( int, order) 50d379f01dSMichal Hocko __field( unsigned long, reclaimable) 51d379f01dSMichal Hocko __field( unsigned long, available) 52d379f01dSMichal Hocko __field( unsigned long, min_wmark) 53d379f01dSMichal Hocko __field( int, no_progress_loops) 54d379f01dSMichal Hocko __field( bool, wmark_check) 55d379f01dSMichal Hocko ), 56d379f01dSMichal Hocko 57d379f01dSMichal Hocko TP_fast_assign( 58d379f01dSMichal Hocko __entry->node = zone_to_nid(zoneref->zone); 59d379f01dSMichal Hocko __entry->zone_idx = zoneref->zone_idx; 60d379f01dSMichal Hocko __entry->order = order; 61d379f01dSMichal Hocko __entry->reclaimable = reclaimable; 62d379f01dSMichal Hocko __entry->available = available; 63d379f01dSMichal Hocko __entry->min_wmark = min_wmark; 64d379f01dSMichal Hocko __entry->no_progress_loops = no_progress_loops; 65d379f01dSMichal Hocko __entry->wmark_check = wmark_check; 66d379f01dSMichal Hocko ), 67d379f01dSMichal Hocko 68d379f01dSMichal Hocko TP_printk("node=%d zone=%-8s order=%d reclaimable=%lu available=%lu min_wmark=%lu no_progress_loops=%d wmark_check=%d", 69d379f01dSMichal Hocko __entry->node, __print_symbolic(__entry->zone_idx, ZONE_TYPE), 70d379f01dSMichal Hocko __entry->order, 71d379f01dSMichal Hocko __entry->reclaimable, __entry->available, __entry->min_wmark, 72d379f01dSMichal Hocko __entry->no_progress_loops, 73d379f01dSMichal Hocko __entry->wmark_check) 74d379f01dSMichal Hocko ); 7565190cffSMichal Hocko 76422580c3SRoman Gushchin TRACE_EVENT(mark_victim, 77*0a657f6eSCarlos Galo TP_PROTO(struct task_struct *task, uid_t uid), 78422580c3SRoman Gushchin 79*0a657f6eSCarlos Galo TP_ARGS(task, uid), 80422580c3SRoman Gushchin 81422580c3SRoman Gushchin TP_STRUCT__entry( 82422580c3SRoman Gushchin __field(int, pid) 83*0a657f6eSCarlos Galo __string(comm, task->comm) 84*0a657f6eSCarlos Galo __field(unsigned long, total_vm) 85*0a657f6eSCarlos Galo __field(unsigned long, anon_rss) 86*0a657f6eSCarlos Galo __field(unsigned long, file_rss) 87*0a657f6eSCarlos Galo __field(unsigned long, shmem_rss) 88*0a657f6eSCarlos Galo __field(uid_t, uid) 89*0a657f6eSCarlos Galo __field(unsigned long, pgtables) 90*0a657f6eSCarlos Galo __field(short, oom_score_adj) 91422580c3SRoman Gushchin ), 92422580c3SRoman Gushchin 93422580c3SRoman Gushchin TP_fast_assign( 94*0a657f6eSCarlos Galo __entry->pid = task->pid; 95*0a657f6eSCarlos Galo __assign_str(comm, task->comm); 96*0a657f6eSCarlos Galo __entry->total_vm = PG_COUNT_TO_KB(task->mm->total_vm); 97*0a657f6eSCarlos Galo __entry->anon_rss = PG_COUNT_TO_KB(get_mm_counter(task->mm, MM_ANONPAGES)); 98*0a657f6eSCarlos Galo __entry->file_rss = PG_COUNT_TO_KB(get_mm_counter(task->mm, MM_FILEPAGES)); 99*0a657f6eSCarlos Galo __entry->shmem_rss = PG_COUNT_TO_KB(get_mm_counter(task->mm, MM_SHMEMPAGES)); 100*0a657f6eSCarlos Galo __entry->uid = uid; 101*0a657f6eSCarlos Galo __entry->pgtables = mm_pgtables_bytes(task->mm) >> 10; 102*0a657f6eSCarlos Galo __entry->oom_score_adj = task->signal->oom_score_adj; 103422580c3SRoman Gushchin ), 104422580c3SRoman Gushchin 105*0a657f6eSCarlos Galo TP_printk("pid=%d comm=%s total-vm=%lukB anon-rss=%lukB file-rss:%lukB shmem-rss:%lukB uid=%u pgtables=%lukB oom_score_adj=%hd", 106*0a657f6eSCarlos Galo __entry->pid, 107*0a657f6eSCarlos Galo __get_str(comm), 108*0a657f6eSCarlos Galo __entry->total_vm, 109*0a657f6eSCarlos Galo __entry->anon_rss, 110*0a657f6eSCarlos Galo __entry->file_rss, 111*0a657f6eSCarlos Galo __entry->shmem_rss, 112*0a657f6eSCarlos Galo __entry->uid, 113*0a657f6eSCarlos Galo __entry->pgtables, 114*0a657f6eSCarlos Galo __entry->oom_score_adj 115*0a657f6eSCarlos Galo ) 116422580c3SRoman Gushchin ); 117422580c3SRoman Gushchin 118422580c3SRoman Gushchin TRACE_EVENT(wake_reaper, 119422580c3SRoman Gushchin TP_PROTO(int pid), 120422580c3SRoman Gushchin 121422580c3SRoman Gushchin TP_ARGS(pid), 122422580c3SRoman Gushchin 123422580c3SRoman Gushchin TP_STRUCT__entry( 124422580c3SRoman Gushchin __field(int, pid) 125422580c3SRoman Gushchin ), 126422580c3SRoman Gushchin 127422580c3SRoman Gushchin TP_fast_assign( 128422580c3SRoman Gushchin __entry->pid = pid; 129422580c3SRoman Gushchin ), 130422580c3SRoman Gushchin 131422580c3SRoman Gushchin TP_printk("pid=%d", __entry->pid) 132422580c3SRoman Gushchin ); 133422580c3SRoman Gushchin 134422580c3SRoman Gushchin TRACE_EVENT(start_task_reaping, 135422580c3SRoman Gushchin TP_PROTO(int pid), 136422580c3SRoman Gushchin 137422580c3SRoman Gushchin TP_ARGS(pid), 138422580c3SRoman Gushchin 139422580c3SRoman Gushchin TP_STRUCT__entry( 140422580c3SRoman Gushchin __field(int, pid) 141422580c3SRoman Gushchin ), 142422580c3SRoman Gushchin 143422580c3SRoman Gushchin TP_fast_assign( 144422580c3SRoman Gushchin __entry->pid = pid; 145422580c3SRoman Gushchin ), 146422580c3SRoman Gushchin 147422580c3SRoman Gushchin TP_printk("pid=%d", __entry->pid) 148422580c3SRoman Gushchin ); 149422580c3SRoman Gushchin 150422580c3SRoman Gushchin TRACE_EVENT(finish_task_reaping, 151422580c3SRoman Gushchin TP_PROTO(int pid), 152422580c3SRoman Gushchin 153422580c3SRoman Gushchin TP_ARGS(pid), 154422580c3SRoman Gushchin 155422580c3SRoman Gushchin TP_STRUCT__entry( 156422580c3SRoman Gushchin __field(int, pid) 157422580c3SRoman Gushchin ), 158422580c3SRoman Gushchin 159422580c3SRoman Gushchin TP_fast_assign( 160422580c3SRoman Gushchin __entry->pid = pid; 161422580c3SRoman Gushchin ), 162422580c3SRoman Gushchin 163422580c3SRoman Gushchin TP_printk("pid=%d", __entry->pid) 164422580c3SRoman Gushchin ); 165422580c3SRoman Gushchin 166422580c3SRoman Gushchin TRACE_EVENT(skip_task_reaping, 167422580c3SRoman Gushchin TP_PROTO(int pid), 168422580c3SRoman Gushchin 169422580c3SRoman Gushchin TP_ARGS(pid), 170422580c3SRoman Gushchin 171422580c3SRoman Gushchin TP_STRUCT__entry( 172422580c3SRoman Gushchin __field(int, pid) 173422580c3SRoman Gushchin ), 174422580c3SRoman Gushchin 175422580c3SRoman Gushchin TP_fast_assign( 176422580c3SRoman Gushchin __entry->pid = pid; 177422580c3SRoman Gushchin ), 178422580c3SRoman Gushchin 179422580c3SRoman Gushchin TP_printk("pid=%d", __entry->pid) 180422580c3SRoman Gushchin ); 181422580c3SRoman Gushchin 18265190cffSMichal Hocko #ifdef CONFIG_COMPACTION 18365190cffSMichal Hocko TRACE_EVENT(compact_retry, 18465190cffSMichal Hocko 18565190cffSMichal Hocko TP_PROTO(int order, 18665190cffSMichal Hocko enum compact_priority priority, 18765190cffSMichal Hocko enum compact_result result, 18865190cffSMichal Hocko int retries, 18965190cffSMichal Hocko int max_retries, 19065190cffSMichal Hocko bool ret), 19165190cffSMichal Hocko 19265190cffSMichal Hocko TP_ARGS(order, priority, result, retries, max_retries, ret), 19365190cffSMichal Hocko 19465190cffSMichal Hocko TP_STRUCT__entry( 19565190cffSMichal Hocko __field( int, order) 19665190cffSMichal Hocko __field( int, priority) 19765190cffSMichal Hocko __field( int, result) 19865190cffSMichal Hocko __field( int, retries) 19965190cffSMichal Hocko __field( int, max_retries) 20065190cffSMichal Hocko __field( bool, ret) 20165190cffSMichal Hocko ), 20265190cffSMichal Hocko 20365190cffSMichal Hocko TP_fast_assign( 20465190cffSMichal Hocko __entry->order = order; 20565190cffSMichal Hocko __entry->priority = priority; 20665190cffSMichal Hocko __entry->result = compact_result_to_feedback(result); 20765190cffSMichal Hocko __entry->retries = retries; 20865190cffSMichal Hocko __entry->max_retries = max_retries; 20965190cffSMichal Hocko __entry->ret = ret; 21065190cffSMichal Hocko ), 21165190cffSMichal Hocko 21265190cffSMichal Hocko TP_printk("order=%d priority=%s compaction_result=%s retries=%d max_retries=%d should_retry=%d", 21365190cffSMichal Hocko __entry->order, 21465190cffSMichal Hocko __print_symbolic(__entry->priority, COMPACTION_PRIORITY), 21565190cffSMichal Hocko __print_symbolic(__entry->result, COMPACTION_FEEDBACK), 21665190cffSMichal Hocko __entry->retries, __entry->max_retries, 21765190cffSMichal Hocko __entry->ret) 21865190cffSMichal Hocko ); 21965190cffSMichal Hocko #endif /* CONFIG_COMPACTION */ 22043d2b113SKAMEZAWA Hiroyuki #endif 22143d2b113SKAMEZAWA Hiroyuki 22243d2b113SKAMEZAWA Hiroyuki /* This part must be outside protection */ 22343d2b113SKAMEZAWA Hiroyuki #include <trace/define_trace.h> 224