On Wed, 15 May 2013 13:43:59 -0500
Cliff Wickman <[email protected]> wrote:

> From: Cliff Wickman <[email protected]>
> 
> Because addresses of each successive page structure are often descending
> it is much faster to use read()'s, so set off info->flag_usemmap
> while doing exclude_free_page().
> 
> Signed-off-by: Cliff Wickman <[email protected]>

Sounds good.
BTW, do you have a speed measurement like your another patch ?

> I find this to speed the scan of page structures for a 1TB system from
> 60sec to 30sec.


Thanks
Atsushi Kumagai

> ---
>  makedumpfile.c |   15 ++++++++++++++-
>  1 file changed, 14 insertions(+), 1 deletion(-)
> 
> Index: makedumpfile.mmap/makedumpfile.c
> ===================================================================
> --- makedumpfile.mmap.orig/makedumpfile.c
> +++ makedumpfile.mmap/makedumpfile.c
> @@ -3925,9 +3925,18 @@ _exclude_free_page(void)
>       return TRUE;
>  }
>  
> +/*
> + * Note that this is a very lengthy process, even using mmap(2). The
> + * page structures in the free lists are read one-at-a-time, but using
> + * readpage_elf(), which reads an entire page.  And addresses of each
> + * successive page structure are often descending, which means that each
> + * read is another mmap(2) operation.
> + * It is much faster to use read()'s, so set off info->flag_usemmap here.
> + */
>  int
>  exclude_free_page(void)
>  {
> +     int save = info->flag_usemmap;
>       /*
>        * Check having necessary information.
>        */
> @@ -3961,8 +3970,12 @@ exclude_free_page(void)
>       /*
>        * Detect free pages and update 2nd-bitmap.
>        */
> -     if (!_exclude_free_page())
> +     info->flag_usemmap = 0;
> +     if (!_exclude_free_page()) {
> +             info->flag_usemmap = save;
>               return FALSE;
> +     }
> +     info->flag_usemmap = save;
>  
>       return TRUE;
>  }

_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to