團隊介面丟包

團隊介面丟包

從3.10.104 升級到核心4.14 後,我發現在主動備份模式下的團隊介面(TX) 上不斷出現丟包(大約10 個資料包/秒),增加實體連接埠上的txqueuelen 會有所幫助,但是,丟包仍然會時不時地發生。

這是 eth6 上 txqueuelen 0 的 ifconfig 輸出

team0      Link encap:Ethernet  HWaddr 00:1E:67:B5:7F:76
      inet addr:192.168.221.203  Bcast:0.0.0.0  Mask:255.255.255.0
      inet6 addr: fe80::21e:67ff:feb5:7f76/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:837 errors:0 dropped:671 overruns:0 frame:0
      TX packets:282219490 errors:0 dropped:169438 overruns:0 carrier:0
      collisions:0 txqueuelen:10000
      RX bytes:27531 (26.8 KiB)  TX bytes:113995992408 (106.1 GiB)

實體介面:

eth6      Link encap:Ethernet  HWaddr 00:1E:67:B5:7F:76  
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:837 errors:0 dropped:0 overruns:0 frame:0
      TX packets:282218759 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0 
      RX bytes:74718 (72.9 KiB)  TX bytes:383252978322 (356.9 GiB)

為了調試這個問題,我在團隊驅動程式中添加了一個printk,其中調用了dev_kfree_skb_any,但是,當丟棄計數器增加時,我在dmesg 中看不到訊息,直到我透過ethtool 重置物理接口,因此數據包被丟棄到其他地方,然而,目前我不知道如何找到確切的原因。

我還使用了 dropwatch 實用程序,它會產生大量輸出,顯示大量滴,但是,它在內核 3.10 上產生類似的輸出,其中使用 ifconfig 沒有看到滴。我假設它記錄了其他內容,可能是內核丟棄的輸入資料包,因此有用的信息在這些資料包之間丟失了。以下是 4.14 上的 dropwatch 輸出,依唯一符號排序:

__udp4_lib_rcv+6b0 (0xffffffff8155ce77)
ip_forward+98 (0xffffffff81534f88)
kfree_skb_list+13 (0xffffffff814f0d22)
sk_stream_kill_queues+4a (0xffffffff814f68a9)
tcp_v4_do_rcv+154 (0xffffffff815508e9)
tcp_v4_rcv+1de (0xffffffff81552490)
unix_stream_connect+3b4 (0xffffffff81586890)

您對如何調試這個有什麼想法/建議嗎?謝謝!

相關內容