[PATCH] makedumpfile: skip multiple pages filtered as free pages

HATAYAMA Daisuke d.hatayama at jp.fujitsu.com
Thu Mar 14 11:36:35 EDT 2013


If buddy page has order n, (2^n) pages are filtered at the same
time. Then, next (2^n) pages are already filterd, so we can skip the
(2^n) pages for free.

By this, on 32GB memory system, there's the following improvement:

- with mmap() on /proc/vmcore from 0.594421 seconds to 0.496517
  seconds, and
- with normal read() from 1.533796 seconds to 0.750935 seconds.

Note that the two improvements are measured on the same /proc/vmcore.

Note also that amount of the improvement depends on amount of free
pages, though it's obvious.

Signed-off-by: HATAYAMA Daisuke <d.hatayama at jp.fujitsu.com>
---
 makedumpfile.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/makedumpfile.c b/makedumpfile.c
index 7acbf72..9075f38 100644
--- a/makedumpfile.c
+++ b/makedumpfile.c
@@ -4303,9 +4303,9 @@ __exclude_unnecessary_pages(unsigned long mem_map,
 		    && info->flag_cyclic
 		    && info->page_is_buddy
 		    && info->page_is_buddy(flags, _mapcount, private, _count)) {
-			int i;
+			int i, nr_pages = 1 << private;
 
-			for (i = 0; i < (1 << private); ++i) {
+			for (i = 0; i < nr_pages; ++i) {
 				/*
 				 * According to combination of
 				 * MAX_ORDER and size of cyclic
@@ -4318,6 +4318,9 @@ __exclude_unnecessary_pages(unsigned long mem_map,
 				clear_bit_on_2nd_bitmap_for_kernel(pfn + i);
 			}
 			pfn_free += i;
+
+			pfn += nr_pages - 1;
+			mem_map += (nr_pages - 1) * SIZE(page);
 		}
 		/*
 		 * Exclude the cache page without the private page.
-- 
1.8.1.4





More information about the kexec mailing list