tcを使用して各接続の帯域幅を制限する方法は?

tcを使用して各接続の帯域幅を制限する方法は?

私はLinuxとtcコマンドに初めてアクセスし、最近はtcコマンドを使用して各接続の帯域幅を制限するソリューションを探しています。 I / O操作で構成されたクライアントからの要求を処理するサーバーアプリケーションがあり、帯域幅が十分な場合は、要求ごとに最大50 MB / sの速度を達成したいと思います(ただし、並列要求が多すぎないことを確認してください)。 、これにより、要求ごとの帯域幅が50 MB / s未満になります。 tcを使用して帯域幅を制限しましたが、各接続が50MBの帯域幅を取得するのではなく、すべての接続が50MBの帯域幅に分割されました。私が試した tc コマンドは以下から見ることができます。

sudo tc qdisc add dev eth4 root netem rate 400mbit

または

sudo tc qdisc add dev eth4 root handle 1: htb default 30
sudo tc class add dev eth4 parent 1: classid 1:1 htb rate 100gbit burst 15k

sudo tc class add dev eth4 parent 1:1 classid 1:10 htb rate 400mbit burst 15k
sudo tc class add dev eth4 parent 1:1 classid 1:20 htb rate 400mbit burst 15k 

sudo tc filter add dev eth4 protocol ip parent 1: prio 1 u32 match ip dst 0.0.0.0/0 flowid 1:10
sudo tc filter add dev eth4 protocol ip parent 1: prio 1 u32 match ip src 0.0.0.0/0 flowid 1:20

あるいは、サーバーとクライアントの両方を制御し、サーバーがポート9000でクライアント要求を処理することを知っているので、クライアントホスティングシステムで次のことを試しました。

sudo tc qdisc add dev eth4 root handle 1: prio priomap 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
sudo tc qdisc add dev eth4 parent 1:2 handle 20: netem rate 400mbit
sudo tc filter add dev eth4 parent 1:0 protocol ip u32 match ip dport 9000 0xffff flowid 1:2

しかし、これらの解決策のどれも私が望むように機能しませんでした。これまでに把握したところによると、リクエストが送信されるポートごとにクラスを生成する必要があるようですが、私が割り当てたものではなく自動的に選択されるため、あらかじめわかりません。この意味で、これらのクラスを「移動中」にする方法はありますか、それともそれを達成するための別の方法がありますか?

お時間をいただきありがとうございます!

ベストアンサー1

おすすめ記事