この tc コマンドを使用して、インターフェイスのアップロード速度を制限します。
tc qdisc add dev eth1 root tbf rate 2mbit burst 10kb latency 70ms peakrate 2.4mbit minburst 1540
ただし、重大なパケット損失が発生します。 WAN(WAN)を介して着信データがeth0
7 GBの場合、速度制限インターフェイスのデータは6.2 GBになりますeth1
。パケット損失を減らすことができる他のレート制限ソリューションはありますか?
答え1
私が正しく理解したら、ローカル接続インターフェイスで送信トラフィックを制限してISPからの受信トラフィックを制限しようとしています。
失われたパケットは、TCPが輻輳を検出する方法の1つであり、ルータが輻輳信号を送信する方法の1つであるため、表示されるパケット損失はおそらく予想されます。これはまた、ルータがTCP輻輳回避に違反することなくtcによって提供される制限を尊重する唯一の合理的な方法です。 (tcにはREDを使うことができる機能がありますが、それが存在すること以外は教えてくれるほど知識が不足しています。)
インバウンド インターフェイスで送信トラフィックを調整する代わりに、tc を確認できます。受信キューの規律、ISP 接続インターフェイスと TC フィルタに接続して受信トラフィックを監視します。これがルータが輻輳信号を送信する唯一の方法である可能性があるため、パケット損失は依然として発生します。
例については、LARTCレシピのトピックを参照してください。「究極の交通規制機関」、これはtcの受信qdiscを使用します。
答え2
これはtxキューのサイズによって異なります。厳密に制限すると、TC はパケットをキューに入れることなく破棄することができます。残念ながら、私はunix tcではなくcisco iosでのみこれを行う方法を知っています。
答え3
この問題を解決するには、キューのサイズを増やすことができます。 (jdborgが言ったように)申し訳ありません。直接コメントできるほど高い評価を受けていません。
これは例です
このコマンドで不要なパケット損失が発生した場合
sudo tc qdisc add dev eno1 root tbf rate 1mbit burst 32kbit latency 400ms
400ms
遅延をからに変更してバッファ(キュー)サイズを大きくすると、問題を解決できます。10000ms
今コマンドは次のようになりますsudo tc qdisc add dev eno1 root tbf rate 1mbit burst 32kbit latency 10000ms
簡単に言うと:上記のようにキューサイズを大きくすると、パケット損失の問題が解決されます。どのくらい追加する必要があるかは問題です。
私の研究
わずか400msのキューで10MbpsのiPerfテストを実行したところ、90%のUDPパケット損失が発生しました。キューを10000msに設定した状態でiPerfテストを再実行すると、パケット損失は0%になりました。
iPerfテストを設定する方法
iPerfテストは、PC#1をiPerfサーバー、PC#2をiPerfクライアントとして実行しました。 PC#2のアウトバウンド接続は、tc
次のコマンドで制限されます。