[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