linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com>
To: akpm@linux-foundation.org, mgorman@suse.de, mjg59@srcf.ucam.org,
	paulmck@linux.vnet.ibm.com, dave@linux.vnet.ibm.com,
	maxime.coquelin@stericsson.com, loic.pallardy@stericsson.com,
	arjan@linux.intel.com, kmpark@infradead.org,
	kamezawa.hiroyu@jp.fujitsu.com, lenb@kernel.org, rjw@sisk.pl
Cc: gargankita@gmail.com, amit.kachhap@linaro.org,
	svaidy@linux.vnet.ibm.com, thomas.abraham@linaro.org,
	santosh.shilimkar@ti.com, srivatsa.bhat@linux.vnet.ibm.com,
	linux-pm@vger.kernel.org, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org
Subject: [RFC PATCH 8/8] mm: Print memory region statistics to understand the buddy allocator behavior
Date: Wed, 07 Nov 2012 01:24:32 +0530	[thread overview]
Message-ID: <20121106195428.6941.92699.stgit@srivatsabhat.in.ibm.com> (raw)
In-Reply-To: <20121106195026.6941.24662.stgit@srivatsabhat.in.ibm.com>

In order to observe the behavior of the region-aware buddy allocator, modify
vmstat.c to also print memory region related statistics. In particular, enable
memory region-related info in /proc/zoneinfo and /proc/buddyinfo, since they
would help us to atleast (roughly) see how the new buddy allocator is
performing.

For now, the region statistics correspond to the zone memory regions and not
the (absolute) node memory regions, and some of the statistics (especially the
no. of present pages) might not be very accurate. But since we account for
and print the free page statistics for every zone memory region accurately, we
should be able to observe the new page allocator behavior to a reasonable
degree of accuracy.

Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
---

 mm/vmstat.c |   57 +++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 53 insertions(+), 4 deletions(-)

