[PATCH v2 00/10] Support free page filtering looking up mem_map array
HATAYAMA Daisuke
d.hatayama at jp.fujitsu.com
Fri Nov 16 00:01:30 EST 2012
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.
* 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