チームインターフェースがパケットをドロップする

チームインターフェースがパケットをドロップする

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)

これをデバッグするために、dev_kfree_skb_any が呼び出されるチーム ドライバーに printk を追加しましたが、ドロップされたカウンターが増加している一方で、ethtool で物理インターフェイスをリセットするまで dmesg にメッセージが表示されません。つまり、パケットはどこか別の場所でドロップされていますが、現時点では正確な原因を見つける方法がわかりません。

また、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)

これをデバッグする方法について何かアイデアや提案はありますか? よろしくお願いします!

関連情報