On Mon, Dec 5, 2011 at 4:15 PM, Arnaud Lacombe <lacombar@gmail.com> wrote:
> Hi,
>
> A FreeBSD 7-STABLE miserably crashes on the following:
>
> Fatal trap 12: page fault while in kernel mode
> cpuid = 0; apic id = 00
> fault virtual address = 0xbfef0000
> fault code = supervisor read, page not present
> instruction pointer = 0x20:0xc05fd1c2
> stack pointer = 0x28:0xc0af6c7c
> frame pointer = 0x28:0xc0af6cc0
> code segment = base 0x0, limit 0xfffff, type 0x1b
> = DPL 0, pres 1, def32 1, gran 1
> processor eflags = interrupt enabled, resume, IOPL = 0
> current process = 0 ()
> trap number = 12
> panic: page fault
> cpuid = 0
> KDB: stack
> backtrace:
> db_trace_self_wrapper(c0662728,0,c062b78b,c0af6b28,0,...) at
> db_trace_self_wrapper+0x26panic(c062b78b,c06639cc,c06c1de4,1,1,...) at
> panic+0x106trap_fatal(c0c74388,c065b897,c064d922,10,c0c74000,...) at
> trap_fatal+0x270
> trap_pfault(c06d4e40,c0c74380,c0af6c40,3,c06c1bc0,...) at trap_pfault+0x2aa
> trap(c0af6c3c) at trap+0x36ecalltrap() at calltrap+0x6
> --- trap 0xc, eip = 0xc05fd1c2, esp = 0xc0af6c7c, ebp = 0xc0af6cc0 ---
> pmap_map(c0af6d68,3f6ba000,6,3fef8000,6,...) at pmap_map+0x72
> vm_page_startup(c0d3e000,a,c0af6d88,c03f8f26,0,...) at
> vm_page_startup+0x35a
> vm_mem_init(0,af0000,af0020,af0000,0,...) at vm_mem_init+0x18
> mi_startup() at mi_startup+0x56begin() at begin+0x2c
>
> on a machine with 24GB of RAM, while PAE is meant to support up to 64GB.
>
> - Arnaud
>
> ps: this is just a report, I'm not really expecting anything, any
> longer, from the FreebSD "community".
>
>
At this early stage in the boot process, the page table pages for the
kernel address space must be statically allocated. When PAE was still
actively used, it was unusual to find machines that had more than about
16GB of RAM. So, the static allocation of page table pages was set
accordingly. For larger machines, it is necessary to increase NKPT. The
following comment appears in i386/include/pmap.h:
/* Initial number of kernel page tables. */
#ifndef NKPT
#ifdef PAE
/* 152 page tables needed to map 16G (76B "struct vm_page", 2M page
tables). */
#define NKPT 240
#else
/* 18 page tables needed to map 4G (72B "struct vm_page", 4M page
tables).
*/
#define NKPT 30
#endif
#endif
That said, a machine with 24GB of RAM is likely not going to be usable for
many workloads unless you also increase the size of the kernel virtual
address space (and thereby reduce the size of the user virtual address
space).
Regards,
Alan