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>
next prev 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