欢迎来到 DPDK交流社区 ,有什么问题可以尽管在这里提问,您将会收到社区其他成员的回答;也可以将您的总结写在这里,为社区其他成员提供帮助。 (QQ交流群:127163755)

DPDK在basicfwd.c中遇到的问题

0 投票
在basicfwd.c文件的lcore_main函数中有一段下面代码:

    /* Free any unsent packets. */
    if (unlikely(nb_tx < nb_rx)) {
      uint16_t buf;
      for (buf = nb_tx; buf < nb_rx; buf++)
      rte_pktmbuf_free(bufs[buf]);
   }

1.struct rte_mbuf *bufs[BURST_SIZE];

  const uint16_t nb_rx = rte_eth_rx_burst(port, 0, bufs, BURST_SIZE);

是否需要释放接受到的所有包(释放bufs所有的指针)?

2.如果需要释放,为什么没有发送的包需要释放 (nb_tx < nb_rx ),而已经发送的包不需要释放,难道是

调用发送函数rte_eth_tx_burst的时候释放了?
最新提问 10月 31, 2016 分类:DPDK API问答 | 用户: lz (1,090 分)

2 个回答

+2 投票
 
已采纳

It is the responsibility of the rte_eth_tx_burst() function to transparently free the memory buffers of packets previously sent. rte_eth_tx_burst会把发送成功的包释放掉,但是对于没有发送成功的包,则需要我们自己释放啦。

最新回答 10月 31, 2016 用户: zhouzijiang (560 分)
采纳于 11月 2, 2016 用户:lz
感谢~~~~~~~~~~~~~~~~~~~
0 投票

rte_eth_tx_burst

有返回值代表发送成功的个数

参考代码

                if (unlikely(ok_tx < nb_tx)) {
                    
                    do {
                        rte_pktmbuf_free(pkts_burst[ok_tx]);
                    } while (++ok_tx < nb_tx);
                    printf("rte_ring_dequeue_bulk fail%d\n", ok_tx);
                }

我的blog http://stdname.space 不定期更新dpdk文章

最新回答 11月 17, 2016 用户: bestboyxie (300 分)
...