oom.h 3.8 KB

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