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