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)
これをデバッグする方法について何かアイデアや提案はありますか? よろしくお願いします!