Il 04/06/2013 16:38, Peter Lieven ha scritto: > On 04.06.2013 16:14, Paolo Bonzini wrote: >> Il 04/06/2013 15:52, Peter Lieven ha scritto: >>> On 30.05.2013 16:41, Paolo Bonzini wrote: >>>> Il 30/05/2013 16:38, Peter Lieven ha scritto: >>>>>>> You could also scan the page for nonzero values before writing it. >>>>> i had this in mind, but then choosed the other approach.... turned >>>>> out to be a bad idea. >>>>> >>>>> alexey: i will prepare a patch later today, could you then please >>>>> verify it fixes your problem. >>>>> >>>>> paolo: would we still need the madvise or is it enough to not write >>>>> the zeroes? >>>> It should be enough to not write them. >>> Problem: checking the pages for zero allocates them. even at the source. >> It doesn't look like. I tried this program and top doesn't show an >> increasing amount of reserved memory: >> >> #include <stdio.h> >> #include <stdlib.h> >> int main() >> { >> char *x = malloc(500 << 20); >> int i, j; >> for (i = 0; i < 500; i += 10) { >> for (j = 0; j < 10 << 20; j += 4096) { >> *(volatile char*) (x + (i << 20) + j); >> } >> getchar(); >> } >> } > strange. we are talking about RSS size, right?
None of the three top values change, and only VIRT is >500 MB. > is the malloc above using mmapped memory? Yes. > which kernel version do you use? 3.9. > what avoids allocating the memory for me is the following (with > whatever side effects it has ;-)) This would also fail to migrate any page that is swapped out, breaking overcommit in a more subtle way. :) Paolo