[RFC PATCH v2 0/10] makedumpfile: cyclic processing to keep memory consumption.

Atsushi Kumagai kumagai-atsushi at mxc.nes.nec.co.jp
Wed Aug 15 02:27:10 EDT 2012


Hello HATAYAMA-san,

On Tue, 14 Aug 2012 20:55:32 +0900 (JST)
HATAYAMA Daisuke <d.hatayama at jp.fujitsu.com> wrote:

> From: Vivek Goyal <vgoyal at redhat.com>
> Subject: Re: [RFC PATCH v2 0/10] makedumpfile: cyclic processing to keep memory consumption.
> Date: Fri, 10 Aug 2012 10:36:55 -0400
> 
> > On Fri, Aug 10, 2012 at 05:39:38PM +0900, HATAYAMA Daisuke wrote:
> > 
> > [..]
> >> 
> >> I finished benchmarking filtering time and demonstrate the result.
> >> But I failed to collect amount of memory consumption by my mistake. If
> >> they are necessary, I'll again try to collect them. But we have 9 days
> >> vacation starting tommorow, so I'll do that after the vacation.
> >> 

Thank you for your help.
Could you continue to measure amount of memory consumption ?

> > 
> > Thanks a lot for doing this benchmarking.
> > 
> >> The machine spec I used is as follows:
> >> 
> >>   Memory: 2TB
> >>   CPU: Intel(R) Xeon(R) CPU E7- 8870  @ 2.40GHz
> >>        (8 sockets, 10 cores, 2 threads)
> >> 
> >> In the first step, I chosed buffer size 10KB and it took about 3h 45m
> >> 57s. So, next I changed the buffer size to 512KB and measured up to
> >> 8MB.
> > 
> > What is this buffer size? Is user supposed to specify it? Is it some fixed
> > size buffer which makedumpfile can use to read in memory and once we cross
> > the buffer size we need to let some data from buffer go?
> > 
> 
> The buffer size is just the size for a single bitmap. A single bitmap
> has the given buffer size length. If passing 512kB as buffer size, two
> 512kB bitmaps, so 1MB in total, are allocated.
> 
> The next equation holds:
> 
> number_of_cycles == system_memory / ( bit_per_bytes * page_size * the_buf_size )
> 
> On this benchmarking,
> 
>   system_memory := 2TB
>   bit_per_bytes := 8
>   page_size := 4KB
> 
> The buffer size was fixed in Kumagai-san's version, but in this
> benchmarking I added --bufsize command-line option for flexibility.

I'll add the --cyclic-buffer option to specify the buffer size in the release version.

> >> 
> >> The result is as follows:
> >> 
> >> | buffer size | time       |
> >> |-------------+------------|
> >> | 8 MB        | 48.32 sec  |
> >> | 4 MB        | 55.76 sec  |
> >> | 2 MB        | 69.91 sec  |
> >> | 1 MB        | 98.25 sec  |
> >> | 512 KB      | 154.42 sec |
> > 
> > So, on a 2TB system, with 8MB buffer, we could filter and save vmcore in
> > around 48 seconds? Or is it just filtering time.
> > 
> 
> Just filtering time. I first tried with writing memory but it took
> very long time over a few hours. There are several test cases for
> several buffer size, I needed to reduce the time required.
> 
> > 48 seconds for 2TB system, sounds pretty decent to me.
> > 
> 
> I think so too, because the time for writing data is by far larger
> than this time.
> 
> > Are these results with existing free_list implementation or with your
> > patches of walking through mem_map array?
> > 
> >> 
> >> BTW, the existing free_list logic took about 48 sec for the same
> >> vmcore as below.
> > 
> > I guess above results were with your patches of walking mem_map array.
> > 
> 
> Yes, the above results are mem_map array case.
> 
> >> 
> >> STEP [Excluding free pages       ] : 49.846321 seconds
> >> STEP [Excluding unnecessary pages] : 6.339228 seconds
> >> STEP [Excluding free pages       ] : 48.595884 seconds
> >> STEP [Excluding unnecessary pages] : 6.530479 seconds
> >> STEP [Excluding free pages       ] : 48.598879 seconds
> >> STEP [Excluding unnecessary pages] : 6.527133 seconds
> >> STEP [Excluding free pages       ] : 48.602401 seconds
> >> STEP [Excluding unnecessary pages] : 6.502681 seconds
> >> STEP [Excluding free pages       ] : 48.602010 seconds
> >> STEP [Excluding unnecessary pages] : 6.469853 seconds
> >> STEP [Excluding free pages       ] : 48.601637 seconds
> >> STEP [Excluding unnecessary pages] : 6.431381 seconds
> >> STEP [Excluding free pages       ] : 48.601195 seconds
> >> STEP [Excluding unnecessary pages] : 6.416676 seconds
> >> STEP [Excluding free pages       ] : 48.602221 seconds
> >> STEP [Excluding unnecessary pages] : 6.387611 seconds
> >> STEP [Excluding free pages       ] : 48.589972 seconds
> >> STEP [Excluding unnecessary pages] : 0.816955 seconds
> > 
> > So what does above represent. Each step is taking 48 seconds or total
> > time taken to filter vmcore is 48 seconds? What's the buffer size used
> > here.
> > 
> 
> The free_list logic always filteres a whole memory range even if the
> range we need to filter is only a cerntain part, so it took about 48
> seconds at each cycle.

It seems that the mem_map array logic is effective especially in large machine.
I'll review your mem_map array patchset after the next version is released.


Thanks
Atsushi Kumagai



More information about the kexec mailing list