Linuxでのtcによるインターフェース帯域幅の制限


8

私は、外側に10GBeインターフェース、内側に結合されたギガビットイーサネットインターフェースを持つLinuxルーターを持っています。

現在、2GBit / sの予算があります。1か月の平均速度が5%を超えると、10ギガビット/秒の容量全体が課金されます。ドルでかなりのステップアップ。

したがって、これを10GBeインターフェースで2GBit / sに制限したいと思います。

TBFフィルターが理想的かもしれませんが、このコメントは心配です。

Alphaを除くすべてのプラットフォームでは、理想的な最小限のバースト性で最大1mbit / sの通常のトラフィックを形成し、構成されたレートで正確にデータを送信できます。

このレートをインターフェイスに適用するためにTBFまたは他のフィルターを使用する必要がありますか。ここに示されている例が理解できません 。TrafficControl HOWTO

特に「例9. 256kbit / s TBFの作成」

tc qdisc add dev eth0 handle 1:0 root dsmark indices 1 default_index 0
tc qdisc add dev eth0 handle 2:0 parent 1:0 tbf burst 20480 limit 20480 mtu 1514 rate 32000bps

256Kビット/秒のレートはどのように計算されますか?この例では、32000bps = 32kバイト/秒です。tcはbps =バイト/秒を使用するため。バーストと制限がはたらくと思いますが、望ましいレートに到達するための賢明な数値をどのように選択しますか?

これは間違いではありません。私はこれをテストしました、そしてそれは256Kに近いレートを与えましたが、正確にはそうではありません。


編集

多くの読み取りとテストを行った後、帯域幅が関係しているためTBFは不適切であるという結論に達しました。どのような設定を試しても、TBFで50メガビット/秒を超える帯域幅を提供できませんでした。lartc.org/lartc.pdfによると、RED方式は100Mbit / sを超える帯域幅をシェーピングするのに適しているので、それを使用しようとします。

ただし、minの値(つまり、マーキングが可能になる平均キューサイズ)を選択します。与えられた例はこれです:

最小値を設定するには、許容可能な最大のベースキューイングレイテンシを計算し、帯域幅を掛けます。たとえば、64kbit / s ISDNリンクでは、200msのベースキューイングレイテンシが必要な場合があるため、minを1600バイトに設定します。

  1. どのようにして、許容可能な最大のベースキュー待機時間を選択しますか?例は64kbit / sです。

  2. 2Gbit / sで何が許容されますか?

回答:


2
  1. トラフィックのタイプに基づいて、許容可能なキューイング遅延を選択する必要があります。

    • たとえば、200ミリ秒を超える音声キューイングの場合はすでに問題となっています。
    • ftp /トレントトラフィック用に500ミリ秒のバッファがあることは、大きな問題ではありません。
  2. キューイングの待ち時間/戦略は、インターフェイスの速度ではなく、トラフィックタイプの問題です。たとえば、VoIPはおそらくキューに入れるべきではありません。残念ながら、tc REDのドキュメントはあまり明確ではありません。Juniper/ CiscoサイトでいくつかのRED情報を読んで、その知識をtcに適用することをお勧めします。


1

256Kビット/秒のレートはどのように計算されますか?この例では、32,000bps = [32,000]バイト/秒です。

はい、数学は正しいです。256kに近い数値が表示される場合、それはおそらくわずかに下です。その数はどこから測定していますか?それがブラウザのダウンロードまたは同様のものである場合、パケットヘッダーのオーバーヘッドはカウントされませんが、tcすべてがカウントされます。


いい視点ね。私はiperfを使用していました。
マット

1

私の経験では、qdisc TBFは帯域幅を1 Gbpsに簡単に制限できるため、2 Gbpsにも拡張できると思います。ただし、おそらく、一部のローエンドエッジルーターではなく、ジョブに実際のCPUが必要になります。4 GHz i3のようなもので十分でしょう。

のようなものを試してください

tc qdisc add dev "$DEV" root handle 1: \
  tbf rate "$UPLINK_RATE" burst "$UPLINK_BURST" latency "$TBF_LATENCY"

どこ

DEV="$(ip route | grep "^default " | grep -Po "(?<=dev )[^ ]+")"
UPLINK_RATE="2000Mbit"
UPLINK_BURST="6500"
TBF_LATENCY="14ms"

低レイテンシTBFを使用するには、PREEMPTカーネル(Ubuntu linux-lowlatency-hwe-*パッケージなど)を実行している必要があるか、システムがそれらすべてのパッケージの処理に失敗する可能性があることに注意してください 。

参照:https : //networkengineering.stackexchange.com/a/54404/36597


ありがとう。この質問を忘れました。私は答えを見つけ、それを実行するスクリプトを作成しました。しかし、私は会社を辞めており、ソリューションを投稿できません。しかし、はい、私が使用したのはTBFであり、ルーターは高速のxeonサーバーでした。
Matt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.