linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Mel Gorman <mel@csn.ul.ie>
To: linux-mm@kvack.org
Cc: Mel Gorman <mel@csn.ul.ie>,
	linux-kernel@vger.kernel.org, clameter@sgi.com
Subject: [PATCH 8/11] [DEBUG] Add statistics
Date: Tue, 21 Nov 2006 22:53:03 +0000 (GMT)	[thread overview]
Message-ID: <20061121225303.11710.64499.sendpatchset@skynet.skynet.ie> (raw)
In-Reply-To: <20061121225022.11710.72178.sendpatchset@skynet.skynet.ie>

This patch is strictly debug only.  It outputs some information to
/proc/buddyinfo that may help explain what went wrong if page clustering
totally breaks down and prints out a trace when fallbacks occur to help
determine if allocation flagging is incomplete.


Signed-off-by: Mel Gorman <mel@csn.ul.ie>
---

 page_alloc.c |   32 ++++++++++++++++++++++++++++++++
 vmstat.c     |   16 ++++++++++++++++
 2 files changed, 48 insertions(+)

diff -rup -X /usr/src/patchset-0.6/bin//dontdiff linux-2.6.19-rc5-mm2-008_reclaimable/mm/page_alloc.c linux-2.6.19-rc5-mm2-009_stats/mm/page_alloc.c
--- linux-2.6.19-rc5-mm2-008_reclaimable/mm/page_alloc.c	2006-11-21 10:57:46.000000000 +0000
+++ linux-2.6.19-rc5-mm2-009_stats/mm/page_alloc.c	2006-11-21 11:52:40.000000000 +0000
@@ -58,6 +58,10 @@ unsigned long totalram_pages __read_most
 unsigned long totalreserve_pages __read_mostly;
 long nr_swap_pages;
 int percpu_pagelist_fraction;
+#ifdef CONFIG_PAGE_CLUSTERING
+int split_count[MIGRATE_TYPES];
+int fallback_counts[MIGRATE_TYPES];
+#endif /* CONFIG_PAGE_CLUSTERING */
 
 static void __free_pages_ok(struct page *page, unsigned int order);
 
@@ -84,6 +88,8 @@ int sysctl_lowmem_reserve_ratio[MAX_NR_Z
 #endif
 };
 
