From: Mel Gorman <mel@csn.ul.ie>
To: linux-mm@kvack.org, linux-kernel@vger.kernel.org
Cc: Mel Gorman <mel@csn.ul.ie>
Subject: [PATCH 8/8] [DEBUG] Add statistics
Date: Thu, 7 Sep 2006 20:06:23 +0100 (IST) [thread overview]
Message-ID: <20060907190623.6166.75808.sendpatchset@skynet.skynet.ie> (raw)
In-Reply-To: <20060907190342.6166.49732.sendpatchset@skynet.skynet.ie>
This patch is strictly debug only. With static markers from SystemTap (what is
the current story with these?) or any other type of static marking of probe
points, this could be replaced by a relatively trivial script. Until such
static probes exist, this patch outputs some information to /proc/buddyinfo
that may help explain what went wrong if the anti-fragmentation strategy fails.
Signed-off-by: Mel Gorman <mel@csn.ul.ie>
---
page_alloc.c | 20 ++++++++++++++++++++
vmstat.c | 16 ++++++++++++++++
2 files changed, 36 insertions(+)
diff -rup -X /usr/src/patchset-0.6/bin//dontdiff linux-2.6.18-rc5-mm1-007_kernrclm/mm/page_alloc.c linux-2.6.18-rc5-mm1-009_stats/mm/page_alloc.c
--- linux-2.6.18-rc5-mm1-007_kernrclm/mm/page_alloc.c 2006-09-04 18:45:50.000000000 +0100
+++ linux-2.6.18-rc5-mm1-009_stats/mm/page_alloc.c 2006-09-04 18:47:33.000000000 +0100
@@ -56,6 +56,10 @@ unsigned long totalram_pages __read_most
unsigned long totalreserve_pages __read_mostly;
long nr_swap_pages;
int percpu_pagelist_fraction;
+int split_count[RCLM_TYPES];
+#ifdef CONFIG_PAGEALLOC_ANTIFRAG
+int fallback_counts[RCLM_TYPES];
+#endif
static void __free_pages_ok(struct page *page, unsigned int order);
@@ -742,6 +746,12 @@ 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_rclmtype]++;
+ }
+
/* Remove the page from the freelists */
list_del(&page->lru);
rmv_page_order(page);
@@ -754,6 +764,12 @@ static struct page *__rmqueue_fallback(s
move_freepages_block(zone, page,
start_rclmtype);
+ /* Account for fallbacks */
+ if (order < MAX_ORDER - 1 &&
+ current_order != MAX_ORDER - 1) {
+ fallback_counts[start_rclmtype]++;
+ }
+
return page;
}
}
@@ -804,6 +820,10 @@ static struct page *__rmqueue(struct zon
rmv_page_order(page);
area->nr_free--;
zone->free_pages -= 1UL << order;
+
+ if (current_order == MAX_ORDER - 1 && order < MAX_ORDER - 1)
+ split_count[rclmtype]++;
+
expand(zone, page, order, current_order, area, rclmtype);
goto got_page;
}
diff -rup -X /usr/src/patchset-0.6/bin//dontdiff linux-2.6.18-rc5-mm1-007_kernrclm/mm/vmstat.c linux-2.6.18-rc5-mm1-009_stats/mm/vmstat.c
--- linux-2.6.18-rc5-mm1-007_kernrclm/mm/vmstat.c 2006-09-04 18:39:39.000000000 +0100
+++ linux-2.6.18-rc5-mm1-009_stats/mm/vmstat.c 2006-09-04 18:47:33.000000000 +0100
@@ -13,6 +13,11 @@
#include <linux/module.h>
#include <linux/cpu.h>
+#ifdef CONFIG_PAGEALLOC_ANTIFRAG
+extern int split_count[RCLM_TYPES];
+extern int fallback_counts[RCLM_TYPES];
+#endif
+
void __get_zone_counts(unsigned long *active, unsigned long *inactive,
unsigned long *free, struct pglist_data *pgdat)
{
@@ -427,6 +432,17 @@ static int frag_show(struct seq_file *m,
spin_unlock_irqrestore(&zone->lock, flags);
seq_putc(m, '\n');
}
+#ifdef CONFIG_PAGEALLOC_ANTIFRAG
+ seq_printf(m, "Fallback counts\n");
+ seq_printf(m, "KernNoRclm: %8d\n", fallback_counts[RCLM_NORCLM]);
+ seq_printf(m, "KernRclm: %8d\n", fallback_counts[RCLM_KERN]);
+ seq_printf(m, "EasyRclm: %8d\n", fallback_counts[RCLM_EASY]);
+
+ seq_printf(m, "\nSplit counts\n");
+ seq_printf(m, "KernNoRclm: %8d\n", split_count[RCLM_NORCLM]);
+ seq_printf(m, "KernRclm: %8d\n", split_count[RCLM_KERN]);
+ seq_printf(m, "EasyRclm: %8d\n", split_count[RCLM_EASY]);
+#endif /* CONFIG_PAGEALLOC_ANTIFRAG */
return 0;
}
--
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>
next prev parent reply other threads:[~2006-09-07 19:06 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-09-07 19:03 [PATCH 0/8] Avoiding fragmentation with subzone groupings v25 Mel Gorman
2006-09-07 19:04 ` [PATCH 1/8] Add __GFP_EASYRCLM flag and update callers Mel Gorman
2006-09-07 19:04 ` [PATCH 2/8] Split the free lists into kernel and user parts Mel Gorman
2006-09-08 7:54 ` Peter Zijlstra
2006-09-08 9:20 ` Mel Gorman
2006-09-07 19:04 ` [PATCH 3/8] Split the per-cpu " Mel Gorman
2006-09-07 19:05 ` [PATCH 4/8] Add a configure option for anti-fragmentation Mel Gorman
2006-09-07 19:05 ` [PATCH 5/8] Drain per-cpu lists when high-order allocations fail Mel Gorman
2006-09-07 19:05 ` [PATCH 6/8] Move free pages between lists on steal Mel Gorman
2006-09-07 19:06 ` [PATCH 7/8] Introduce the RCLM_KERN allocation type Mel Gorman
2006-09-07 19:06 ` Mel Gorman [this message]
2006-09-08 0:58 ` [PATCH 0/8] Avoiding fragmentation with subzone groupings v25 Andrew Morton
2006-09-08 8:30 ` Peter Zijlstra
2006-09-08 9:24 ` Mel Gorman
2006-09-08 8:36 ` Mel Gorman
2006-09-08 13:06 ` Peter Zijlstra
2006-09-08 13:16 ` 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=20060907190623.6166.75808.sendpatchset@skynet.skynet.ie \
--to=mel@csn.ul.ie \
--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;
as well as URLs for NNTP newsgroup(s).