問題の説明
最近、受信したパケットが比較的大きい場合にパケットロスが発生するケースに遭遇しました。
分析する
この大きなパケットは、tcpdump を使用してキャプチャされませんでした。ethtool を使用して次の数が見つかりました:
#ethtool -S ac | grep sw_drop
rx_oversize_pkts_sw_drop: 2942431
このカウントを理解すると、制限されたサイズを超えるパケットを受信した場合、ソフトウェアはパケットを破棄します。
コード
カウントを増やす理由は、cqe_bcnt が hw_mtu を超え、パケット損失が発生するためです。コード ロジックから、hw_mtu の値は ip リンクに表示される mtu 値です。
/* Check packet size. Note LRO doesn't use linear SKB */
if (unlikely(cqe_bcnt > rq