web-dev-qa-db-ja.com

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

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

現在、2GBit/sの予算があります。 1か月の平均でそのレートを5%以上超えると、10Gbit/sの容量全体が課金されます。ドルベースでかなりのステップアップ。

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

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

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

TBFまたはその他のフィルターを使用して、このレートをインターフェイスに適用する必要がありますか。また、どのように実行しますか。ここに示した例がわかりません: Traffic Control HOWTO

特に「例9.256kbit/sTBFの作成」

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で最大50Mbit/sを超える帯域幅を提供できませんでした。 lartc.org/lartc.pdfによると、帯域幅が100Mbit/sを超える場合は、RED方式の方が適しているため、これを使用してみます。

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

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

  1. 許容可能な最大のベースキューイングレイテンシをどのように選択しますか?例は64kbit/s用です。

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

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

    • たとえば、200msを超える音声キューイングの場合、すでに問題が発生しています。
    • Ftp/torentトラフィック用に500msのバッファがあることは、大きな問題ではありません。
  2. キューイングの遅延/戦略は、インターフェイス速度ではなくトラフィックタイプの問題です。たとえば、VOIPはおそらくキューに入れられるべきではありません。残念ながら、tc REDのドキュメントはあまり明確ではありません。ジュニパー/シスコのサイトでいくつかのRED情報を読み、その知識をtcに適用することをお勧めします。

2
Alex_www

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

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

1
Jeff Ferland

私の経験では、qdiscTBFは帯域幅を1Gbpsに簡単に制限できるため、2Gbpsにも拡張できると思います。ただし、ローエンドのエッジルーターではなく、実際のCPUが必要になる可能性があります。 4 GHzi3のようなもので十分でしょう。

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

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-* package)または、システムがこれらすべてのパッケージの処理に失敗する場合があります。

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

1