Ok, but I&#39;m freeing all memory allocated my malloc() on each loop iteration. The max dynamic memory used by the program at any point is 64Kb... The program is basically this:<div><br></div><div>for (;;) {</div><div>  p = malloc(65536);</div>
<div>  free (p);</div><div>}<br><br><div class="gmail_quote">El 22 de septiembre de 2011 23:49, Timothy Roscoe <span dir="ltr">&lt;<a href="mailto:troscoe@inf.ethz.ch">troscoe@inf.ethz.ch</a>&gt;</span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
Hi Zeus,<br>
<br>
At the risk of asking a very naive question,<br>
<div class="im"><br>
&gt; The program is always stopping after allocating about 1Gb of memory,<br>
&gt; which is the size of the physical memory of the virtual machine....<br>
<br>
</div> - could this simply be a case of you running out of physical memory<br>
(Barrelfish doesn&#39;t overcommit memory, and does not page to disk), and<br>
Barrelfish being less than informative about the situation?<br>
<br>
 -- Mothy<br>
<div><div></div><div class="h5"><br>
At Thu, 22 Sep 2011 19:33:49 +0200, Zeus Gómez Marmolejo &lt;<a href="mailto:zeus.gomez@bsc.es">zeus.gomez@bsc.es</a>&gt; wrote:<br>
&gt; Hi Simon,<br>
&gt;<br>
&gt; Thanks for the patch. Now it takes a bit longer ... but it ends up by<br>
&gt; returning NULL anyway. The above program didn&#39;t change.<br>
&gt;<br>
&gt; &gt; spawnd.0: spawning /x86_64/sbin/myapp on core 0<br>
&gt; myapp.0 in main() ../barrelfish/usr/tests/myapp/myapp.c:12<br>
&gt; malloc() returned NULL at 30710<br>
&gt; Aborted<br>
&gt;<br>
&gt;<br>
&gt; To add originality to the situation, sometimes I get this error too:<br>
&gt;<br>
&gt; ERROR: mem_serv.0 in mem_lmp_default_error_handler()<br>
&gt; ./x86_64/lib/barrelfish/_for_lib_barrelfish/mem_flounder_bindings.c:1328<br>
&gt; ERROR: asynchronous error in Flounder-generated mem lmp binding (default<br>
&gt; handler)<br>
&gt; Failure: (  libbarrelfish) Failure in lmp_chan_alloc_recv_slot()<br>
&gt; [LIB_ERR_LMP_ALLOC_RECV_SLOT]<br>
&gt; Failure: (  libbarrelfish) Failure in slot_alloc() [LIB_ERR_SLOT_ALLOC]<br>
&gt; Failure: (  libbarrelfish) Failure in cnode_create() [LIB_ERR_CNODE_CREATE]<br>
&gt; Failure: (  libbarrelfish) Failure in ram_alloc() [LIB_ERR_RAM_ALLOC]<br>
&gt; Failure: (          libmm) No matching node found [MM_ERR_NOT_FOUND]<br>
&gt; Aborted<br>
&gt;<br>
&gt;<br>
&gt; To give you some hints about the first error, it fails when calling<br>
&gt; to vspace_mmu_aware_map() in morecore.c:59 with error<br>
&gt; LIB_ERR_FRAME_CREATE_MS_CONSTRAINTS. It turns out that (step &lt;<br>
&gt; BASE_PAGE_SIZE). As this is the first call to that function in the loop, the<br>
&gt; buffer is NULL.<br>
&gt;<br>
&gt; As I see, in the latest version the debug_err() has been removed when<br>
&gt; reaching this condition.<br>
&gt;<br>
&gt;<br>
&gt; Thanks for your help,<br>
&gt; zeus.<br>
&gt;<br>
&gt;<br>
&gt; El 22 de septiembre de 2011 16:25, Simon Peter &lt;<a href="mailto:speter@inf.ethz.ch">speter@inf.ethz.ch</a>&gt;escribió:<br>
&gt;<br>
&gt; &gt; I think I found the issue. Here&#39;s a patch:<br>
&gt; &gt;<br>
&gt; &gt; diff -r 215f069a289c lib/barrelfish/vspace/mmu_**aware.c<br>
&gt; &gt; --- a/lib/barrelfish/vspace/mmu_**aware.c Tue Sep 20 15:18:31 2011 +0200<br>
&gt; &gt; +++ b/lib/barrelfish/vspace/mmu_**aware.c Thu Sep 22 16:23:43 2011 +0200<br>
&gt; &gt; @@ -227,6 +227,7 @@<br>
&gt; &gt;<br>
&gt; &gt;     // Reduce offset<br>
&gt; &gt;     state-&gt;offset -= bytes;<br>
&gt; &gt; +    state-&gt;consumed -= bytes;<br>
&gt; &gt;     if (success) {<br>
&gt; &gt;         state-&gt;mapoffset = min_offset;<br>
&gt; &gt;     }<br>
&gt; &gt;<br>
&gt; &gt;  -- Simon<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; On 22.09.2011 13:23, Zeus Gómez Marmolejo wrote:<br>
&gt; &gt;<br>
&gt; &gt;&gt; I&#39;m running free() under the debugger and the x86_64 specific hack is<br>
&gt; &gt;&gt; not firing.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; It&#39;s going through lesscore() and then from a quick view it seems that<br>
&gt; &gt;&gt; is doing it ok:<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; memobj_anon unfill(), calling to the x86_64 pmap unmap and then calling<br>
&gt; &gt;&gt; to the kernel vnode_unmap(). Finally track_frame_return()...<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; I don&#39;t see anything wrong here, it seems it&#39;s not skipping anything...<br>
&gt; &gt;&gt; The curious thing is that the pointer returned by malloc() is always the<br>
&gt; &gt;&gt; same. So it &quot;seems&quot; that free is working correctly.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
</div></div><div class="im">&gt; &gt;&gt; zeus.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; El 22 de septiembre de 2011 01:33, Baumann Andrew &lt;<a href="mailto:andrewb@inf.ethz.ch">andrewb@inf.ethz.ch</a><br>
&gt; &gt;&gt; &lt;mailto:<a href="mailto:andrewb@inf.ethz.ch">andrewb@inf.ethz.ch</a>&gt;&gt; escribió:<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    Hi Zeus,____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    __ __<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    We’re really bad with reclaiming memory, but I didn’t know it was<br>
&gt; &gt;&gt;    that bad! Honestly, there’s no good reason I can see for our heap<br>
&gt; &gt;&gt;    being that broken. From the quick glance through the code<br>
&gt; &gt;&gt;    (lib/c/src/malloc.c) my guess is that either the x86_64-specific<br>
&gt; &gt;&gt;    hack to avoid freeing memory allocated on another core is firing<br>
&gt; &gt;&gt;    incorrectly, or lesscore() is firing and doing something dumb. Could<br>
&gt; &gt;&gt;    you check which it is?____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    __ __<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    I’m CCing Simon, who should know more about the workings of<br>
&gt; &gt;&gt;    lesscore().____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    __ __<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    Andrew____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    __ __<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    *From:* Zeus Gómez Marmolejo [mailto:<a href="mailto:zeus.gomez@bsc.es">zeus.gomez@bsc.es</a><br>
&gt; &gt;&gt;    &lt;mailto:<a href="mailto:zeus.gomez@bsc.es">zeus.gomez@bsc.es</a>&gt;]<br>
&gt; &gt;&gt;    *Sent:* Wednesday, 21 September, 2011 6:14<br>
</div>&gt; &gt;&gt;    *To:* barrelfish-users@lists.inf.**<a href="http://ethz.ch" target="_blank">ethz.ch</a>&lt;<a href="mailto:barrelfish-users@lists.inf.ethz.ch">barrelfish-users@lists.inf.ethz.ch</a>&gt;<br>
&gt; &gt;&gt;    &lt;mailto:<a href="mailto:barrelfish-users@">barrelfish-users@</a>**<a href="http://lists.inf.ethz.ch" target="_blank">lists.inf.ethz.ch</a>&lt;<a href="mailto:barrelfish-users@lists.inf.ethz.ch">barrelfish-users@lists.inf.ethz.ch</a>&gt;<br>

<div><div></div><div class="h5">&gt; &gt;&gt; &gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    *Subject:* [Barrelfish-users] Bug in malloc()/free() ?____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    __ __<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    Hi,____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    __ __<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    Here I introduce you a pretty simple program:____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    __ __<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    int main(int argc, char **argv)____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    {____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    void *p;____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    int i;____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    ____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    for(i=0; ;i++)____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    {____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    p = malloc(65536);____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    if (p==NULL)____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    USER_PANIC(&quot;malloc() returned NULL at %d&quot;, i);____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    free (p);____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    }____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    ____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    return 0;____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    }____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    __ __<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    This is ALWAYS aborting as:____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    __ __<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    ERROR: myapp.0 in morecore_alloc()<br>
&gt; &gt;&gt;    ../barrelfish/lib/barrelfish/**morecore.c:85____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    ERROR: vspace_mmu_aware_map fail____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    Failure: ( libbarrelfish) Out of space in vspace_mmu_aware_map()<br>
&gt; &gt;&gt;    function [LIB_ERR_VSPACE_MMU_AWARE_NO_**SPACE]____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    myapp.0 in main() ../barrelfish/usr/tests/myapp/**myapp.c:12____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    malloc() returned NULL at 16382____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    Aborted____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    __ __<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    With the latest Barrelfish tree. Are you aware of this?____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    __ __<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    __ __<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    --<br>
&gt; &gt;&gt;    Zeus Gómez Marmolejo<br>
&gt; &gt;&gt;    Barcelona Supercomputing Center<br>
&gt; &gt;&gt;    PhD student<br>
&gt; &gt;&gt;    <a href="http://www.bsc.es" target="_blank">http://www.bsc.es</a><br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    ____<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; --<br>
&gt; &gt;&gt; Zeus Gómez Marmolejo<br>
&gt; &gt;&gt; Barcelona Supercomputing Center<br>
&gt; &gt;&gt; PhD student<br>
&gt; &gt;&gt; <a href="http://www.bsc.es" target="_blank">http://www.bsc.es</a><br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Zeus Gómez Marmolejo<br>
&gt; Barcelona Supercomputing Center<br>
&gt; PhD student<br>
&gt; <a href="http://www.bsc.es" target="_blank">http://www.bsc.es</a><br>
&gt;<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>Zeus Gómez Marmolejo<br>Barcelona Supercomputing Center<br>PhD student<br><a href="http://www.bsc.es" target="_blank">http://www.bsc.es</a><br><br>
<br>
</div>