3

この要件を持つ組み込みアプリケーションがあります。1 つの発信 TCP ネットワーク ストリームは、他のすべての発信ネットワーク トラフィックよりも絶対的に高い優先度を必要とします。そのストリームで転送を待機しているパケットがある場合、それらは次に送信されるパケットになります。限目。

私の成功の尺度は次のとおりです。バックグラウンド トラフィックがない場合に優先度の高いレイテンシを測定します。バックグラウンド トラフィックを追加して、再度測定します。遅延の差は、優先度の低いパケットを 1 つ送信する時間になります。100Mbps リンクの場合、mtu=1500 で、およそ 150us です。私のテスト システムには、クロスオーバー ケーブルで接続された 2 つの Linux ボックスがあります。

私は非常に多くのことを試しましたが、レイテンシーは大幅に改善されましたが、目標を達成していません (現在、バックグラウンド トラフィックで 5 ミリ秒のレイテンシーが追加されています)。すでに別の非常に具体的な質問を投稿しましたが、一般的な質問からやり直す必要があると考えました。

最初の質問: これは Linux で可能ですか? 2 番目の質問: もしそうなら、私は何をする必要がありますか?

  • tc?
  • どの qdisc を使用すればよいですか?
  • カーネルのネットワーク パラメータを微調整しますか? どれ?
  • 他に何が欠けていますか?

ご協力いただきありがとうございます!

エリック

2010 年 10 月 4 日更新: 送信側と受信側の両方で tcpdump をセットアップしました。これが送信側で見られるものです(物事が混雑しているようです):

0 us   Send SCP (low priority) packet, length 25208
200 us Send High priority packet, length 512

受信側では、次のように表示されます。

~ 100 us  Receive SCP packet, length 548
170 us    Receive SCP packet, length 548
180 us    Send SCP ack
240 us    Receive SCP packet, length 548
...  (Repeated a bunch of times)
2515 us   Receive high priority packet, length 512

問題は、SCP パケットの長さ (25208 バイト) にあるようです。これは、mtu (このテストでは 600 に設定しました) に基づいて複数のパケットに分割されます。ただし、これはトラフィック制御よりも下位のネットワーク層で発生するため、遅延は mtu ではなく最大 tcp 送信パケット サイズによって決定されます。ああああ..

LinuxでTCPのデフォルトの最大パケットサイズを設定する良い方法を知っている人はいますか?

4

1 に答える 1

1

NIC ドライバーの設定を確認することをお勧めします。一部のドライバーは割り込みを結合します。これにより、スループットが高くなる代わりにレイテンシが増加します。

http://www.29west.com/docs/THPM/latency-interrupt-coalescing.html

また、NIC が複数の出力パケットをバッファリングしているかどうかはわかりませんが、バッファリングしている場合は、必要な優先度を強制することが難しくなります。NIC に優先度の低いパケットが複数バッファリングされている場合、カーネルはおそらくバッファリングを行いません。 NICに「私がすでに送ったものは忘れて、この優先度の高いパケットを最初に送信してください」と伝える方法がありません。

- - アップデート - -

mtu問題が長い TCP セグメントである場合、TCP レイヤーが通知する最大セグメント サイズをオプション on で制御できると思いますip route。例えば:

ip route add default via 1.1.1.1 mtu 600

(受信側でこれを行う必要があることに注意してください)。

于 2010-10-01T18:57:53.740 に答える