[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