On Sun, Sep 20, 2009 at 6:08 PM, Mark Farnell <mark.farnell@xxxxxxxxx> wrote: > Hi! > > I tried to mmap 16GB of memory (MAP_ANONYMOUS) for my program which > runs on amd64 ubuntu jaunty. However as long as I mmap more that 8GB, > it fails with ENOMEM > > if ((buf = mmap(NULL, (size_t)1024 * 1024 * 1024 * 16, PROT_READ | PROT_WRITE, > MAP_SHARED | MAP_ANONYMOUS, -1, 0)) == MAP_FAILED) { > perror("mmap()"); > abort(); > } > > The machine happens to have 4GB of physical memory installed > > but ulimit shows no limit on max memory: Not sure about the MAP_ANONYMOUS limit, but from my own little experience in x86 32 bit, it might be due to mmap is unable to find your requested length of process address space. When you request 16 GB of VMA, it means you ask kernel to create a VMA that long on your user address space and it must be unpartitioned. In other word, it is a single 16 GB VMA, not 4 times 4 GB VMA, or 8 times 2 GB VMA and so on. The question is, is it available in your case? Try to check /proc/<your process pid>/maps to find out by yourself NB: Please note that we're talking about address space, not the availability of free pages. -- regards, Mulyadi Santosa Freelance Linux trainer blog: the-hydra.blogspot.com -- To unsubscribe from this list: send an email with "unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx Please read the FAQ at http://kernelnewbies.org/FAQ