ZBLOG

翻译这段注释 /** * * Retrieve a burst of input packets from a receive queue of an Ethernet * device. The retrieved packets are stored in *rte_mbuf* structures whose * pointers are supplied in the *rx_pkts* array. * * The rte_eth_rx_burst() functio...

/** *

  • 从以太网设备的接收队列中检索输入数据包突发。将检索到的数据包存储在rx_pkts数组中提供的*rte_mbuf*结构体指针中。 *
  • rte_eth_rx_burst()函数循环解析接收队列的RX环,最多达到nb_pkts个数据包。对于环中每个完成的RX描述符,它执行以下操作: *
  • - 根据NIC提供的信息初始化与RX描述符相关联的*rte_mbuf*数据结构。 *
  • - 将*rte_mbuf*数据结构存储到rx_pkts数组的下一个条目中。 *
  • - 使用在初始化时与接收队列关联的内存池中分配的新的*rte_mbuf*缓冲区填充RX描述符。 *
  • 当检索由控制器散布到多个接收描述符中的输入数据包时,rte_eth_rx_burst()函数将相关的*rte_mbuf*缓冲区附加到数据包的第一个缓冲区上。 *
  • rte_eth_rx_burst()函数返回实际检索到的数据包数,即有效地提供给rx_pkts数组中的*rte_mbuf*数据结构的数量。
  • 返回值等于nb_pkts表示RX队列至少包含rx_pkts个数据包,这可能意味着其他已接收数据包仍然留在输入队列中。实现“尽可能多地检索已接收的数据包”的应用程序可以检查这种特殊情况,然后继续调用rte_eth_rx_burst()函数,直到返回小于nb_pkts的值。 *
  • 此接收方法具有以下优点: *
  • -它允许以运行到完成的网络堆栈引擎以快速突发式方法检索和立即处理接收到的数据包,避免不必要的中间数据包队列/出队操作的开销。 *
  • -相反,它还允许异步导向的处理方法检索接收到的数据包突发,并立即将其排队以供其他逻辑核心进一步并行处理。但是,与驱动程序单独排队接收数据包不同,此方法允许调用者在一次中排队一批检索到的数据包,从而大大减少每个数据包的入队/出队操作成本。 *
  • -它使驱动程序的rte_eth_rx_burst()函数能够利用突发式硬件特性(CPU缓存、预取指令等)来最小化每个数据包的CPU周期数。 *
  • 总之,提出的接收API在同步和异步数据包处理环境中都可以实现许多突发式优化,而且在两种情况下都没有额外的开销。 *
  • rte_eth_rx_burst()函数不提供任何错误通知以避免相应的开销。作为提示,上层应用程序一旦对于给定尝试次数系统地返回0值,就可以检查设备链接的状态。 *
  • @param port_id
  • 以太网设备的端口ID。
  • @param queue_id
  • 要从其中检索输入数据包的接收队列的索引。该值必须在0到nb_rx_queue-1之间,这是前面供应给rte_eth_dev_configure()函数的。
  • @param rx_pkts
  • 指向*rte_mbuf*结构体指针的数组的地址,必须足够大,以便在其中存储nb_pkts个指针。
  • @param nb_pkts
  • 要检索的最大数据包数。
  • @return
  • 实际检索到的数据包数,即有效地提供给rx_pkts数组中的*rte_mbuf*结构体指针的数量。 */

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=442

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?