web-dev-qa-db-ja.com

Linuxの着信および発信帯域幅と遅延を制限する

多くの同様の質問が既に行われていることを認識していますが、これまでのところ、自分の問題の解決策を見つけることができていません。

私は仮想Linuxサーバー(Debian Squeezeを実行)を使用しています。これは、Webサイトの読み込み時間の増減を測定するために、Webサイトの速度のテストに使用しています。私はこのサーバーの帯域幅と待ち時間を制限して、Webサイトの実際の読み込み時間に近づけることを試みていますが、今のところ失敗しています。

私が特に欲しいのは以下です:

  • 着信および発信の待ち時間を50ミリ秒に設定します。
  • 受信帯域幅制限を512 kbpsに設定します。
  • 4096 kbpsの発信帯域幅制限を設定します。

私はnetemを読んでtcコマンドを使用してきましたが、それでもまだ頭の中で少しばかりです。私はこのコマンドを組み合わせてレイテンシを制御できるようにしましたが、それが発信レイテンシのみを処理するのか、またはその両方を処理するのかさえわかりません。

tc qdisc add dev eth0 root netem delay 50ms

その周りのネットワークの達人は私を助けることができますか?

編集:

さらなる調査の結果、目標の半分に達しました。このコマンドを使用すると、すべての送信トラフィックが希望どおりに動作します。

tc qdisc add dev eth0 root tbf rate 4.0mbit latency 50ms burst 50kb mtu 10000

ただし、まだ着信トラフィックを適切に調整できていません。私は「イングレスポリサーフィルター」を使用することになっていることを学びました。以下のコマンドを使用して、さまざまな値で遊んでみましたが、運がありません。

tc qdisc add dev eth0 ingress
tc filter add dev eth0 parent ffff: protocol ip u32 match ip src 0.0.0.0/0 flowid :1 police rate 1.0mbit mtu 10000 burst 10k drop

帯域幅はコマンドの影響を受けますが、上記の値は速度を2MB/sから開始し、転送が進むにつれて、約30秒の転送後にゆっくりと80-90kB/sに低下します。

私が間違っていることについてのアイデアはありますか?

16
yzfr1

最後に、サーバーで送信帯域幅/待機時間を設定し、クライアントで同じことを実行することで解決し、実質的に同じ結果に到達しました。

これらは、私の目標を達成するためにサーバーとクライアントでそれぞれ実行したコマンドです。

サーバー:4メガビット50ミリ秒

tc qdisc add dev eth0 handle 1: root htb default 11
tc class add dev eth0 parent 1: classid 1:1 htb rate 1000Mbps
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 4Mbit
tc qdisc add dev eth0 parent 1:11 handle 10: netem delay 50ms

クライアント:512 kbit 50 ms

tc qdisc add dev vmnet1 handle 1: root htb default 11
tc class add dev vmnet1 parent 1: classid 1:1 htb rate 1000Mbps
tc class add dev vmnet1 parent 1:1 classid 1:11 htb rate 512kbit
tc qdisc add dev vmnet1 parent 1:11 handle 10: netem delay 50ms
13
yzfr1

約80-90 kByte/sは、何を期待するかについてです

    tc filter add ... police rate 1.0mbit ...

1 mBit /秒、つまり約125 kByte /秒に到達したときに、着信データを破棄するように要求します。その後、リモートサーバーはそれよりもかなり低くなります(おそらく半分、わかりません)。その後、すべてのパケットが通過するため、リモートエンドは125 kByte/sに再び到達するまで、速度を徐々に上げていきます。 averageスループットが125 kByte/sを大幅に下回ります。これは、通常の入力シェーピングです。

速度が2 MByte/sに達し、入力ポリシーフィルターが既に配置されていることに少し驚いています。下流のクライアント(プログラム)または上流のルーターで、どこを測定しましたか?または、最初に接続を開始し、その後にのみ、イングレスポリシーフィルターを設定しましたか?