Hi, <div><br></div><div>Yes, at first I was trying to send the message as a byte array as you mentioned. But since my typical </div><div>message size is about 4~8 KB, and I found that Flounder generates a quite long sending function (~15k lines </div>

<div>of code, I don&#39;t remember). This is because Flounder will divide the message body into small fragments and </div><div>send them in a switch statement... That&#39;s why I choose to send the message cap.</div><div>

<br></div><div>Is sending cap a expensive operation? I don&#39;t know. I thought I just sent the capref itself (a few bytes), but not</div><div>sending the whole frame which the capref points to. Do you mean when I send a capref of a 8KB frame, there will</div>

<div>be a actually a 8KB memory copy underlying ? If true, then I may really need considering using the bulk transfer</div><div>library.</div><div><br></div><div>Thanks,</div><div>Jinghao</div><div><br><div class="gmail_quote">

2012/3/28 Baumann  Andrew <span dir="ltr">&lt;<a href="mailto:andrewb@inf.ethz.ch">andrewb@inf.ethz.ch</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">







<div lang="EN-AU" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Hi,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">This is a very inefficient way to send a message. Sending the cap is an expensive operation. If the messages you are sending are relatively small (e.g. a few
 hundred bytes), you can send them as a byte array (e.g. uint8 buf[len] in a flounder spec). If the messages are large, you should probably look into using the bulk transport library, which uses shared memory under the covers, but is more efficient about reusing
 the same memory and not transferring capabilities with each message.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">To answer your direct question, it looks like what you are doing is correct, but I doubt that the system correctly reclaims all the memory, and I know that
 revoke is broken across cores in the current tree. You may also find it is easier to unmap and delete the cap on both cores, rather than revoking it on the sender side.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Andrew<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;">From:</span></b><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;"> Shi Jinghao (</span><span lang="ZH-CN" style="font-size:10.0pt">史经浩)</span><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;">
 [mailto:<a href="mailto:jhshi@cs.hku.hk" target="_blank">jhshi@cs.hku.hk</a>] <br>
<b>Sent:</b> Tuesday, 27 March, 2012 6:28<br>
<b>To:</b> <a href="mailto:barrelfish-users@lists.inf.ethz.ch" target="_blank">barrelfish-users@lists.inf.ethz.ch</a><br>
<b>Subject:</b> [Barrelfish-users] Fwd: How to reclaim the memory allocated by frame_alloc?<u></u><u></u></span></p><div><div class="h5">
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Just realize that I sent the mail using gmail, which seems be filtered by this maillist. Please ignore this<u></u><u></u></p>
<div>
<p class="MsoNormal">if you&#39;ve seen it.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Regards,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">Jinghao<u></u><u></u></p>
<div>
<p class="MsoNormal">---------- Forwarded message ----------<br>
From: <b>Shi Jinghao</b> &lt;<a href="mailto:jhshi89@gmail.com" target="_blank">jhshi89@gmail.com</a>&gt;<br>
Date: Tue, Mar 27, 2012 at 9:23 PM<br>
Subject: How to reclaim the memory allocated by frame_alloc?<br>
To: <a href="mailto:barrelfish-users@lists.inf.ethz.ch" target="_blank">barrelfish-users@lists.inf.ethz.ch</a><br>
<br>
<br>
Hi,<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I need to send message between cores in barrelfish (X86_32). And somehow I decide to send the capability <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">of a frame that contains the message, since the message will have variable size. And I was wondering what&#39;s<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">the proper way to reclaim the message frame when it&#39;s useless.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I create a message frame like this (details like error checking are omitted, also for simplicity, assume message<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">size is fixed (MSG_SIZE)):<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">    // allocate a frame capability<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    struct capref* msgcap = (struct capref*) malloc (sizeof(struct capref));<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    frame_alloc(msgcap, MSG_SIZE, NULL);<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    // map to my address space so I can fill the message body<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    struct my_message* msg;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    vspace_map_one_frame_attr((void**)&amp;msg, MSG_SIZE, *msgcap, VREGION_FLAGS_READ_WRITE, NULL, NULL);<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Then I send the frame cap to another process (on a different core). <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">On receiver side, I get the message like this:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">    struct my_message* msg;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    vspace_map_one_frame_attr(&amp;msg, MSG_SIZE, msgcap, VREGION_FLAGS_READ_WRITE, NULL, NULL);<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">However, how am I supposed to reclaim the message? Based on my understanding, my current try is:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">    // on sender side<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    cap_revoke(*msgcap);<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    cap_destroy(*msgcap);<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    free(msgcap);  // msgcap is allocated by malloc<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    vspace_unmap(msg);<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">    // on receiver side<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">    vspace_unmap(msg);<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">But I don&#39;t know if this is the right way to do it. (Though no explicit problem occurs until now). Any suggestions on this?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">PS: on receiver side, vspace_map_on_frame_attr won&#39;t allocate any new memory, right? So after this, sender and receiver<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">will share the same physical memory. Please clarify if my understanding is right.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks for your reading.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Regards,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Jinghao<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div></div></div>
</div>

</blockquote></div><br></div>