Linux(カーネル2.6.18)を実行しているサーバーで、着信ネットワークパケットを大幅にドロップしています。そのインターフェースの受信キューの長さが小さすぎる(デフォルトでは1000)ため、これに苦しんでいると思いました。 /proc/sys/net/core/netdev_max_backlog
の値を(3000に)変更して、このキューを拡大したいと思いました。しかし、それはうまくいかなかったようです。私はそれをグーグルで調べたところ、この値は非NAPIデバイスにのみ適用されると誰かが言うのを見つけました。NAPIはカーネル2.4.20から導入されたため、自分のデバイスはそうではないと思いました。これが真実であるかどうかはわかりませんでしたが、そのサーバーにインストールされているカーネルドキュメントを参照しましたが、そのドキュメントはカーネル2.2以降更新されていません。
これが本当かどうか、もしそうなら、どうすればNAPIデバイスのキューの長さを変更できますか?
ありがとう。風水
ドライバーが非常に小さいRx記述子サイズで構成されているため、インターフェイスがパケットをドロップしていることがわかりました。これは、割り込み合体で動作しているときに、ドライバーがカーネルに割り込みを送信する前に保持できるパケット数を決定します。この値(ethtool -g <interface>
で示される)が小さすぎる場合、割り込みを発生させる前にパケットがドロップされます。 ethtool -G <interface> Rx <a some big value>
を使用して拡大した後、それ以降、ドロップは発生していません。
みんなありがとう。
ethtool -g
の出力には、NICの「事前設定された最大値」と「現在のハードウェア設定」が表示されます。パケットドロップを回避するために、設定を最大許容値に設定することを常にお勧めしますが、具体的には、rxエラーまたはオーバーラン(バーストなどの場合に発生する可能性があります)です。
場合によっては、当然ながらすべてのモデルに応じて、NICの「事前設定された最大値」の値を増やすことができるドライバーの更新があります。