From: Cliff Wickman <cpw@xxxxxxx> 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;