[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