問題タブ [trafficshaping]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - バーストからのデータの拡散
受信したデータをバーストで分散させようとしています。これは、他のアプリケーションが大量に受信したデータがあることを意味します。データエントリごとに、トラフィックを制限する必要があるサーバーで追加のリクエストを実行する必要があります。したがって、次のデータバーストが到着するまでの時間内にリクエストを分散させようとします。
現在、データを分散させるためにトークンバケットを使用しています。ただし、受信したデータの整形がすでに悪いため、保留中のリクエストのキューがいっぱいになるか、バーストが発生するたびにスパイクが発生します。したがって、このアルゴリズムは、必要な種類の整形を実行していないようです。
リクエストを制限するために利用できる他のアルゴリズムは何ですか?高負荷時と低負荷時があることはわかっているので、どちらもアプリケーションで適切に処理する必要があります。
私が現在抱えている問題を本当に説明できたかどうかはわかりません。説明が必要な場合は、お知らせください。
編集:
問題をもう少し明確にして、単純なレートリミッターが機能しない理由を説明します。
問題は、トラフィックのバースト性と、バーストのサイズが異なる時間に異なるという事実にあります。ほとんど一定であるのは、各バースト間の遅延です。divide time by number of records
したがって、処理するデータレコードの束を取得し、次の束が入る前にそれらを可能な限り均等に分散する必要があります。ただし、次の束がいつ入るかは100%確実ではないため、単純に正常に動作しません。
この方法ではデータの拡散が十分でないため、レート制限は機能しません。レートの飽和に近づくと、すべてが正常になり、均等に広がります(ただし、これは頻繁には発生しないはずです)。ただし、しきい値を下回ると、拡散はさらに悪化します。
この問題をより明確にするための例を示します。
トラフィックを1秒あたり10リクエストに制限し、新しいデータが約10秒ごとに届くとしましょう。
時間枠の開始時に100レコードを取得すると、毎秒10レコードをクエリし、完全に均等に分散します。ただし、15レコードしかない場合は、10レコードをクエリする場合は1秒、5レコードをクエリする場合は1秒、0レコードをクエリする場合は8秒になるため、時間の経過とともにトラフィックのレベルは非常に等しくなりません。代わりに、毎秒1.5レコードを照会した方がよいでしょう。ただし、このレートを設定すると、新しいデータが早く到着する可能性があるため、問題が発生します。そのため、完全な10秒がなく、1.5クエリでは不十分です。トークンバケットを使用する場合、トークンバケットは時間枠の開始時にバーストを通過できるため、問題は実際にはさらに悪化します。
ただし、この例では単純化しすぎています。これは、実際には、特定の時点で保留中のリクエストの数を完全に把握することはできず、上限にすぎないためです。したがって、この数値に基づいて毎回スロットルする必要があります。
linux - CentOS 6 の OpenVZ のデフォルトのトラフィック シェーピング ルール
私は次の構成を持っています:
- CentOS 6 (2.6.32-042stab049.6) を実行する OpenVZ ホスト、ギガビット接続
- その OpenVZ で実行されている単一のコンテナー
ホストには、インバウンド接続とアウトバウンド接続用の完全なギガビット接続があります。コンテナーは、すべての発信トラフィックに対して完全なギガビットを備えていますが、着信トラフィックは、「バースト」が許可されているデフォルトのトラフィック シェーピング ルールの対象になっているようです。大きなバイナリ ファイルのダウンロードは、数秒間 15MB/s で行われ、その後 50Kb/s に戻ります。
まったく同じファイルをホストにフルスピードで何度でもダウンロードできます。
トラフィック シェーピングが有効になっていません。
IPtables には特別なものはありません:
私は実際に少し行き詰まっており、これは CentOS 6 の OpenVZ カーネルのバグである可能性があると考えています。近い将来、CentOS 5 でテストするオプションはありません。トラブルシューティングの方法について他に考えがある人はいますか? それとも聞き覚えがありますか?ホストが find だけを実行し、CT だけが着信帯域幅の問題を抱えているという事実を考えると、原因として OpenVZ を調べています。
linux-kernel - Linux ネットワーク スケジューラ (tc qdisc) の POLICED という用語は何にちなんで名付けられましたか?
POLICED は、入力パケットの速度が制限され、超過したパケットがドロップされることを意味します。
include/linux/netdevice.h に「skb is shot by police」というコメントがありました。
もちろん似ていますが、この名前には何か由来があるのですか?
c++ - Linuxでトラフィック制御機能(つまりQOS)ライブラリを探しています
Windows から Linux にいくつかの C++ コードを移植しようとしていますが、Linux でトラフィック制御機能用の同様の API を見つけることができません。
これらの関数が必要です。そのような API をどこで見つけることができるか知っていれば、助けてください。
お時間をいただきありがとうございます。
linux - tc を使用したトラフィック シェーピング
私は、Buffer Bloating のネットワーク現象をシミュレートしようとする学校のプロジェクトに取り組んでいます。これは基本的に、メモリの価格が安いためにルーターのバッファがどんどん大きくなった結果としての遅延です。
ここで、このプロジェクトを開始するために、Linux の「tc」コマンドとその使用方法についていくつかの調査を既に行っていますが、ニーズに合った適切な構成を設定する方法がわかりません。状況は次のとおりです。私は 3 台のコンピューターを持っています。PC1 は PC2 に接続され、PC2 は PC3 に接続されます。この構成では、PC2 は、大きなバッファーが使用されるルーターとして機能しています。トラフィックは、PC2 を介して PC1 から PC3 に送信されます。ここで、私の意図は、PC2 が PC1 から PC3 に着信データを送信するために使用できる帯域幅を制限することです。
PC2 に大きなバッファを設定し、バッファからパケットをフェッチする際に遅延を設定して、より遅いリンクをシミュレートすることで、これを行うことを計画していました。これにより、大きなバッファがいっぱいになり、レイテンシが発生します。
ここで、「tc」コマンドまたはジョブに適した他のツールを使用してこれを構成する方法について、このコミュニティに意見を求めたいと思います。または、バッファの肥大化をシミュレートする方法について他のアイデアがある場合は、それらも大歓迎です。
お待ち頂きまして、ありがとうございます。
linux - tc を使用したトラフィック シェーピングは、帯域幅と遅延が大きいと不正確になる
tc
トラフィック シェーピングにカーネル 2.6.38.8 を使用しています。帯域幅を制限すると機能し、遅延を追加すると機能しますが、両方の帯域幅を遅延でシェーピングすると、制限が 1.5 Mbps を超える場合、達成される帯域幅は常に制限よりもはるかに低くなります。
例:
(ping から) 201 ミリ秒の遅延が発生しますが、容量はわずか 1.66 Mbps (iperf から) です。遅延をなくすと、帯域幅は正確に 2 Mbps になります。1 Mbps と 200 ミリ秒の RTT の帯域幅を指定すると、すべてが機能します。同様の結果が得られる ipfw + dummynet も試しました。
Kconfigでカーネルを再構築してみましたがHZ=1000
、問題は解決しませんでした。他のアイデア?
linux - tcとcgroupsを使用してパケットに優先順位を付ける方法
特定のプロセスグループから生成されたパケットに優先順位を付けて、PCから送信される最初のパケットが選択されるようにしようとしています。私はcgroupsとtcを使用してこれを行うことを目指していますが、機能しないようです。
まず、ubuntuにcgroupsを次のように設定します。
Firefoxでブラウジングして実行した後、
わかった、
代わりに、トラフィックをハンドル10に流したいのですが、何が間違っているのでしょうか。
linux - トラフィック シェーピング用のツール
宛先ポートと IP アドレスの組み合わせに基づいて、発信トラフィックの一部を区別する (遅延または部分的にドロップする) テストを実行する必要があります。
テストを行うLinuxマシンでローカルに実行することを考えていました。
これにはどのようなツールがありますか? 彼らはどれほど柔軟ですか?
jmeter - JMeter バースト トラフィック シェーピング
Web アプリケーションに対して次のテストを実行したいと考えています。
- クライアントは T スレッドを使用する必要があります
- クライアントは R リクエスト/秒 (rps) を生成する必要があります。トラフィックは均一であってはなりません。代わりに、要求は X > R の X 項目のバーストで生成され、各バーストはできるだけ早く発生する必要があります。
したがって、T=40、X = 10,000、R = 200 の場合:
- t0 で、クライアントは 40 のスレッドを使用して、できるだけ速く 10,000 の要求を送信しようとします。
- 最初の 10,000 バッチを正常に送信した後、クライアントは t1 = t0 + 50 秒 (X/R) まで待機します。最初のバッチの送信に 50 秒以上かかる場合、エラーが生成されます。
- t1 で、クライアントは次の 10,000 バッチの送信を試みます。
これは、既存の JMeter 構成またはプラグインでシミュレートできますか?
ありがとう
testing - イーサネット接続を遅くする
ネットワーク接続テストを行う必要があるイーサネット ベースのデバイスがあります。
理想的には、帯域幅を減らし (数十 Kb/秒まで)、可能であれば、テスト対象のデバイスとサーバー間のネットワーク接続に遅延 (1 秒程度) を導入したいと考えています。
これをどのように行うかについてのアイデアはありますか?おそらく出発点として QoS を備えたルーターを考えていましたが、ラグを導入し、帯域幅を削減するルーターを入手できるかどうかはわかりません.