2016-08-16 69 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