]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
mm: add vm event counters for balloon pages compaction
authorRafael Aquini <aquini@redhat.com>
Wed, 3 Jul 2013 00:20:20 +0000 (10:20 +1000)
committerStephen Rothwell <sfr@canb.auug.org.au>
Wed, 17 Jul 2013 02:34:59 +0000 (12:34 +1000)
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 1da0092561a4c0cb1e955e2191885fe3e703a187..3227c63bd91f015c6c565091d29e1745d5ae3a8f 100644 (file)
@@ -889,6 +889,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 f42745e65780b97a1875cde1df81fe527350d59a..7a35116462a7722a0640ec456ff872075a6df904 100644 (file)
@@ -794,7 +794,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",