Hi Jay, Jay Lan wrote: >>> In case of jay, it looks creating bitmaps itself took a long time. >>> >> Do you have data for this? I've not seen it. > > I just posted detailed data. My initial post gave the amount of time > spent in create_dump_bitmap(). > > The processing rate of pfn inside create_dump_bitmap() is about > 184500-pfn/sec on memory map that does not contain data needs to > be saved. > 213700-pfn/sec on memory map that contain data to be saved. > > Here is some memory mappend from /proc/iomem: > 16003000000-16033dfffff : System RAM > 16033e00000-160f7ffffff : System RAM > 16800000000-168f7ffffff : System RAM > > We do not spent time in scanning pfn between 160f8000000 and > 16800000000. In Bernhard's mail: > 6045b9f000-60f7ffdfff : System RAM > 16000100000-160003fffff : System RAM > 16003000000-16033dfffff : System RAM I guess that makedumpfile spends time in scanning memory gap between 0x60f7ffdfff and 0x16000100000 when creating 1st-bitmap. I created the attached patch that makedumpfile does not scan memory gap when creating 1st-bitmap. Could you please try it ? This patch is for makedumpfile-1.2.6. Thanks Ken'ichi Ohmichi diff -puN backup/v1.2.6/makedumpfile.c makedumpfile/makedumpfile.c --- backup/v1.2.6/makedumpfile.c 2008-06-05 15:17:17.000000000 +0900 +++ makedumpfile/makedumpfile.c 2008-07-17 22:33:58.000000000 +0900 @@ -3987,8 +3987,10 @@ exclude_free_page() int create_1st_bitmap() { + int i; char *buf = NULL; - unsigned long long pfn, paddr; + unsigned long long pfn, pfn_start, pfn_end, pfn_bitmap1; + struct pt_load_segment *pls; off_t offset_page; int ret = FALSE; @@ -4021,13 +4023,17 @@ create_1st_bitmap() /* * If page is on memory hole, set bit on the 1st-bitmap. */ - for (pfn = 0, paddr = 0; pfn < info->max_mapnr; - pfn++, paddr += info->page_size) { - if (is_in_segs(paddr)) + for (i = pfn_bitmap1 = 0; i < info->num_load_memory; i++) { + pls = &info->pt_load_segments[i]; + pfn_start = pls->phys_start / info->page_size; + pfn_end = pls->phys_end / info->page_size; + for (pfn = pfn_start; pfn < pfn_end; pfn++) { set_bit_on_1st_bitmap(pfn); - else - pfn_memhole++; + pfn_bitmap1++; + } } + pfn_memhole = info->max_mapnr - pfn_bitmap1; + if (!sync_1st_bitmap()) goto out;