Skip to content

Commit

Permalink
mm/compaction: print current range where compaction work
Browse files Browse the repository at this point in the history
It'd be useful to know current range where compaction work for detailed
analysis.  With it, we can know pageblock where we actually scan and
isolate, and, how much pages we try in that pageblock and can guess why it
doesn't become freepage with pageblock order roughly.

Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Acked-by: 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>
  • Loading branch information
Joonsoo Kim authored and Linus Torvalds committed Feb 12, 2015
1 parent 16c4a09 commit e34d85f
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 10 deletions.
30 changes: 23 additions & 7 deletions include/trace/events/compaction.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,39 +11,55 @@

DECLARE_EVENT_CLASS(mm_compaction_isolate_template,

TP_PROTO(unsigned long nr_scanned,
TP_PROTO(
unsigned long start_pfn,
unsigned long end_pfn,
unsigned long nr_scanned,
unsigned long nr_taken),

TP_ARGS(nr_scanned, nr_taken),
TP_ARGS(start_pfn, end_pfn, nr_scanned, nr_taken),

TP_STRUCT__entry(
__field(unsigned long, start_pfn)
__field(unsigned long, end_pfn)
__field(unsigned long, nr_scanned)
__field(unsigned long, nr_taken)
),

TP_fast_assign(
__entry->start_pfn = start_pfn;
__entry->end_pfn = end_pfn;
__entry->nr_scanned = nr_scanned;
__entry->nr_taken = nr_taken;
),

TP_printk("nr_scanned=%lu nr_taken=%lu",
TP_printk("range=(0x%lx ~ 0x%lx) nr_scanned=%lu nr_taken=%lu",
__entry->start_pfn,
__entry->end_pfn,
__entry->nr_scanned,
__entry->nr_taken)
);

DEFINE_EVENT(mm_compaction_isolate_template, mm_compaction_isolate_migratepages,

TP_PROTO(unsigned long nr_scanned,
TP_PROTO(
unsigned long start_pfn,
unsigned long end_pfn,
unsigned long nr_scanned,
unsigned long nr_taken),

TP_ARGS(nr_scanned, nr_taken)
TP_ARGS(start_pfn, end_pfn, nr_scanned, nr_taken)
);

DEFINE_EVENT(mm_compaction_isolate_template, mm_compaction_isolate_freepages,
TP_PROTO(unsigned long nr_scanned,

TP_PROTO(
unsigned long start_pfn,
unsigned long end_pfn,
unsigned long nr_scanned,
unsigned long nr_taken),

TP_ARGS(nr_scanned, nr_taken)
TP_ARGS(start_pfn, end_pfn, nr_scanned, nr_taken)
);

TRACE_EVENT(mm_compaction_migratepages,
Expand Down
9 changes: 6 additions & 3 deletions mm/compaction.c
Original file line number Diff line number Diff line change
Expand Up @@ -430,11 +430,12 @@ static unsigned long isolate_freepages_block(struct compact_control *cc,

}

trace_mm_compaction_isolate_freepages(*start_pfn, blockpfn,
nr_scanned, total_isolated);

/* Record how far we have got within the block */
*start_pfn = blockpfn;

trace_mm_compaction_isolate_freepages(nr_scanned, total_isolated);

/*
* If strict isolation is requested by CMA then check that all the
* pages requested were isolated. If there were any failures, 0 is
Expand Down Expand Up @@ -590,6 +591,7 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn,
unsigned long flags = 0;
bool locked = false;
struct page *page = NULL, *valid_page = NULL;
unsigned long start_pfn = low_pfn;

/*
* Ensure that there are not too many pages isolated from the LRU
Expand Down Expand Up @@ -750,7 +752,8 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn,
if (low_pfn == end_pfn)
update_pageblock_skip(cc, valid_page, nr_isolated, true);

trace_mm_compaction_isolate_migratepages(nr_scanned, nr_isolated);
trace_mm_compaction_isolate_migratepages(start_pfn, low_pfn,
nr_scanned, nr_isolated);

count_compact_events(COMPACTMIGRATE_SCANNED, nr_scanned);
if (nr_isolated)
Expand Down

0 comments on commit e34d85f

Please sign in to comment.