Commit 84b328aa authored by Baolin Wang's avatar Baolin Wang Committed by Linus Torvalds

mm: compaction: fix the migration stats in trace_mm_compaction_migratepages()

Now the migrate_pages() has changed to return the number of {normal
page, THP, hugetlb} instead, thus we should not use the return value to
calculate the number of pages migrated successfully.  Instead we can
just use the 'nr_succeeded' which indicates the number of normal pages
migrated successfully to calculate the non-migrated pages in
trace_mm_compaction_migratepages().

Link: https://lkml.kernel.org/r/b4225251c4bec068dcd90d275ab7de88a39e2bd7.1636275127.git.baolin.wang@linux.alibaba.comSigned-off-by: default avatarBaolin Wang <baolin.wang@linux.alibaba.com>
Reviewed-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
Cc: Zi Yan <ziy@nvidia.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 5d39a7eb
...@@ -68,10 +68,9 @@ DEFINE_EVENT(mm_compaction_isolate_template, mm_compaction_isolate_freepages, ...@@ -68,10 +68,9 @@ DEFINE_EVENT(mm_compaction_isolate_template, mm_compaction_isolate_freepages,
TRACE_EVENT(mm_compaction_migratepages, TRACE_EVENT(mm_compaction_migratepages,
TP_PROTO(unsigned long nr_all, TP_PROTO(unsigned long nr_all,
int migrate_rc, unsigned int nr_succeeded),
struct list_head *migratepages),
TP_ARGS(nr_all, migrate_rc, migratepages), TP_ARGS(nr_all, nr_succeeded),
TP_STRUCT__entry( TP_STRUCT__entry(
__field(unsigned long, nr_migrated) __field(unsigned long, nr_migrated)
...@@ -79,23 +78,8 @@ TRACE_EVENT(mm_compaction_migratepages, ...@@ -79,23 +78,8 @@ TRACE_EVENT(mm_compaction_migratepages,
), ),
TP_fast_assign( TP_fast_assign(
unsigned long nr_failed = 0; __entry->nr_migrated = nr_succeeded;
struct list_head *page_lru; __entry->nr_failed = nr_all - nr_succeeded;
/*
* migrate_pages() returns either a non-negative number
* with the number of pages that failed migration, or an
* error code, in which case we need to count the remaining
* pages manually
*/
if (migrate_rc >= 0)
nr_failed = migrate_rc;
else
list_for_each(page_lru, migratepages)
nr_failed++;
__entry->nr_migrated = nr_all - nr_failed;
__entry->nr_failed = nr_failed;
), ),
TP_printk("nr_migrated=%lu nr_failed=%lu", TP_printk("nr_migrated=%lu nr_failed=%lu",
......
...@@ -2280,6 +2280,7 @@ compact_zone(struct compact_control *cc, struct capture_control *capc) ...@@ -2280,6 +2280,7 @@ compact_zone(struct compact_control *cc, struct capture_control *capc)
unsigned long last_migrated_pfn; unsigned long last_migrated_pfn;
const bool sync = cc->mode != MIGRATE_ASYNC; const bool sync = cc->mode != MIGRATE_ASYNC;
bool update_cached; bool update_cached;
unsigned int nr_succeeded = 0;
/* /*
* These counters track activities during zone compaction. Initialize * These counters track activities during zone compaction. Initialize
...@@ -2398,10 +2399,10 @@ compact_zone(struct compact_control *cc, struct capture_control *capc) ...@@ -2398,10 +2399,10 @@ compact_zone(struct compact_control *cc, struct capture_control *capc)
err = migrate_pages(&cc->migratepages, compaction_alloc, err = migrate_pages(&cc->migratepages, compaction_alloc,
compaction_free, (unsigned long)cc, cc->mode, compaction_free, (unsigned long)cc, cc->mode,
MR_COMPACTION, NULL); MR_COMPACTION, &nr_succeeded);
trace_mm_compaction_migratepages(cc->nr_migratepages, err, trace_mm_compaction_migratepages(cc->nr_migratepages,
&cc->migratepages); nr_succeeded);
/* All pages were either migrated or will be released */ /* All pages were either migrated or will be released */
cc->nr_migratepages = 0; cc->nr_migratepages = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment