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:
parent
837d026d56
commit
24e2716f63
3 changed files with 132 additions and 60 deletions
|
@ -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 */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue