カーネルはいつUDPデータグラムをMTUチャンクに切り捨てますか?

カーネルはいつUDPデータグラムをMTUチャンクに切り捨てますか?

私が経験している問題についてあなたの助け/ヒント/コメントが必要です。ありがとう

いくつかの状況は次のとおりです。最大サイズ1700バイトのPDUを処理する2つのアプリケーション(A1とA2)があります。各アプリケーションは異なるカード(C1とC2)にあり、1Gbpsイーサネットを使用して互いに直接接続されており、両方のアプリケーションはUDPソケットを使用して送受信されます。 C2カードはC1、A1、A2よりも強力です。

PDUの長さは最大1700バイトですが、各アプリケーションがPDUを送受信するときの長さは1450バイトを超えることはできません。したがって、一般的な1500バイトMTUの場合、PDUとイーサネットフレーム間の1:1マッピングが行われます。

最も強力なカードであるC1が、約90Mbpsで100%CPU使用率を達成した最高のデータレート(〜125Mbps FYI)を除いて、さまざまなデータレートですべてがうまく機能しました。

私はネットワーク通信を研究しながら、グローバルなパフォーマンスを向上させる方法を探し始めました。すべてが動作する前に、私は接続されたUDPソケットを使用することにしました。カーネルのいくつかのステップをバイパスすると、より速いという内容を読んだからです。したがって、接続されていない対応要素を実装するのに時間がかからなかったので、より良いと思います。

備考0:UDP接続ソケットがより速く応答する理由について、どのような主張も受け入れることができます。

その後、C1とC2の間のMTUを増やし始めた。 ==>まだsend有線で最大1450バイトのPDUを送信していたため、改善はありませんでした。

次のステップ:PDUセット。 PDUを順番に送信するのではなく、約60KBの大きなUDPデータグラムに集計し、MTUが1500のラインを介して送信しました。 ==>改善なし(カーネルは任意のブランチレポートからビッグデータを切り取り、イーサネットフレーム)相手はパケットロスがないため、メカニズムは問題ありません。

質問1:疑問に思って、カーネルはいつ私のデータをより小さい(MTUのような)データに切り捨てますか? IPに送る直前に?イーサネット移行?下げる? (では、NICが責任があるということですか?)

最後のステップ:両側でより大きなMTU(3000 5000 6000 8192)を使用して集約PDUを送信します。ここに問題があります。MTUを増やすほど、より多くのエラーが発生します!

質問2:このようなことを経験した人はいますか?どちらのカードモジュールもイーサネットジャンボフレームをサポートすると予想されます。どうやって?どこを見るべきかについてのアドバイスはありますか?

ちなみに、ボトルネックカードC1はカーネル2.6.23を実行しているため、sendmmsg同様のオプションは利用できません。

詳細はカード2枚ずつ2セットを持っています。 C2はトラフィックジェネレータから125Mbpsを検索し(一度に1PDU)、それをC1に送信し(一度に1PDU)、C1は無線でデータストリームを送信します(一度に複数のPDU)。 C1 'は放送中のデータをキャプチャし(方法はわかりません。 'データを送信してループを終了すると、トラフィックジェネレータに戻り、以前に送信されたデータと比較して多くの詳細を印刷します。

時間をいただきありがとうございます、

ソックス

ベストアンサー1

おすすめ記事