<div dir="ltr">Hi Junxiao,<br><div><br></div><div>Thank you very much for the information, it helped me a lot.</div><div>I wish you all the best.</div><div><br></div><div>Best regards,</div><div>Marwa</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Feb 23, 2021 at 5:18 PM Junxiao Shi <<a href="mailto:shijunxiao@email.arizona.edu">shijunxiao@email.arizona.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Hi Marwa</div><div><br></div><div>In NDN-DPDK (notice the correct spelling):</div><div>Allocation function is <font face="monospace">rte_pktmbuf_alloc</font>. It's invoked by the Ethernet adapter driver, such as <a href="https://github.com/DPDK/dpdk/blob/51fe32138c860992f228dbf19416ffd3b8e8baf4/drivers/net/mlx5/mlx5_rxq.c#L147" target="_blank">dpdk/drivers/net/mlx5/mlx5_rxq.c</a>.</div><div>Deallocation function is <font face="monospace">rte_pktmbuf_free</font>. For cached Data it's invoked by the CS eviction procedure, in <a href="https://github.com/usnistgov/ndn-dpdk/blob/0cc54f843f952ca568768545201a7b99e45ff9c1/csrc/pcct/cs-entry.h#L99" target="_blank">ndn-dpdk/csrc/pcct/cs-entry.h</a>.</div><div><br></div><div>I don't know about others.</div><div><br></div><div>Yours, Junxiao</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Feb 23, 2021 at 6:27 AM marwa kareem <<a href="mailto:m.kareem1305@coeng.uobaghdad.edu.iq" target="_blank">m.kareem1305@coeng.uobaghdad.edu.iq</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><p style="text-align:center"><font color="red"><strong>External Email</strong><br></font></p><div dir="ltr">Hi Junxiao,<br><div>Thank you for the explanation, now things become more clear to me.</div><div><br></div><div>Can you please refer to where buffers are handled in the  nfd and nfd- dpdk source code?</div><div><br></div><div>thanks,</div><div>Marwa</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Feb 23, 2021 at 6:33 AM Junxiao Shi <<a href="mailto:shijunxiao@email.arizona.edu" target="_blank">shijunxiao@email.arizona.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto">Hi Marwa<br><br><div class="gmail_quote" dir="auto"><div dir="ltr" class="gmail_attr"><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><br></div><div>1- In the content store you are using skip lists and hash tables in older versions 0.7.x, is the skip lists and hash tables have the ability to store the data packets? </div><div>because in the repository the btrees have been used, why? I,m confused about this point.</div></div></blockquote></div><div dir="auto"><br></div><div dir="auto">Typically the Content Store has an <b>index</b> pointing to packet buffers.</div><div dir="auto">When someone says the CS is a hash table, tree, trie, skip list, etc, it refers to the structure of the index.</div><div dir="auto"><br></div><div dir="auto">The packets themselves are stored in buffers elsewhere.</div><div dir="auto">In NFD, buffers are allocated via malloc; in NDN-DPDK, buffers are fetched from a pre-allocated mempool; I don't know how ccnd handles buffers.</div><div dir="auto"><br></div><div class="gmail_quote" dir="auto"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>2- why the number of contents have been used to measure the capacity of the content store and not something like (200MB, 300MB, ...)? </div></div></blockquote></div><div dir="auto"><br></div><div dir="auto">As I described above, a forwarder stores packets in buffers.</div><div dir="auto">In both NFD and NDN-DPDK, a buffer is allocated before receiving the packet from a socket or Ethernet adapter, and the packet stays in the same buffer until it's evicted / deleted.</div><div dir="auto">Since the packet length is unknown before receiving, every buffer must be able to accommodate the maximum packet length (around 9KB).</div><div dir="auto"><br></div><div dir="auto">As such, the CS capacity in bytes equals the CS capacity in packets multiplied by the maximum packet length.</div><div dir="auto">It has nothing to do with the actual packet length.</div><div dir="auto">In this case, it's easier to measure CS capacity in packets.</div><div dir="auto"><br></div><div dir="auto">Yours, Junxiao</div><div class="gmail_quote" dir="auto"></div><div class="gmail_quote" dir="auto"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto"><div dir="auto"><div class="gmail_quote" dir="auto"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
</blockquote></div></div></div>
</blockquote></div>
</blockquote></div></div>
</blockquote></div>
</blockquote></div></div>
</blockquote></div>