oom.h 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #undef TRACE_SYSTEM
  3. #define TRACE_SYSTEM oom
  4. #if !defined(_TRACE_OOM_H) || defined(TRACE_HEADER_MULTI_READ)
  5. #define _TRACE_OOM_H
  6. #include <linux/tracepoint.h>
  7. #include <trace/events/mmflags.h>
  8. #define PG_COUNT_TO_KB(x) ((x) << (PAGE_SHIFT - 10))
  9. TRACE_EVENT(oom_score_adj_update,
  10. TP_PROTO(struct task_struct *task),
  11. TP_ARGS(task),
  12. TP_STRUCT__entry(
  13. __field( pid_t, pid)
  14. __array( char, comm, TASK_COMM_LEN )
  15. __field( short, oom_score_adj)
  16. ),
  17. TP_fast_assign(
  18. __entry->pid = task->pid;
  19. memcpy(__entry->comm, task->comm, TASK_COMM_LEN);
  20. __entry->oom_score_adj = task->signal->oom_score_adj;
  21. ),
  22. TP_printk("pid=%d comm=%s oom_score_adj=%hd",
  23. __entry->pid, __entry->comm, __entry->oom_score_adj)
  24. );
  25. TRACE_EVENT(reclaim_retry_zone,
  26. TP_PROTO(struct zoneref *zoneref,
  27. int order,
  28. unsigned long reclaimable,
  29. unsigned long available,
  30. unsigned long min_wmark,
  31. int no_progress_loops,
  32. bool wmark_check),
  33. TP_ARGS(zoneref, order, reclaimable, available, min_wmark, no_progress_loops, wmark_check),
  34. TP_STRUCT__entry(
  35. __field( int, node)
  36. __field( int, zone_idx)
  37. __field( int, order)
  38. __field( unsigned long, reclaimable)
  39. __field( unsigned long, available)
  40. __field( unsigned long, min_wmark)
  41. __field( int, no_progress_loops)
  42. __field( bool, wmark_check)
  43. ),
  44. TP_fast_assign(
  45. __entry->node = zonelist_node_idx(zoneref);
  46. __entry->zone_idx = zonelist_zone_idx(zoneref);
  47. __entry->order = order;
  48. __entry->reclaimable = reclaimable;
  49. __entry->available = available;
  50. __entry->min_wmark = min_wmark;
  51. __entry->no_progress_loops = no_progress_loops;
  52. __entry->wmark_check = wmark_check;
  53. ),
  54. TP_printk("node=%d zone=%-8s order=%d reclaimable=%lu available=%lu min_wmark=%lu no_progress_loops=%d wmark_check=%d",
  55. __entry->node, __print_symbolic(__entry->zone_idx, ZONE_TYPE),
  56. __entry->order,
  57. __entry->reclaimable, __entry->available, __entry->min_wmark,
  58. __entry->no_progress_loops,
  59. __entry->wmark_check)
  60. );
  61. TRACE_EVENT(mark_victim,
  62. TP_PROTO(struct task_struct *task, uid_t uid),
  63. TP_ARGS(task, uid),
  64. TP_STRUCT__entry(
  65. __field(int, pid)
  66. __string(comm, task->comm)
  67. __field(unsigned long, total_vm)
  68. __field(unsigned long, anon_rss)
  69. __field(unsigned long, file_rss)
  70. __field(unsigned long, shmem_rss)
  71. __field(uid_t, uid)
  72. __field(unsigned long, pgtables)
  73. __field(short, oom_score_adj)
  74. ),
  75. TP_fast_assign(
  76. __entry->pid = task->pid;
  77. __assign_str(comm);
  78. __entry->total_vm = PG_COUNT_TO_KB(task->mm->total_vm);
  79. __entry->anon_rss = PG_COUNT_TO_KB(get_mm_counter(task->mm, MM_ANONPAGES));
  80. __entry->file_rss = PG_COUNT_TO_KB(get_mm_counter(task->mm, MM_FILEPAGES));
  81. __entry->shmem_rss = PG_COUNT_TO_KB(get_mm_counter(task->mm, MM_SHMEMPAGES));
  82. __entry->uid = uid;
  83. __entry->pgtables = mm_pgtables_bytes(task->mm) >> 10;
  84. __entry->oom_score_adj = task->signal->oom_score_adj;
  85. ),
  86. 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",
  87. __entry->pid,
  88. __get_str(comm),
  89. __entry->total_vm,
  90. __entry->anon_rss,
  91. __entry->file_rss,
  92. __entry->shmem_rss,
  93. __entry->uid,
  94. __entry->pgtables,
  95. __entry->oom_score_adj
  96. )
  97. );
  98. TRACE_EVENT(wake_reaper,
  99. TP_PROTO(int pid),
  100. TP_ARGS(pid),
  101. TP_STRUCT__entry(
  102. __field(int, pid)
  103. ),
  104. TP_fast_assign(
  105. __entry->pid = pid;
  106. ),
  107. TP_printk("pid=%d", __entry->pid)
  108. );
  109. TRACE_EVENT(start_task_reaping,
  110. TP_PROTO(int pid),
  111. TP_ARGS(pid),
  112. TP_STRUCT__entry(
  113. __field(int, pid)
  114. ),
  115. TP_fast_assign(
  116. __entry->pid = pid;
  117. ),
  118. TP_printk("pid=%d", __entry->pid)
  119. );
  120. TRACE_EVENT(finish_task_reaping,
  121. TP_PROTO(int pid),
  122. TP_ARGS(pid),
  123. TP_STRUCT__entry(
  124. __field(int, pid)
  125. ),
  126. TP_fast_assign(
  127. __entry->pid = pid;
  128. ),
  129. TP_printk("pid=%d", __entry->pid)
  130. );
  131. TRACE_EVENT(skip_task_reaping,
  132. TP_PROTO(int pid),
  133. TP_ARGS(pid),
  134. TP_STRUCT__entry(
  135. __field(int, pid)
  136. ),
  137. TP_fast_assign(
  138. __entry->pid = pid;
  139. ),
  140. TP_printk("pid=%d", __entry->pid)
  141. );
  142. #ifdef CONFIG_COMPACTION
  143. TRACE_EVENT(compact_retry,
  144. TP_PROTO(int order,
  145. enum compact_priority priority,
  146. enum compact_result result,
  147. int retries,
  148. int max_retries,
  149. bool ret),
  150. TP_ARGS(order, priority, result, retries, max_retries, ret),
  151. TP_STRUCT__entry(
  152. __field( int, order)
  153. __field( int, priority)
  154. __field( int, result)
  155. __field( int, retries)
  156. __field( int, max_retries)
  157. __field( bool, ret)
  158. ),
  159. TP_fast_assign(
  160. __entry->order = order;
  161. __entry->priority = priority;
  162. __entry->result = compact_result_to_feedback(result);
  163. __entry->retries = retries;
  164. __entry->max_retries = max_retries;
  165. __entry->ret = ret;
  166. ),
  167. TP_printk("order=%d priority=%s compaction_result=%s retries=%d max_retries=%d should_retry=%d",
  168. __entry->order,
  169. __print_symbolic(__entry->priority, COMPACTION_PRIORITY),
  170. __print_symbolic(__entry->result, COMPACTION_FEEDBACK),
  171. __entry->retries, __entry->max_retries,
  172. __entry->ret)
  173. );
  174. #endif /* CONFIG_COMPACTION */
  175. #endif
  176. /* This part must be outside protection */
  177. #include <trace/define_trace.h>