ENOMEM failure on mmap call
Ezequiel García
elezegarcia at yahoo.com.ar
Thu Oct 13 13:29:32 EDT 2011
--- El jue 13-oct-11, Mulyadi Santosa <mulyadi.santosa at gmail.com> escribió:
> > I am sorry maybe I explained myself incorrectly,
> threads don't actually
> > allocate anything; just mmap it's own stack space (8MB
> each).
>
> I see, so 8 MB each.... and since you created 10 threads, I
> suppose
> that would commit 8*10=80 MB of RAM. CMIIW here.... (stack
> are
> individual, so they aren't shared between threads)
Reading sources I think kernel let the process create several
threads because as there is no real memory usage, the amount of free pages
on each thread allocation is the same.
I mean, when I start first thread I have enough free pages to allow
the mmap(). When I start the second, third, etc. I always have the
same amount of free pages, since threads don't alloc any pages they
just 'prepare' the adresses.
I'll try to put some printk inside vm_enough_memory() and try to re-run
my tests. Do you think there is any other debugging aproach?
By the way, I have already solved my problem (weeks ago) by reducing default
thread stack size :) But I would love to understand what happened.
It's a strange scenario for a linux kernel, since I have very low memory
left and zero swap.
Thanks a lot for the help!
More information about the Kernelnewbies
mailing list