]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
mm: add vm event counters for balloon pages compaction
authorRafael Aquini <aquini@redhat.com>
Tue, 26 Mar 2013 23:24:49 +0000 (10:24 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Tue, 2 Apr 2013 07:29:15 +0000 (18:29 +1100)
Introduce a new set of vm event counters to keep track of ballooned pages
compaction activity.

Signed-off-by: Rafael Aquini <aquini@redhat.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Rik van Riel <riel@redhat.com>
Cc: Mel Gorman <mel@csn.ul.ie>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Minchan Kim <minchan@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
include/linux/balloon_compaction.h
include/linux/vm_event_item.h
mm/balloon_compaction.c
mm/migrate.c
mm/vmstat.c

index f7f1d7169b11c332612ba09a1663141870e08849..6fd5cc80f62f17041f1a678f441113a0ffe76eda 100644 (file)
@@ -213,8 +213,15 @@ static inline bool balloon_compaction_check(void)
        return true;
 }
 
+static inline void balloon_event_count(enum vm_event_item item)
+{
+       count_vm_event(item);
+}
 #else /* !CONFIG_BALLOON_COMPACTION */
 
+/* A macro, to avoid generating references to the undefined COMPACTBALLOON* */
+#define balloon_event_count(item) do { } while (0)
+
 static inline void *balloon_mapping_alloc(void *balloon_device,
                                const struct address_space_operations *a_ops)
 {
index bd6cf61142beaf4eae68c8d88e10a51e6119b522..d4b7a184f08cff0177c7aa26c8707d4bd3135853 100644 (file)
@@ -50,7 +50,12 @@ enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT,
                COMPACTMIGRATE_SCANNED, COMPACTFREE_SCANNED,
                COMPACTISOLATED,
                COMPACTSTALL, COMPACTFAIL, COMPACTSUCCESS,
-#endif
+#ifdef CONFIG_BALLOON_COMPACTION
+               COMPACTBALLOONISOLATED, /* isolated from balloon pagelist */
+               COMPACTBALLOONMIGRATED, /* balloon page sucessfully migrated */
+               COMPACTBALLOONRETURNED, /* putback to pagelist, not-migrated */
+#endif /* CONFIG_BALLOON_COMPACTION */
+#endif /* CONFIG_COMPACTION */
 #ifdef CONFIG_HUGETLB_PAGE
                HTLB_BUDDY_PGALLOC, HTLB_BUDDY_PGALLOC_FAIL,
 #endif
index 07dbc8ec46cfb5bba7eff332a0950b9f1b9593e1..2c8ce496804f137b4420bcd652b2232e7c623723 100644 (file)
@@ -242,6 +242,7 @@ bool balloon_page_isolate(struct page *page)
                        if (__is_movable_balloon_page(page) &&
                            page_count(page) == 2) {
                                __isolate_balloon_page(page);
+                               balloon_event_count(COMPACTBALLOONISOLATED);
                                unlock_page(page);
                                return true;
                        }
@@ -265,6 +266,7 @@ void balloon_page_putback(struct page *page)
                __putback_balloon_page(page);
                /* drop the extra ref count taken for page isolation */
                put_page(page);
+               balloon_event_count(COMPACTBALLOONRETURNED);
        } else {
                WARN_ON(1);
                dump_page(page);
index c87ef92078539cf2157077a3c5c20163ee9114d6..6fa4ebc46536c2dd333f40ff0e35e84f4ac9585b 100644 (file)
@@ -876,6 +876,7 @@ static int unmap_and_move(new_page_t get_new_page, unsigned long private,
                dec_zone_page_state(page, NR_ISOLATED_ANON +
                                    page_is_file_cache(page));
                balloon_page_free(page);
+               balloon_event_count(COMPACTBALLOONMIGRATED);
                return MIGRATEPAGE_SUCCESS;
        }
 out:
index e1d8ed172c42da344e23cd409158ae8086a4e24a..292b1cf785e0eba48feba091002a336bbe096d94 100644 (file)
@@ -792,7 +792,14 @@ const char * const vmstat_text[] = {
        "compact_stall",
        "compact_fail",
        "compact_success",
-#endif
+
+#ifdef CONFIG_BALLOON_COMPACTION
+       "compact_balloon_isolated",
+       "compact_balloon_migrated",
+       "compact_balloon_returned",
+#endif /* CONFIG_BALLOON_COMPACTION */
+
+#endif /* CONFIG_COMPACTION */
 
 #ifdef CONFIG_HUGETLB_PAGE
        "htlb_buddy_alloc_success",