Ivan Gyurdiev wrote:
I tries that with the exact same results... Attempted mmap_anon of size 200MB...fails...Steam fails, with ENOMEM.
Here's the exact mmap call... it's the only one that fails, and it's the largest without MAP_NORESERVE.
mmap2(NULL, 209780736, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = -1 ENOMEM (Cannot allocate memory)
You've probably got a fragmented address space caused by having a lot of dynamic libraries loaded at different addresses...
Running the same call from a test program suceeds - I can mmap() things that are an order of magnitude larger without problems (as a regular user).
...which doesn't happen in your test program as it doesn't use as many. Remember that it takes only one page of memory sitting at the wrong virtual memory address to divide the available contiguous addresses in half. I would suggest playing around with the prelink tool to put dynamic libraries in better positions in memory.
Rob