misc/129396: [kern] cannot set vm.kmem_size_max beyond 3GB

Weldon Godfrey wgodfrey at ena.com
Wed Dec 3 10:20:02 PST 2008


>Number:         129396
>Category:       misc
>Synopsis:       [kern] cannot set vm.kmem_size_max beyond 3GB
>Confidential:   no
>Severity:       serious
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Dec 03 18:20:01 UTC 2008
>Closed-Date:
>Last-Modified:
>Originator:     Weldon Godfrey
>Release:        FreeBSD 7.1-PRERELEASE amd64
>Organization:
ENA
>Environment:
FreeBSD store1.mail.ena.net 7.1-PRERELEASE FreeBSD 7.1-PRERELEASE #2: Thu Nov 20 10:41:36 CST 2008     root at store1.mail.ena.net:/usr/obj/usr/src/sys/GENERIC  amd64
>Description:
I noticed during my testing, while trying to copy two 2TB files at the same time (I am using ZFS), when the files get to a certain size, the system panics.  It didn't dump core or log a reason in syslog, however, one time it managed not to reboot (just hang after panic) and I was able to capture that it was complaining that kmem was too small.

I thought that was odd, since I have set the max to 15GB (the system has 16GB of RAM), so I checked sysctl and vm.kmem_max was only at 3GB.  This is in my loader.conf:
vm.kmem_size_max="16106127360"
vm.kmem_size="1073741824"
checking right after boot, the vm.kmem_size was set, it was at 1073741824

here is sysctl right after reboot with the above loader.conf:
store1# sysctl -a | grep kmem
vm.kmem_size_scale: 3
vm.kmem_size_max: 3221225472
vm.kmem_size_min: 0
vm.kmem_size: 1073741824
store1# sysctl -a | grep kern.maxvn
kern.maxvnodes: 100000
store1#



As a work-a-round, I tried to set these options in the kernel config and recompile the kernel, it won't compile, this is the error:

cc -c -O2 -frename-registers -pipe -fno-strict-aliasing  -std=c99 -g -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual  -Wundef -Wno-pointer-sign -fformat-extensions -nostdinc  -I. -I/usr/src/sys -I/usr/src/sys/contrib/altq -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h -fno-common -finline-limit=8000 --param inline-unit-growth=100 --param large-function-growth=1000  -mcmodel=kernel
-mno-red-zone-mfpmath=387 -mno-sse -mno-sse2 -mno-mmx -mno-3dnow -msoft-float -fno-asynchronous-unwind-tables -ffreestanding -Werror /usr/src/sys/kern/kern_malloc.c
cc1: warnings being treated as errors
/usr/src/sys/kern/kern_malloc.c: In function 'kmeminit':
/usr/src/sys/kern/kern_malloc.c:598: warning: large integer implicitly truncated to unsigned type
*** Error code 1


>How-To-Repeat:
try to set vm.kmem_size_max or OPTIONS VM_KMEM_SIZE_MAX beyond 3221225472
>Fix:
I am guessing these tunables need a larger cast?

u_int vm_kmem_size;
SYSCTL_UINT(_vm, OID_AUTO, kmem_size, CTLFLAG_RD, &vm_kmem_size, 0,
    "Size of kernel memory");
 
u_int vm_kmem_size_min;
SYSCTL_UINT(_vm, OID_AUTO, kmem_size_min, CTLFLAG_RD, &vm_kmem_size_min, 0,  
    "Minimum size of kernel memory");
 
u_int vm_kmem_size_max;
SYSCTL_UINT(_vm, OID_AUTO, kmem_size_max, CTLFLAG_RD, &vm_kmem_size_max, 0,
    "Maximum size of kernel memory");
   
u_int vm_kmem_size_scale;
SYSCTL_UINT(_vm, OID_AUTO, kmem_size_scale, CTLFLAG_RD, &vm_kmem_size_scale, 0,
    "Scale factor for kernel memory size");

>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list