[PATCH v2 00/10] Support free page filtering looking up mem_map array

Atsushi Kumagai kumagai-atsushi at mxc.nes.nec.co.jp
Fri Nov 16 02:05:04 EST 2012


Hello HATAYAMA-san,

On Fri, 16 Nov 2012 14:01:30 +0900
HATAYAMA Daisuke <d.hatayama at jp.fujitsu.com> wrote:

> This patch set implements filtering free pages looking up mem_map
> array instead of free lists. This is compatible for cyclic mode
> because looking up mem_map can be divided into cycles. On the other
> hand, dividing free pages contaiend in free lists is difficult since
> they are not sorted in physical-address order.

Thank you very much for your hard work.
I will release v1.5.1-rc with this patch set soon.

Thanks
Atsushi Kumagai

> 
> * Changes
> 
> v1 => v2:
>   - If debuginfo is not available enough, switch logic to freelist
>     one. On v1, free page filtering was disabled in this case.
>   - Add hard-coded values in wider kernel versions.
>   - If some free pages possibly fail to be filtered, try to correct
>     cyclic buffer size appropreately.
>   - Correct the comment explaining the cyclic buffer overrun, which
>     was broken on v1.
> 
> RFC => v1:
>   - Logic is automatically selected at runtime according to the
>     current mode. In cyclic mode, mem_map array logic is used. In
>     non-cyclic mode, free list logic is used.
>   - The RFC version is:
>     http://lists.infradead.org/pipermail/kexec/2012-June/006441.html
> 
> * TODO
> 
> Add the following values in VMCOREINFO on the upstream kernel. These
> are used in the mem_map logic.
> 
>   - OFFSET(page._mapcount)
>   - OFFSET(page.private)
>   - SIZE(pageflags)
>   - NUMBER(PG_buddy)
>   - NUMBER(PG_slab)
>   - NUMBER(PAGE_BUDDY_MAPCOUNT_VALUE)
> 
> * Test
> 
> I tested this patch set on the following kernel versions.
> 
> - 3.4
> - 3.1
> - 2.6.38
> - 2.6.32
> - 2.6.18
> 
> On the test, I manually specified VMCOREINFO while extending it with
> the following values according to the kernel versions.
> 
> - 3.1, 3.4
> NUMBER(PG_slab)=7
> SIZE(pageflags)=4
> OFFSET(page._mapcount)=24
> OFFSET(page.private)=48
> NUMBER(PAGE_BUDDY_MAPCOUNT_VALUE)=-128
> 
> - 2.6.38
> SIZE(pageflags)=4
> OFFSET(page._mapcount)=12
> OFFSET(page.private)=16
> NUMBER(PG_slab)=7
> NUMBER(PAGE_BUDDY_MAPCOUNT_VALUE)=-2
> 
> - 2.6.32
> NUMBER(PG_slab)=7
> NUMBER(PG_buddy)=19
> OFFSET(page._mapcount)=12
> OFFSET(page.private)=16
> SIZE(pageflags)=4
> 
> - 2.6.18
> NUMBER(PG_slab)=7
> NUMBER(PG_buddy)=19
> OFFSET(page._mapcount)=12
> OFFSET(page.private)=16
> 
> ---
> 
> HATAYAMA Daisuke (10):
>       Warn cyclic buffer overrun and correct it if possible
>       Add page_is_buddy for old kernels
>       Add page_is_buddy for PG_buddy
>       Add page_is_buddy for recent kernels
>       Exclude free pages by looking up mem_map array
>       Add hardcoded page flag values
>       Add debuginfo-related processing for VMCOREINFO/VMLINUX
>       Add new parameters to various tables
>       Add debuginfo interface for enum type size
>       Move page flags setup for old kernels after debuginfo initialization
> 
> 
>  dwarf_info.c   |   18 ++++
>  dwarf_info.h   |    1 
>  makedumpfile.c |  226 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
>  makedumpfile.h |   35 ++++++++-
>  4 files changed, 269 insertions(+), 11 deletions(-)
> 
> -- 
> 
> Thanks.
> HATAYAMA, Daisuke



More information about the kexec mailing list