2016-08-16 72 views
1

假设在典型的DPDK应用程序中,lcore从队列0的端口0接收数据包流。处理后,它将它们转发到队列0端口1.我们如何知道我们正面临丢包风险。即处理速率低于收入速率,并且积压数据包的数量将大于接收队列大小。例如,当我们使用rte_eth_rx_burst()接收数据包并检索MAX可能的数据包时,我们可以说什么?我们如何检测丢包或丢包风险?如何检测DPDK中的丢包风险?

+0

你有端口计数器。 http://dpdk.org/doc/api/rte__ethdev_8h.html看看如何获​​得计数器,然后你可以看到滴/错误。 – roni

回答

1

使用rte_eth_stats_get您可以获取接口统计信息。由该函数填充的rte_eth_stats结构包含字段rx_nombufimissed,这可能是您要查找的内容。

查看docsrte_ethdev了解更多信息。

+0

我正在寻找的是每个接收队列的警告信号,以通知程序早期的数据包丢失危险。所以我们可以以某种方式减少我们正在对数据包进行处理的数量,或者在最坏的情况下将数据丢弃。 'rte_eth_stats_get()'返回设备的统计信息,不用于接收队列。我想要的是特定队列的接收环内的数据包数量。我们使用'rte_eth_rx_queue_setup()'来设置接收队列,但我们无法访问已经设置好的接收环。如果我们有,我们可以使用'rte_ring_count()'。 – Kamiar

+0

在处理数据包时,了解接收队列内的积压数据包数量是增长还是减少很有用。所以你可以选择如何处理这些变化。 – Kamiar

+0

戒指还有“加水印”机制,在剩余待办事项超过给定阈值的情况下通知设备。它由'rte_ring_set_water_mark()'设置。但它不通知接收机程序。我正在寻找类似的信号来表示呼叫程序。 – Kamiar