+static int printfallback_count;
+
 EXPORT_SYMBOL(totalram_pages);
 
 static char *zone_names[MAX_NR_ZONES] = {
@@ -750,6 +756,27 @@ static struct page *__rmqueue_fallback(s
 					struct page, lru);
 			area->nr_free--;
 
+			/* Account for a MAX_ORDER block being split */
+			if (current_order == MAX_ORDER - 1 &&
+					order < MAX_ORDER - 1) {
+				split_count[start_migratetype]++;
+			}
+
+			/* Account for fallbacks of interest */
+			if (order < HUGETLB_PAGE_ORDER &&
+					current_order != MAX_ORDER - 1) {
+				fallback_counts[start_migratetype]++;
+				if (printfallback_count < 500 && start_migratetype != MIGRATE_MOVABLE) {
+					printfallback_count++;
+					printk("ALLOC FALLBACK %d TYPE %d TO %d ZONE %s\n", printfallback_count, start_migratetype, migratetype, zone->name);
+					printk("===========================\n");
+					dump_stack();
+					printk("===========================\n");
+			}
+
+
+			}
+
 			/* Remove the page from the freelists */
 			list_del(&page->lru);
 			rmv_page_order(page);
@@ -805,6 +832,11 @@ static struct page *__rmqueue(struct zon
 		if (list_empty(&area->free_list[migratetype]))
 			continue;
 
+#ifdef CONFIG_PAGE_CLUSTERING
+		if (current_order == MAX_ORDER - 1 && order < MAX_ORDER - 1)
+			split_count[migratetype]++;
+#endif /* CONFIG_PAGE_CLUSTERING */
+
 		page = list_entry(area->free_list[migratetype].next,
 					struct page, lru);
 		list_del(&page->lru);
diff -rup -X /usr/src/patchset-0.6/bin//dontdiff linux-2.6.19-rc5-mm2-008_reclaimable/mm/vmstat.c linux-2.6.19-rc5-mm2-009_stats/mm/vmstat.c
--- linux-2.6.19-rc5-mm2-008_reclaimable/mm/vmstat.c	2006-11-14 14:01:37.000000000 +0000
+++ linux-2.6.19-rc5-mm2-009_stats/mm/vmstat.c	2006-11-21 10:59:36.000000000 +0000
@@ -13,6 +13,11 @@
 #include <linux/module.h>
 #include <linux/cpu.h>
 
+#ifdef CONFIG_PAGE_CLUSTERING
+extern int split_count[MIGRATE_TYPES];
+extern int fallback_counts[MIGRATE_TYPES];
+#endif /* CONFIG_PAGE_CLUSTERING */
+
 void __get_zone_counts(unsigned long *active, unsigned long *inactive,
 			unsigned long *free, struct pglist_data *pgdat)
 {
@@ -403,6 +408,17 @@ static void *frag_next(struct seq_file *
 
 static void frag_stop(struct seq_file *m, void *arg)
 {
+#ifdef CONFIG_PAGE_CLUSTERING
+	seq_printf(m, "Fallback counts\n");
+	seq_printf(m, "Unmovable: %8d\n", fallback_counts[MIGRATE_UNMOVABLE]);
+	seq_printf(m, "Reclaim:   %8d\n", fallback_counts[MIGRATE_RECLAIMABLE]);
+	seq_printf(m, "Movable:   %8d\n", fallback_counts[MIGRATE_MOVABLE]);
+
+	seq_printf(m, "\nSplit counts\n");
+	seq_printf(m, "Unmovable: %8d\n", split_count[MIGRATE_UNMOVABLE]);
+	seq_printf(m, "Reclaim:   %8d\n", split_count[MIGRATE_RECLAIMABLE]);
+	seq_printf(m, "Movable:   %8d\n", split_count[MIGRATE_MOVABLE]);
+#endif /* CONFIG_PAGE_CLUSTERING */
 }
 
 /*

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  parent reply	other threads:[~2006-11-21 22:53 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-11-21 22:50 [PATCH 0/11] Avoiding fragmentation with page clustering v27 Mel Gorman
2006-11-21 22:50 ` [PATCH 1/11] Add __GFP_MOVABLE flag and update callers Mel Gorman
2006-11-21 23:30   ` Christoph Lameter
2006-11-21 23:43     ` Mel Gorman
2006-11-21 23:51       ` Dave Hansen
2006-11-22  0:44       ` Linus Torvalds
2006-11-23 16:36         ` Mel Gorman
2006-11-23 17:11           ` Linus Torvalds
2006-11-24 10:44             ` Mel Gorman
2006-11-24 19:57               ` Hugh Dickins
2006-11-24 20:13                 ` Mel Gorman
2006-11-24 21:06                   ` Hugh Dickins
2006-11-25 11:47                     ` Mel Gorman
2006-11-25 19:01                 ` Linus Torvalds
2006-11-26  0:44                   ` Hugh Dickins
2006-11-27 16:32                     ` Mel Gorman
2006-11-27 17:28                       ` Christoph Lameter
2006-11-27 19:48                     ` Add __GFP_MOVABLE for callers to flag allocations that may be migrated Mel Gorman
2006-11-24 17:59             ` [PATCH 1/11] Add __GFP_MOVABLE flag and update callers Christoph Lameter
2006-11-24 18:11               ` Linus Torvalds
2006-11-24 20:04               ` Mel Gorman
2006-11-22  2:25       ` Christoph Lameter
2006-11-23 15:00         ` Mel Gorman
2006-11-21 22:51 ` [PATCH 2/11] Split the free lists for movable and unmovable allocations Mel Gorman
2006-11-21 22:51 ` [PATCH 3/11] Choose pages from the per-cpu list based on migration type Mel Gorman
2006-11-21 22:51 ` [PATCH 4/11] Add a configure option for page clustering Mel Gorman
2006-11-21 22:52 ` [PATCH 5/11] Drain per-cpu lists when high-order allocations fail Mel Gorman
2006-11-21 22:52 ` [PATCH 6/11] Move free pages between lists on steal Mel Gorman
2006-11-21 22:52 ` [PATCH 7/11] Mark short-lived and reclaimable kernel allocations Mel Gorman
2006-11-21 22:53 ` Mel Gorman [this message]
2006-11-21 22:53 ` [PATCH 9/11] Add a bitmap that is used to track flags affecting a block of pages Mel Gorman
2006-11-21 22:53 ` [PATCH 10/11] Remove dependency on page->flag bits Mel Gorman
2006-11-21 22:54 ` [PATCH 11/11] Use pageblock flags for page clustering Mel Gorman
  -- strict thread matches above, loose matches on Subject: below --
2006-11-01 11:16 [PATCH 0/11] Avoiding fragmentation with subzone groupings v26 Mel Gorman
2006-11-01 11:19 ` [PATCH 8/11] [DEBUG] Add statistics Mel Gorman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20061121225303.11710.64499.sendpatchset@skynet.skynet.ie \
    --to=mel@csn.ul.ie \
    --cc=clameter@sgi.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox