0

tcトラフィック シェーピングにカーネル 2.6.38.8 を使用しています。帯域幅を制限すると機能し、遅延を追加すると機能しますが、両方の帯域幅を遅延でシェーピングすると、制限が 1.5 Mbps を超える場合、達成される帯域幅は常に制限よりもはるかに低くなります。

例:

tc qdisc del dev usb0 root
tc qdisc add dev usb0 root handle 1: tbf rate 2Mbit burst 100kb latency 300ms
tc qdisc add dev usb0 parent 1:1 handle 10: netem limit 2000 delay 200ms

(ping から) 201 ミリ秒の遅延が発生しますが、容量はわずか 1.66 Mbps (iperf から) です。遅延をなくすと、帯域幅は正確に 2 Mbps になります。1 Mbps と 200 ミリ秒の RTT の帯域幅を指定すると、すべてが機能します。同様の結果が得られる ipfw + dummynet も試しました。

Kconfigでカーネルを再構築してみましたがHZ=1000、問題は解決しませんでした。他のアイデア?

4

2 に答える 2

6

それは実際には問題ではなく、本来あるべきように動作します。200 ミリ秒のレイテンシーを追加したため、2Mbps パイプ全体が最大限に活用されていません。TCP/IP プロトコルをもっと詳しく調べることをお勧めしますが、iperf で何が起こっているかを簡単に要約すると、デフォルトのウィンドウ サイズはおそらく 3 パケット (それぞれ 1500 バイト) です。パイプを 3 つのパケットで満たしますが、確認応答が返されるまで待つ必要があります (これは輻輳制御メカニズムの一部です)。送信を 200ms 遅らせるため、しばらく時間がかかります。これで、ウィンドウ サイズが 2 倍になり、次に 6 パケットを送信できますが、再び 200 ミリ秒待たなければなりません。その後、ウィンドウのサイズは再び 2 倍になりますが、ウィンドウが完全に開くまでには、

于 2012-11-11T16:30:45.103 に答える