[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