0001
0002 #undef TRACE_SYSTEM
0003 #define TRACE_SYSTEM oom
0004
0005 #if !defined(_TRACE_OOM_H) || defined(TRACE_HEADER_MULTI_READ)
0006 #define _TRACE_OOM_H
0007 #include <linux/tracepoint.h>
0008 #include <trace/events/mmflags.h>
0009
0010 TRACE_EVENT(oom_score_adj_update,
0011
0012 TP_PROTO(struct task_struct *task),
0013
0014 TP_ARGS(task),
0015
0016 TP_STRUCT__entry(
0017 __field( pid_t, pid)
0018 __array( char, comm, TASK_COMM_LEN )
0019 __field( short, oom_score_adj)
0020 ),
0021
0022 TP_fast_assign(
0023 __entry->pid = task->pid;
0024 memcpy(__entry->comm, task->comm, TASK_COMM_LEN);
0025 __entry->oom_score_adj = task->signal->oom_score_adj;
0026 ),
0027
0028 TP_printk("pid=%d comm=%s oom_score_adj=%hd",
0029 __entry->pid, __entry->comm, __entry->oom_score_adj)
0030 );
0031
0032 TRACE_EVENT(reclaim_retry_zone,
0033
0034 TP_PROTO(struct zoneref *zoneref,
0035 int order,
0036 unsigned long reclaimable,
0037 unsigned long available,
0038 unsigned long min_wmark,
0039 int no_progress_loops,
0040 bool wmark_check),
0041
0042 TP_ARGS(zoneref, order, reclaimable, available, min_wmark, no_progress_loops, wmark_check),
0043
0044 TP_STRUCT__entry(
0045 __field( int, node)
0046 __field( int, zone_idx)
0047 __field( int, order)
0048 __field( unsigned long, reclaimable)
0049 __field( unsigned long, available)
0050 __field( unsigned long, min_wmark)
0051 __field( int, no_progress_loops)
0052 __field( bool, wmark_check)
0053 ),
0054
0055 TP_fast_assign(
0056 __entry->node = zone_to_nid(zoneref->zone);
0057 __entry->zone_idx = zoneref->zone_idx;
0058 __entry->order = order;
0059 __entry->reclaimable = reclaimable;
0060 __entry->available = available;
0061 __entry->min_wmark = min_wmark;
0062 __entry->no_progress_loops = no_progress_loops;
0063 __entry->wmark_check = wmark_check;
0064 ),
0065
0066 TP_printk("node=%d zone=%-8s order=%d reclaimable=%lu available=%lu min_wmark=%lu no_progress_loops=%d wmark_check=%d",
0067 __entry->node, __print_symbolic(__entry->zone_idx, ZONE_TYPE),
0068 __entry->order,
0069 __entry->reclaimable, __entry->available, __entry->min_wmark,
0070 __entry->no_progress_loops,
0071 __entry->wmark_check)
0072 );
0073
0074 TRACE_EVENT(mark_victim,
0075 TP_PROTO(int pid),
0076
0077 TP_ARGS(pid),
0078
0079 TP_STRUCT__entry(
0080 __field(int, pid)
0081 ),
0082
0083 TP_fast_assign(
0084 __entry->pid = pid;
0085 ),
0086
0087 TP_printk("pid=%d", __entry->pid)
0088 );
0089
0090 TRACE_EVENT(wake_reaper,
0091 TP_PROTO(int pid),
0092
0093 TP_ARGS(pid),
0094
0095 TP_STRUCT__entry(
0096 __field(int, pid)
0097 ),
0098
0099 TP_fast_assign(
0100 __entry->pid = pid;
0101 ),
0102
0103 TP_printk("pid=%d", __entry->pid)
0104 );
0105
0106 TRACE_EVENT(start_task_reaping,
0107 TP_PROTO(int pid),
0108
0109 TP_ARGS(pid),
0110
0111 TP_STRUCT__entry(
0112 __field(int, pid)
0113 ),
0114
0115 TP_fast_assign(
0116 __entry->pid = pid;
0117 ),
0118
0119 TP_printk("pid=%d", __entry->pid)
0120 );
0121
0122 TRACE_EVENT(finish_task_reaping,
0123 TP_PROTO(int pid),
0124
0125 TP_ARGS(pid),
0126
0127 TP_STRUCT__entry(
0128 __field(int, pid)
0129 ),
0130
0131 TP_fast_assign(
0132 __entry->pid = pid;
0133 ),
0134
0135 TP_printk("pid=%d", __entry->pid)
0136 );
0137
0138 TRACE_EVENT(skip_task_reaping,
0139 TP_PROTO(int pid),
0140
0141 TP_ARGS(pid),
0142
0143 TP_STRUCT__entry(
0144 __field(int, pid)
0145 ),
0146
0147 TP_fast_assign(
0148 __entry->pid = pid;
0149 ),
0150
0151 TP_printk("pid=%d", __entry->pid)
0152 );
0153
0154 #ifdef CONFIG_COMPACTION
0155 TRACE_EVENT(compact_retry,
0156
0157 TP_PROTO(int order,
0158 enum compact_priority priority,
0159 enum compact_result result,
0160 int retries,
0161 int max_retries,
0162 bool ret),
0163
0164 TP_ARGS(order, priority, result, retries, max_retries, ret),
0165
0166 TP_STRUCT__entry(
0167 __field( int, order)
0168 __field( int, priority)
0169 __field( int, result)
0170 __field( int, retries)
0171 __field( int, max_retries)
0172 __field( bool, ret)
0173 ),
0174
0175 TP_fast_assign(
0176 __entry->order = order;
0177 __entry->priority = priority;
0178 __entry->result = compact_result_to_feedback(result);
0179 __entry->retries = retries;
0180 __entry->max_retries = max_retries;
0181 __entry->ret = ret;
0182 ),
0183
0184 TP_printk("order=%d priority=%s compaction_result=%s retries=%d max_retries=%d should_retry=%d",
0185 __entry->order,
0186 __print_symbolic(__entry->priority, COMPACTION_PRIORITY),
0187 __print_symbolic(__entry->result, COMPACTION_FEEDBACK),
0188 __entry->retries, __entry->max_retries,
0189 __entry->ret)
0190 );
0191 #endif
0192 #endif
0193
0194
0195 #include <trace/define_trace.h>