mm/compaction: add tracepoint to observe behaviour of compaction defer
Compaction deferring logic is heavy hammer that block the way to the compaction. It doesn't consider overall system state, so it could prevent user from doing compaction falsely. In other words, even if system has enough range of memory to compact, compaction would be skipped due to compaction deferring logic. This patch add new tracepoint to understand work of deferring logic. This will also help to check compaction success and fail. Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: Mel Gorman <mgorman@suse.de> Cc: David Rientjes <rientjes@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
837d026d56
commit
24e2716f63
@@ -238,6 +238,62 @@ DEFINE_EVENT(mm_compaction_suitable_template, mm_compaction_suitable,
|
||||
TP_ARGS(zone, order, ret)
|
||||
);
|
||||
|
||||
#ifdef CONFIG_COMPACTION
|
||||
DECLARE_EVENT_CLASS(mm_compaction_defer_template,
|
||||
|
||||
TP_PROTO(struct zone *zone, int order),
|
||||
|
||||
TP_ARGS(zone, order),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(int, nid)
|
||||
__field(char *, name)
|
||||
__field(int, order)
|
||||
__field(unsigned int, considered)
|
||||
__field(unsigned int, defer_shift)
|
||||
__field(int, order_failed)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->nid = zone_to_nid(zone);
|
||||
__entry->name = (char *)zone->name;
|
||||
__entry->order = order;
|
||||
__entry->considered = zone->compact_considered;
|
||||
__entry->defer_shift = zone->compact_defer_shift;
|
||||
__entry->order_failed = zone->compact_order_failed;
|
||||
),
|
||||
|
||||
TP_printk("node=%d zone=%-8s order=%d order_failed=%d consider=%u limit=%lu",
|
||||
__entry->nid,
|
||||
__entry->name,
|
||||
__entry->order,
|
||||
__entry->order_failed,
|
||||
__entry->considered,
|
||||
1UL << __entry->defer_shift)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(mm_compaction_defer_template, mm_compaction_deferred,
|
||||
|
||||
TP_PROTO(struct zone *zone, int order),
|
||||
|
||||
TP_ARGS(zone, order)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(mm_compaction_defer_template, mm_compaction_defer_compaction,
|
||||
|
||||
TP_PROTO(struct zone *zone, int order),
|
||||
|
||||
TP_ARGS(zone, order)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(mm_compaction_defer_template, mm_compaction_defer_reset,
|
||||
|
||||
TP_PROTO(struct zone *zone, int order),
|
||||
|
||||
TP_ARGS(zone, order)
|
||||
);
|
||||
#endif
|
||||
|
||||
#endif /* _TRACE_COMPACTION_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
|
||||
Reference in New Issue
Block a user