問題タブ [iperf]
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.
linux - iperf 2 が複数の UDP ストリームでハングする
複数のスレッドで iperf UDP テストを実行すると、単純にハングします。それは二度と戻りません。ただし、同じテストは常に単一のストリームで正常に完了します。ここに私のiperfバージョンと詳細があります:
クライアント (10.20.32.50) コマンド:$ iperf -c 10.20.32.52 -P 2 -t 10 -u -b 1g
サーバー (10.20.32.52) コマンド:$ iperf -s -u
クライアントは次の出力を提供し、決して終了しません
サーバー出力は次のとおりです
私の両方のクライアント/サーバー マシンは、10 Gbps の 32 コアです。クライアントは単一のスレッド/ストリームで正常に実行されることに注意してください。つまり、$ iperf -c 10.20.32.52 -P 1 -t 10 -u -b 1g
常に完了します。どんな助けでも大歓迎です!
この質問は、もともと同様の質問 [1] への回答として尋ねられたものですが、iperf3 を使用しています。提案を受けた後、別の質問をしました。
ノディール
[1] https://stackoverflow.com/questions/31836985/iperf3-parallel-udp-not-running/32728777
linux - IPv6 上の iperf UDP
IPv6 でiperf ( https://iperf.fr/ ) を使用して UDP 帯域幅テストを行っています。次のコマンド ラインで Linux UDP クライアントを使用すると、非常に悪い結果が得られます。
Wireshark で問題を調査すると、クライアントがデータを送信している間に断片化が発生することがわかりました。より正確には、サイズが 1510 バイトと 92 バイトの UDP クライアント送信パケットが交互に表示されます。たとえば、私が確認した UDP パケットには次のパターン (サイズ) があります: 1510、92、1510、92、1510、92、...、1510、92、...
iperf2 のドキュメントを読む オプション (-l) については、次を読みます。
読み書きするバッファの長さ。iPerf は、len バイトの配列を何度も書き込むことによって機能します。デフォルトは、TCP の場合は 8 KB、UDP の場合は 1470 バイトです。UDP の場合、これはデータグラム サイズであり、IPv6 アドレッシングを使用する場合は、断片化を避けるために 1450 以下に減らす必要があります。-n および -t オプションも参照してください。
Linux iperf UDP クライアント コマンド ラインを次のように置き換えて、同じ帯域幅テストを実行しようとしました。
良い結果が得られます。Wireshark のキャプチャを見ると、断片化が見られません。
IPv4 で同じテストを行うと、良い結果を得るためにデフォルトの UDP データグラム サイズを変更する必要はありません (「-l」オプションを使用する必要はありません)。
したがって、私の結論は、断片化 (IPv6 経由) が帯域幅パフォーマンスの低下の原因であるということです。
とにかく、UDP データグラムのサイズを IPv6 で 1450 に設定すると実際に何が起こるのか疑問に思っています。UDP データグラム サイズのデフォルト値で、IPv4 ではなく IPv6 でフラグメンテーションが発生するのはなぜですか? さらに、UDP データグラムのサイズを 1450 に減らすと断片化が発生しないのはなぜですか?
ありがとうございました。
networking - 帯域幅から 2 つのホスト間のスループットを決定しますか?
私は mininet を使用しており、iperf を使用して 2 つのホスト間のスループットを観察する必要があります。
ここでは結果として帯域幅が与えられているため、実際のスループットを決定する方法がわかりません。
トポロジを設定する方法は次のとおりです。
上記の結果からスループットを取得するにはどうすればよいですか?
networking - iperf サーバーとクライアントの違い
これが間違った場所であれば許してください - これは私の最初の投稿です.
Mininet でネットワークをセットアップしました - 同じ帯域幅と遅延 (帯域幅: 10Mbps、遅延: 10ms) で 2 つのノードを作成しました。iperf を使用してこれをテストする場合、次の手順を実行します。
- ノード 1 (10.0.0.2) iperf -s で iperf サーバーを開始します。
- ノード 2 (10.0.0.3) iperf -c 10.0.0.2 で iperf クライアントを開始します。
- テストが完了します
ノード 2 (クライアント) の帯域幅は 11.2Mbps、テスト時間は 10.4 秒です。ノード 1 (サーバー) の帯域幅は 9.56Mbps で、テスト時間は 12.2 秒です。クライアントとサーバーの両方が同じ転送サイズ (13.9Mb) を示しています。
この時間差は、個々のパケットの遅延によるものですか? TCP ウィンドウ サイズは 85.6 キロバイトなので、ネットワーク上で送信される各パケットに 10 ミリ秒の遅延を追加すると、おおよその差が許容されます。ただし、送信側と受信側の両方で 10 ミリ秒のネットワーク遅延があるため、遅延は 20 ミリ秒になると考えていましたが、そうではないのはなぜですか?
これが理にかなっていることを願っています。
ベン
iperf - 初期接続後に iperf3 がスタックしているように見える
昨日、iperf3 での私のテストは正常に機能していました。今日、残念ながら最初の接続が確立されたようですが、その後フリーズします。
出力の下。
サーバ:
クライアント:
tcp - iPerf での UDP (場合によっては TCP) でのパフォーマンスの制限
iPerf 実行可能ファイルの何が問題なのかわかりません。Telnetスクリプトを使用してiPerfの実行を自動化しようとしています(これは私が使用しているものですhttps://github.com/ngharo/Random-PHP-Classes/blob/master/Telnet.class.php )。PHP スクリプトが期待どおりに機能すると仮定して、ボトルネックの理由を見つけるために何ができるか知りたいです。基本的に、コマンド ラインで手動で実行すると、必要な速度が得られますが、スクリプトを使用してリモートで実行すると、パフォーマンスが制限されます。
私が試したのは、iperfの実行中にtcpdumpを使用してログを出力し、Wiresharkを使用して読み取ることです。私が観察できるのは、スクリプトを使用するとフラグメント間の時間差が大きくなることだけです。これは、レートが低くなることを意味します。この後どうすればいいのかわからない。他に見たり試したりできるアイデアはありますか?sysctlを使用してバッファサイズのカーネル値を変更しようとしましたが、手動で実行すると常に機能するため、これは効果がありません。
-w、-l、-b などのすべての iperf 構成オプションを試してみたことに注意してください (バースト モードは試していません)。失敗。
tcp - 大きな TCP ウィンドウを iperf に設定すると、間違った測定値が返されるのはなぜですか?
iperf に 64MB などの巨大な TCP ウィンドウを配置した場合、エラーは発生しませんが、バンドウィンドスで 54Mbits/sec などの間違った測定値が表示され、接続のアップロードが 1 Mbps しかない場合について知りたいです。iperfのバグですか?
私はこれをコマンドに入れました: iperf -w 64MB -c IPaddress -p and_the_port
そして私はこれを受け取りました:
インターバル転送帯域
0.0 ~ 10.1 秒 65.0M バイト 54.2 M ビット/秒
私の接続は次のとおりです: 帯域幅(アップ/ダウン)[kbps/kbps]: 1.023/15.000
c# - C#プロセスを正常に強制終了できない
複数のスレッドを生成するアプリケーションがあります。そのうちの 1 つは、iPerf
ネットワークの信頼性を監視するために使用される実行可能ファイルを実行します。このプロセスは、ユーザーがウィンドウを閉じようとするまで無期限に実行されます。iPerf
ここで問題が発生します。サーバーがハングアップしないようにプロセスを正常にシャットダウンしようとしていますが、これが機能していないようです。コマンドプロンプトからコマンドを手動で実行して を押すと、問題なくシャットダウンできますCtrl+c
が、これはプログラムで簡単に実行できるようには見えません。
process.Kill();
or またはprocess.StandardInput.Close()
orを含む複数のことを試しprocess.StandardInput.WriteLine("\x3");
ましたが、これらのどれもプロセスに正常なシャットダウンメッセージを送信していないようです。process.Kill();
サーバーがハングするか、次回の起動に失敗します。他の 2 つのオプションは、サーバーをまったく停止しません。しかし、マニュアルctrl+c
は問題なく機能します。
ここに私のコードのスニペットがあります:
どんな助けでも大歓迎です。ありがとうございました!
アップデート:
コメントの Hans からの提案に基づいて、コードに何かを追加してctrl+c
イベントを送信しようとしました。
これはまったく機能しませんでした。プロセスはまだ実行中であり、追加された関数は false を返します。渡されたプロセスIDがタスクマネージャーのプロセスIDと一致することを確認しました。これで問題ありませんが、GenerateConsoleCtrlEvent 関数は false を返します。なぜこれが考えられるのでしょうか?