ENOMEM failure on mmap call
Mulyadi Santosa
mulyadi.santosa at gmail.com
Thu Oct 13 14:02:16 EDT 2011
hi again :)
2011/10/14 Ezequiel García <elezegarcia at yahoo.com.ar>:
> 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 agree, as long as Copy on Write hasn't kicked in.... sometimes it's
the commited amount of memory that matters, sometimes how much memory
you really allocate that matters.
Around 2006, I wrote an article about Out of Memory killer, somehow
related to this issue. Maybe you are interested to read it:
http://linuxdevcenter.com/pub/a/linux/2006/11/30/linux-out-of-memory.html
> 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.
So, the stack area is shared among those threads?
> 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?
IMO, that one way to go :) of course nowadays you have ftrace etc, but
still, printk followed by kernel recompilation is still easiest IMHO
:)
> 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.
Welcome to the OOM world :)
> It's a strange scenario for a linux kernel, since I have very low memory
> left and zero swap.
I think it's not that strange, we just have to understand the
behaviour. And perhaps your application must anticipate it by
gradually decreasing such memory allocation whenever you hit such
error.
> Thanks a lot for the help!
You welcome and sorry I don't lend too much help here...
--
regards,
Mulyadi Santosa
Freelance Linux trainer and consultant
blog: the-hydra.blogspot.com
training: mulyaditraining.blogspot.com
More information about the Kernelnewbies
mailing list