diff --git a/mm/vmstat.c b/mm/vmstat.c
index 8183331..cbcd373 100644
--- a/mm/vmstat.c
+++ b/mm/vmstat.c
@@ -812,11 +812,31 @@ const char * const vmstat_text[] = {
 static void frag_show_print(struct seq_file *m, pg_data_t *pgdat,
 						struct zone *zone)
 {
-	int order;
+	int i, order, t;
+	struct free_area *area;
 
-	seq_printf(m, "Node %d, zone %8s ", pgdat->node_id, zone->name);
-	for (order = 0; order < MAX_ORDER; ++order)
-		seq_printf(m, "%6lu ", zone->free_area[order].nr_free);
+	seq_printf(m, "Node %d, zone %8s \n", pgdat->node_id, zone->name);
+
+	for (i = 0; i < zone->nr_zone_regions; i++) {
+
+		seq_printf(m, "\t\t Region %d ", i);
+
+		for (order = 0; order < MAX_ORDER; ++order) {
+			unsigned long nr_free = 0;
+
+			area = &zone->free_area[order];
+
+			for (t = 0; t < MIGRATE_TYPES; t++) {
+				if (t == MIGRATE_ISOLATE ||
+					t == MIGRATE_RESERVE)
+					continue;
+				nr_free +=
+					area->free_list[t].mr_list[i].nr_free;
+			}
+			seq_printf(m, "%6lu ", nr_free);
+		}
+		seq_putc(m, '\n');
+	}
 	seq_putc(m, '\n');
 }
 
@@ -984,6 +1004,8 @@ static void zoneinfo_show_print(struct seq_file *m, pg_data_t *pgdat,
 							struct zone *zone)
 {
 	int i;
+	unsigned long zone_nr_free = 0;
+
 	seq_printf(m, "Node %d, zone %8s", pgdat->node_id, zone->name);
 	seq_printf(m,
 		   "\n  pages free     %lu"
@@ -1001,6 +1023,33 @@ static void zoneinfo_show_print(struct seq_file *m, pg_data_t *pgdat,
 		   zone->spanned_pages,
 		   zone->present_pages);
 
+	for (i = 0; i < zone->nr_zone_regions; i++) {
+		int order, t;
+		unsigned long nr_free = 0;
+		struct free_area *area = zone->free_area;
+
+		for_each_migratetype_order(order, t) {
+			if (t == MIGRATE_ISOLATE || t == MIGRATE_RESERVE)
+				continue;
+			nr_free +=
+				area[order].free_list[t].mr_list[i].nr_free
+				* (1UL << order);
+		}
+		seq_printf(m, "\n\nZone mem region %d", i);
+		seq_printf(m,
+			   "\n  pages spanned	%lu"
+			   "\n        present	%lu"
+			   "\n        free	%lu",
+			   zone->zone_mem_region[i].spanned_pages,
+			   zone->zone_mem_region[i].present_pages,
+			   nr_free);
+	}
+
+	for (i = 0; i < MAX_ORDER; i++)
+		zone_nr_free += zone->free_area[i].nr_free * (1UL << i);
+
+	seq_printf(m, "\nZone pages nr_free  %lu\n", zone_nr_free);
+
 	for (i = 0; i < NR_VM_ZONE_STAT_ITEMS; i++)
 		seq_printf(m, "\n    %-12s %lu", vmstat_text[i],
 				zone_page_state(zone, i));

--
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:[~2012-11-06 19:55 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-06 19:52 [RFC PATCH 0/8][Sorted-buddy] mm: Linux VM Infrastructure to support Memory Power Management Srivatsa S. Bhat
2012-11-06 19:52 ` [RFC PATCH 1/8] mm: Introduce memory regions data-structure to capture region boundaries within node Srivatsa S. Bhat
2012-11-06 23:03   ` Dave Hansen
2012-11-07 20:12     ` Srivatsa S. Bhat
2012-11-06 19:52 ` [RFC PATCH 2/8] mm: Initialize node memory regions during boot Srivatsa S. Bhat
2012-12-04  8:25   ` wujianguo
2012-11-06 19:53 ` [RFC PATCH 3/8] mm: Introduce and initialize zone memory regions Srivatsa S. Bhat
2012-11-06 19:53 ` [RFC PATCH 4/8] mm: Add helpers to retrieve node region and zone region for a given page Srivatsa S. Bhat
2012-11-16 18:39   ` [RFC PATCH UPDATED " Srivatsa S. Bhat
2012-11-06 19:53 ` [RFC PATCH 5/8] mm: Add data-structures to describe memory regions within the zones' freelists Srivatsa S. Bhat
2012-11-06 19:53 ` [RFC PATCH 6/8] mm: Demarcate and maintain pageblocks in region-order in " Srivatsa S. Bhat
2012-11-06 21:49   ` Dave Hansen
2012-11-07 20:15     ` Srivatsa S. Bhat
2012-11-09  6:22       ` Ankita Garg
2012-11-09  6:01   ` Ankita Garg
2012-11-09  9:03     ` Srivatsa S. Bhat
2012-11-06 19:54 ` [RFC PATCH 7/8] mm: Add an optimized version of del_from_freelist to keep page allocation fast Srivatsa S. Bhat
2012-11-06 19:54 ` Srivatsa S. Bhat [this message]
2012-11-08 18:02 ` [RFC PATCH 0/8][Sorted-buddy] mm: Linux VM Infrastructure to support Memory Power Management Mel Gorman
2012-11-08 19:38   ` Srivatsa S. Bhat
2012-11-09  5:14   ` Vaidyanathan Srinivasan
2012-11-09  9:00     ` Mel Gorman
2012-11-09 14:51       ` Srivatsa S. Bhat
2012-11-09 15:23         ` Srivatsa S. Bhat
2012-11-09 16:13           ` Dave Hansen
2012-11-09 16:34             ` Srivatsa S. Bhat
2012-11-09 16:43               ` Srivatsa S. Bhat
2012-11-09 16:52                 ` Srivatsa S. Bhat
2012-11-16 18:32                   ` Srivatsa S. Bhat
2012-11-09 15:34     ` Arjan van de Ven
     [not found]   ` <loom.20121109T172910-394@post.gmane.org>
2012-11-12 16:14     ` Srivatsa S. Bhat
2012-12-04 10:51 ` wujianguo
2012-12-06  6:32   ` Srivatsa S. Bhat

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=20121106195428.6941.92699.stgit@srivatsabhat.in.ibm.com \
    --to=srivatsa.bhat@linux.vnet.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=amit.kachhap@linaro.org \
    --cc=arjan@linux.intel.com \
    --cc=dave@linux.vnet.ibm.com \
    --cc=gargankita@gmail.com \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=kmpark@infradead.org \
    --cc=lenb@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=loic.pallardy@stericsson.com \
    --cc=maxime.coquelin@stericsson.com \
    --cc=mgorman@suse.de \
    --cc=mjg59@srcf.ucam.org \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=rjw@sisk.pl \
    --cc=santosh.shilimkar@ti.com \
    --cc=svaidy@linux.vnet.ibm.com \
    --cc=thomas.abraham@linaro.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).