2011-04-13 11:35:35

by naveen yadav

[permalink] [raw]
Subject: [ARM] Issue of memory compaction on kernel 2.6.35.9

Dear all,

we want to varify compaction on ARM and we are using 2.6.25.9 kernel
on cortex a9.

Since ARM does not have HUGETLB_PAGE support and compaction is HUGE
PAGE independent so I removed from config file

******************************************************************************************************************************
# support for memory compaction
config COMPACTION
bool "Allow for memory compaction"
select MIGRATION
#depends on EXPERIMENTAL && HUGETLB_PAGE && MMU
depends on EXPERIMENTAL && MMU
help
Allows the compaction of memory for the allocation of huge pages.
******************************************************************************************************************************
after triggering Memory Compaction by writing any value to
/proc/sys/vm/compact_memory?i am getting the SVC?mode crash
******************************************************************************************************************************
#echo 1 > /proc/sys/vm/compact_memory
Unable to handle kernel paging request at virtual address ee420be4
pgd = d9c6c000
[ee420be4] *pgd=00000000
Internal error: Oops: 805 [#1] PREEMPT
last sysfs file:
Modules linked in:
CPU: 0??? Not tainted? (2.6.35.9 #16)
PC is at compact_zone+0x178/0x610
LR is at compact_zone+0x138/0x610
pc : [<c009f30c>]??? lr : [<c009f2cc>]??? psr: 40000093
sp : d9d75e40? ip : c0380978? fp : d9d75e94
r10: d9d74000? r9 : c03806c8? r8 : 00069704
r7 : 00069800? r6 : 00d2e080? r5 : c04ea080? r4 : d9d75e9c
r3 : 60000093? r2 : 00000002? r1 : ee420be4? r0 : ee430b82
Flags: nZcv? IRQs off? FIQs on? Mode SVC_32? ISA ARM? Segment us
******************************************************************************************************************************


We tried to narrow down the prob... I found crash is form
?del_page_from_lru_list(zone, page, page_lru(page)); ? function
isolate_migratepages

{
-----------
/* Successfully isolated */
del_page_from_lru_list(zone, page, page_lru(page));

--------------------------------------------------
}

In my ARM board have only one zone (Node 0, zone???Normal)

******************************************************************************************************************************
VDLinux#> cat /proc/buddyinfo
Node 0, zone Normal 5 4 4 2 1 3 0
2 ?????3??????4??????2??????1??????7
******************************************************************************************************************************

Can some one guide why I am geeting the crash and how to debugg this problem


Thanks


2011-04-13 13:52:44

by Mel Gorman

[permalink] [raw]
Subject: Re: [ARM] Issue of memory compaction on kernel 2.6.35.9

On Wed, Apr 13, 2011 at 05:05:33PM +0530, naveen yadav wrote:
> Dear all,
>
> we want to varify compaction on ARM and we are using 2.6.25.9 kernel
> on cortex a9.
>
> Since ARM does not have HUGETLB_PAGE support and compaction is HUGE
> PAGE independent so I removed from config file
>

Bear in mind that if you intend to depend on compaction to allow
devices to use high-order allocations, you could be in trouble in
the future. Compaction gives no guarantees that high-order pages will
be available so a device must still be able to cope with allocation
failure. In the case of transparent hugepage support and hugetlbfs,
allocation failure is not a serious problem.

> ******************************************************************************************************************************
> # support for memory compaction
> config COMPACTION
> bool "Allow for memory compaction"
> select MIGRATION
> #depends on EXPERIMENTAL && HUGETLB_PAGE && MMU
> depends on EXPERIMENTAL && MMU
> help
> Allows the compaction of memory for the allocation of huge pages.
> ******************************************************************************************************************************
> after triggering Memory Compaction by writing any value to
> /proc/sys/vm/compact_memory?i am getting the SVC?mode crash
> ******************************************************************************************************************************
> #echo 1 > /proc/sys/vm/compact_memory
> Unable to handle kernel paging request at virtual address ee420be4
> pgd = d9c6c000
> [ee420be4] *pgd=00000000
> Internal error: Oops: 805 [#1] PREEMPT
> last sysfs file:
> Modules linked in:
> CPU: 0??? Not tainted? (2.6.35.9 #16)
> PC is at compact_zone+0x178/0x610
> LR is at compact_zone+0x138/0x610
> pc : [<c009f30c>]??? lr : [<c009f2cc>]??? psr: 40000093
> sp : d9d75e40? ip : c0380978? fp : d9d75e94
> r10: d9d74000? r9 : c03806c8? r8 : 00069704
> r7 : 00069800? r6 : 00d2e080? r5 : c04ea080? r4 : d9d75e9c
> r3 : 60000093? r2 : 00000002? r1 : ee420be4? r0 : ee430b82
> Flags: nZcv? IRQs off? FIQs on? Mode SVC_32? ISA ARM? Segment us
> ******************************************************************************************************************************
>
>
> We tried to narrow down the prob... I found crash is form
> ?del_page_from_lru_list(zone, page, page_lru(page)); ? function
> isolate_migratepages
>

ARM punches holes in the mem_map structure to save memory and
memory compaction is not aware of them because it couldn't have been
configured. Debug what PFN is failing and see if it is near a memory
hole. If it's within a memory hole, that's your problem.

--
Mel Gorman
SUSE Labs