[PATCH] makedumpfile: buddy identification when noncyclic

Atsushi Kumagai kumagai-atsushi at mxc.nes.nec.co.jp
Mon May 20 05:50:38 EDT 2013


On Wed, 15 May 2013 13:43:59 -0500
Cliff Wickman <cpw at sgi.com> wrote:

> 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.

Looks good to me.
I'll merge this patch into v1.5.4.


Thanks
Atsushi Kumagai

> 
> 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;
>  
> 
> _______________________________________________
> kexec mailing list
> kexec at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/kexec



More information about the kexec mailing list