[rfc] allow to boot with >= 256GB physmem

Sergey Kandaurov pluknet at gmail.com
Fri Jan 21 16:09:12 UTC 2011


Hello.

Some time ago I faced with a problem booting with 400GB physmem.
The problem is that vm.max_proc_mmap type overflows with
such high value, and that results in a broken mmap() syscall.
The max_proc_mmap value is a signed int and roughly calculated
at vmmapentry_rsrc_init() as u_long vm_kmem_size quotient:
vm_kmem_size / sizeof(struct vm_map_entry) / 100.

Although at the time it was introduced at svn r57263 the value
was quite low (f.e. the related commit log stands:
"The value defaults to around 9000 for a 128MB machine."),
the problem is observed on amd64 where KVA space after
r212784 is factually bound to the only physical memory size.

With INT_MAX here is 0x7fffffff, and sizeof(struct vm_map_entry)
is 120, it's enough to have sligthly less than 256GB to be able
to reproduce the problem.

I rewrote vmmapentry_rsrc_init() to set large enough limit for
max_proc_mmap just to protect from integer type overflow.
As it's also possible to live tune this value, I also added a
simple anti-shoot constraint to its sysctl handler.
I'm not sure though if it's worth to commit the second part.

As this patch may cause some bikeshedding,
I'd like to hear your comments before I will commit it.

http://plukky.net/~pluknet/patches/max_proc_mmap.diff

-- 
wbr,
pluknet
-------------- next part --------------
A non-text attachment was scrubbed...
Name: max_proc_mmap.diff
Type: application/octet-stream
Size: 1484 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-hackers/attachments/20110121/9ef5757c/max_proc_mmap.obj


More information about the freebsd-hackers mailing list