mm: compaction: fix the migration stats in trace_mm_compaction_migratepages()
authorBaolin Wang <baolin.wang@linux.alibaba.com>
Fri, 14 Jan 2022 22:08:40 +0000 (14:08 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 15 Jan 2022 14:30:30 +0000 (16:30 +0200)
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.com
Signed-off-by: Baolin Wang <baolin.wang@linux.alibaba.com>
Reviewed-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Cc: Zi Yan <ziy@nvidia.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
include/trace/events/compaction.h
mm/compaction.c

index 54e5bf081171f5978efceb18cc4b80cc56a2e0a4..7d48e7079e4885967692557b637350d29679d53d 100644 (file)
@@ -68,10 +68,9 @@ DEFINE_EVENT(mm_compaction_isolate_template, mm_compaction_isolate_freepages,
 TRACE_EVENT(mm_compaction_migratepages,
 
        TP_PROTO(unsigned long nr_all,
-               int migrate_rc,
-               struct list_head *migratepages),
+               unsigned int nr_succeeded),
 
-       TP_ARGS(nr_all, migrate_rc, migratepages),
+       TP_ARGS(nr_all, nr_succeeded),
 
        TP_STRUCT__entry(
                __field(unsigned long, nr_migrated)
@@ -79,23 +78,8 @@ TRACE_EVENT(mm_compaction_migratepages,
        ),
 
        TP_fast_assign(
-               unsigned long nr_failed = 0;
-               struct list_head *page_lru;
-
-               /*
-                * 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;
+               __entry->nr_migrated = nr_succeeded;
+               __entry->nr_failed = nr_all - nr_succeeded;
        ),
 
        TP_printk("nr_migrated=%lu nr_failed=%lu",
index 6e446094ce9028d5faea9a4ece20e78c940850c5..b4e94cda3019031b280fa4c639179e87b12e07e9 100644 (file)
@@ -2280,6 +2280,7 @@ compact_zone(struct compact_control *cc, struct capture_control *capc)
        unsigned long last_migrated_pfn;
        const bool sync = cc->mode != MIGRATE_ASYNC;
        bool update_cached;
+       unsigned int nr_succeeded = 0;
 
        /*
         * These counters track activities during zone compaction.  Initialize
@@ -2398,10 +2399,10 @@ compact_zone(struct compact_control *cc, struct capture_control *capc)
 
                err = migrate_pages(&cc->migratepages, compaction_alloc,
                                compaction_free, (unsigned long)cc, cc->mode,
-                               MR_COMPACTION, NULL);
+                               MR_COMPACTION, &nr_succeeded);
 
-               trace_mm_compaction_migratepages(cc->nr_migratepages, err,
-                                                       &cc->migratepages);
+               trace_mm_compaction_migratepages(cc->nr_migratepages,
+                                                nr_succeeded);
 
                /* All pages were either migrated or will be released */
                cc->nr_migratepages = 0;