hahn at physics.mcmaster.ca
Sat Aug 25 16:23:27 PDT 2001
> I ran into this problem as well - the basic problem seems to be that
> linux maps the shared libraries at around the 1GB mark, so you need to
> change this location in the kernel source code.
more generally, mmaps start at 1G by default (not just shlibs).
it's pretty cool that you can just "cat /proc/self/maps" to see this.
and you can indeed hack the kernel to change the 1G; there's actually
a somewhat more involved patch to make the mmap arena grow *down*,
so you can fix the max size of the stack instead of the heap.
it's conceivable this might get into 2.5.
it's also true that you can use a modern glibc whose malloc
will use both heap and mmap arenas; that doesn't give you a
big contig allocation, though.
you can also avoid the problem *entirely* by avoiding mmaps!
I posted a proof-of-concept of this here or linux-kernel
sometime in the past year - just avoid using stdio and any dynlibs ;)
(stdio seems to want to mmap a single page for an internal buffer,
even if you statically link...)
> addr = TASK_UNMAPPED_BASE;
note also that some Linux ports have this configurable -
I think it's ia64 that has it set in /proc...
otoh, it's sort of moot on big-address hardware ;)
regards, mark hahn.
More information about the Beowulf