[PATCH] makedumpfile: buddy identification when noncyclic

Cliff Wickman cpw at sgi.com
Wed May 15 14:43:59 EDT 2013


From: Cliff Wickman <cpw at sgi.com>

The 'buddy' identification of free pages should be done for non-cyclical
dumps as well as cyclical.
Remove the cyclic test from this condition:
    if (info->flag_cyclic && (info->dump_level & DL_EXCLUDE_FREE))
I find this to speed the scan of page structures for a 1TB system from
60sec to 30sec.

And only do the exclude_free_page() procedure if free pages cannot be
identified using the buddy technique.

Signed-off-by: Cliff Wickman <cpw at sgi.com>
---
 makedumpfile.c |    9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

Index: makedumpfile.mmap/makedumpfile.c
===================================================================
--- makedumpfile.mmap.orig/makedumpfile.c
+++ makedumpfile.mmap/makedumpfile.c
@@ -2979,7 +2979,9 @@ out:
 	if (!get_value_for_old_linux())
 		return FALSE;
 
-	if (info->flag_cyclic && (info->dump_level & DL_EXCLUDE_FREE))
+	/* use buddy identification of free pages whether cyclic or not */
+	/* (this can reduce pages scan of 1TB memory from 60sec to 30sec) */
+	if (info->dump_level & DL_EXCLUDE_FREE)
 		setup_page_is_buddy();
 
 	if (info->mmap_region_size > 0 && initialize_mmap()) {
@@ -4154,6 +4156,7 @@ create_1st_bitmap(void)
 
 	/*
 	 * If page is on memory hole, set bit on the 1st-bitmap.
+	 * (note that this is not done in cyclic mode)
 	 */
 	pfn_bitmap1 = 0;
 	for (i = 0; get_pt_load(i, &phys_start, &phys_end, NULL, NULL); i++) {
@@ -4341,9 +4344,9 @@ __exclude_unnecessary_pages(unsigned lon
 
 		/*
 		 * Exclude the free page managed by a buddy
+		 * Use buddy identification of free pages whether cyclic or not.
 		 */
 		if ((info->dump_level & DL_EXCLUDE_FREE)
-		    && info->flag_cyclic
 		    && info->page_is_buddy
 		    && info->page_is_buddy(flags, _mapcount, private, _count)) {
 			int i, nr_pages = 1 << private;
@@ -4584,7 +4587,7 @@ create_2nd_bitmap(void)
 	/*
 	 * Exclude free pages.
 	 */
-	if (info->dump_level & DL_EXCLUDE_FREE)
+	if ((info->dump_level & DL_EXCLUDE_FREE) && !info->page_is_buddy)
 		if (!exclude_free_page())
 			return FALSE;
 



More information about the kexec mailing list