-1

1Gb ネットワークを使用しており、レートを 100MB に制限してから 1Gb に制限して、特定の TCP パフォーマンス テストを実行する必要があります。私の理解では、以下に示すように、階層型トークン バケット (htb) を使用してこれを実現できます。

tc qdisc add dev eth0 root handle 1: htb default 12
tc class add dev eth0 parent 1: classid 1:1 htb rate 1gbps ceil 1gbps
tc class add dev eth0 parent 1: classid 1:10 htb rate 100mbps ceil 100mbps

これにより、2 つのルート クラス 1:1 と 1:10 が作成され、それぞれ帯域幅が 1 GB と 100 MB になります。私の理解が間違っている場合は修正してください。

次に、TCP アプリケーションで上記のクラスを使用するにはどうすればよいですか? たとえば、100 Mb のみを使用する必要があるアプリケーションを実行する場合、ソケット オプションで何かを指定して、アプリケーションから送信されるすべてのメッセージがクラス 1:1 に属し、レートが 100 Mb に制限されるようにする必要がありますか?

4

1 に答える 1

1

トラフィック制御マッチング ルールと IP テーブル ルールを使用して、トラフィックをマークします。

tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 1 fw flowid 1:10
iptables -A OUTPUT -i eth0 -p tcp -j MARK --set-mark 1

すべての TCP アウトバウンド パケットを 100 メガビット/秒のキューに入れます。

1 つのアプリケーションだけに一致させたいので、すべての接続が経由するポート 7654 でリッスンする TCP ソケットがアプリケーションにあると仮定します。iptables ルールは次のようになります。

iptables -A OUTPUT -i eth0 -p tcp -m multiport --sports 7654 -j MARK --set-mark 1

tc qdiscまた、システムの通常のトラフィックがテストに影響を与えないように、コマンドのデフォルトを 1 Gbps キューにする必要があります。

于 2013-03-12T04:51:57.727 に答える