英語フランス語スペイン語

Ad


OnWorksファビコン

flowgrind - クラウドでオンライン

Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーター上の OnWorks 無料ホスティング プロバイダーで flowgrind を実行します。

これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド flowgrind です。

プログラム:

NAME


flowgrind - Linux、FreeBSD、Mac OS X 用の高度な TCP トラフィック ジェネレーター

SYNOPSIS


フローグラインド [オプション] ...

DESCRIPTION


フローグラインド Linux のテストとベンチマークのための高度な TCP トラフィック ジェネレーターです。
FreeBSD および Mac OS X TCP/IP スタック。 他のパフォーマンス測定ツールとは対照的に、
分散アーキテクチャを特徴としており、スループットやその他のメトリクスが測定されます
任意の flowgrind サーバープロセス間、flowgrind デーモン フローグラインドとします。

Flowgrind は、グッドプット (スループット) のほかに、アプリケーション層の到着間隔時間を測定します。
(IAT) とラウンドトリップ時間 (RTT)、ブロック数とネットワーク トランザクション/秒。 ほとんどのクロスとは異なり、
プラットフォーム テスト ツール、flowgrind は、プラットフォームから返された TCP メトリクスを収集してレポートします。
TCP_INFO ソケット オプション。通常は TCP/IP スタックの内部にあります。 Linux および
FreeBSD には、特にカーネルによるエンドツーエンド RTT、サイズの推定が含まれます。
TCP 輻輳ウィンドウ (CWND) とスロー スタートしきい値 (SSTHRESH) の値。

Flowgrind は分散アーキテクチャを採用しています。 フローグラインドの XNUMX つのコンポーネントに分かれています。
デーモン、 フローグラインド(1)、および フローグラインド コントローラ。 コントローラーを使用して、
flowgrind デーモンを実行する任意の XNUMX つのシステムをセットアップできます (サードパーティのテスト)。 定期的に
テスト中にコントローラーが測定結果を収集して表示する間隔
デーモンたち。 同じまたは異なる設定で複数のフローを一度に実行できます。
一人ひとりを個別にスケジュールします。 テストおよび制御接続はオプションで転用可能
異なるインターフェース。

トラフィック生成自体は、一括転送、レート制限、または高度な転送のいずれかです
リクエスト/レスポンスのテスト。 Flowgrind は libpcap を使用してトラフィックを自動的にダンプします。
定性分析。

OPTIONS


これらは、コントローラー オプションとフロー オプションという XNUMX つの重要なオプション グループです。 以下のような
名前が示すように、コントローラー オプションはグローバルに適用され、すべてのフローに影響を与える可能性があります。
フロー固有のオプションは、 -F オプションを選択します。

長いオプションに必須の引数は短いオプションにも必須です。

オプション
-h, - 助けて[=WHAT]
ヘルプを表示して終了します。 オプションの WHAT は、ソケットに関するヘルプの「socket」のいずれかです
オプションまたは「トラフィック」トラフィック生成ヘルプ

-v, - バージョン
バージョン情報を印刷して終了します

コントローラー オプション
-c, --show-コロン=タイプ[,タイプ] ...
中間間隔レポート列 TYPE を出力に表示します。 許可される値
タイプは次のとおりです: 'interval'、'through'、'transac'、'iat'、'kernel' (すべてデフォルトで表示されます)、
および「ブロック」、「rtt」、「遅延」(オプション)

-d, - デバッグ
デバッグの冗長性を高めます。 オプションを複数回追加して冗長性を高めます

-e, --ダンププレフィックス=PRE
ダンプファイル名にプレフィックス PRE を付加します (デフォルト: "flowgrind-")

-i, --レポート間隔=#.#
レポート間隔 (秒単位) (デフォルト: 0.05 秒)

-ログファイル[=FILE]
出力をログファイル FILE に書き込みます (デフォルト: flowgrind-'timestamp'.log)

-m スループットを 2**20 バイト/秒でレポートします (デフォルト: 10**6 ビット/秒)

-n, --フロー=#
テストフローの数 (デフォルト: 1)

-o 既存のログ ファイルを上書きします (デフォルト: 上書きしません)

-p 数値の代わりに記号値 (INT_MAX など) を出力しないでください。

-q, - 静かな
静かにしてください、画面にログを記録しないでください (デフォルト: オフ)

-s, --tcp-スタック=タイプ
ソース TCP スタックの単位を自動的に決定しません。 ユニットを TYPE に強制します。ここで、
TYPE は「セグメント」または「バイト」です

-w 出力をログファイルに書き込みます (と同じです) -ログファイル)

Flow オプション
すべてのフローには、送信元と宛先という XNUMX つのエンドポイントがあります。 ソースの違い
宛先エンドポイントは接続の確立にのみ影響します。 フローを開始するとき、
宛先エンドポイントはソケットをリッスンし、ソースエンドポイントはそれに接続します。 のために
実際のテストでは違いはなく、両方のエンドポイントがまったく同じ機能を持っています。
データはどちらの方向にも送信でき、多くの設定を個別に構成できます。
各エンドポイント。

これらのオプションの一部は、オプションの「x」で示されるフロー エンドポイントを引数として受け取ります。
構文。 「x」は、ソース エンドポイントの場合は「s」、エンドポイントの場合は「d」のいずれかに置き換える必要があります。
宛先エンドポイント、または両方のエンドポイントの場合は「b」。 それぞれに異なる値を指定するには
エンドポイントはカンマで区切ります。 例えば -W s=8192,d=4096 はアドバタイズされた値を設定します
ウィンドウは、送信元では 8192、宛先では 4096 に設定されます。

-A x RTT 計算に必要な最小限の応答サイズを使用する
(と同じ -G s=p,C,40)

-B x=# 要求された送信バッファをバイト単位で設定します

-C x 局所的な輻輳が発生している場合はフローを停止します

-D x=DSCP
Type-of-Service (TOS) IP ヘッダー バイトの DSCP 値

-E ゼロを送信する代わりにペイロード内のバイトを列挙します

-F #[,#] ...
このオプションに続くフロー オプションは、指定されたフロー ID にのみ適用されます。 に役立ちます
との組み合わせ -n 特定のフローに特定のオプションを設定します。 ナンバリングが始まります
0なので、 -F 1 は 1 番目のフローを指します。 -XNUMX を指定するとすべてのフローを参照できます

-G x=(q|p|g):(C|U|E|N|L|P|W):#1:[#2]
確率的トラフィ​​ック生成を有効にし、使用されるトラフィックに応じてパラメータを設定します。
分布。 詳細については、「トラフィック生成オプション」セクションを参照してください。

-H x=HOST[/CONTROL[:PORT]]
ホストとの間でテストを行います。 オプションの引数は、CONTROL のアドレスとポートです。
同じホストへの接続。 指定されていないエンドポイントは、
ローカルホスト

-J # ランダム シード # を使用 (デフォルト: 読み取り) は/ dev / urandomの)

-I 一方向遅延計算を有効にする (クロック同期なし)

-L データの送信を開始する直前に、テストソケットで connect() を呼び出します (遅い)
接続する)。 指定しない場合、準備段階でテスト接続が確立されます。
テスト開始前の段階

-M x libpcap を使用してトラフィックをダンプします。 フローグラインド(1) root として実行する必要があります

-N テストフロー後の各ソケット方向の shutdown()

-O x=OPT
テストソケットにソケットオプションOPTを設定します。 詳細については、セクションを参照してください
「ソケットオプション」

-P x ブロックサイズが制限されていない場合は、select() を繰り返して送信を続行しないでください。
送信キューを満たすだけで十分です (プッシュ型)

-Q 要約のみ。中間間隔レポートは計算されません (静か)

-R x=#.#(z|k|M|G)(b|B)
指定されたレート/秒で送信します。ここで、z = 2**0、k = 2**10、M = 2**20、G =
2**30、および b = ビット/秒 (デフォルト)、B = バイト/秒

-S x=# ブロック (メッセージ) サイズをバイト単位で設定します ( -G s=q,C,#)

-T x=#.#
フロー期間を秒単位で設定します (デフォルト: s=10、d=0)

-U # アプリケーション バッファ サイズをバイト単位で設定します (デフォルト: 8192) と使用すると、値が切り捨てられます。
確率的トラフィ​​ック生成

-W x=# 要求された受信側バッファ (アドバタイズされたウィンドウ) をバイト単位で設定します

-Y x=#.#
ホストが送信を開始するまでの初期遅延を秒単位で設定します。

トラフィック GENERATION オプション


オプション経由 -G flowgrind は確率的トラフィ​​ック生成をサポートしており、
通常の大量データ転送に加えて、高度なレート制限およびリクエスト/レスポンス データ転送も可能です。

確率的トラフィ​​ック生成オプション -G フローエンドポイントを引数として受け取ります。
オプション構文の「x」で指定します。 ソースの「x」はいずれかの「s」に置き換える必要があります
エンドポイント、宛先エンドポイントの場合は「d」、両方のエンドポイントの場合は「b」。 ただし、ご注意ください
双方向トラフィックの生成が予期しない結果を引き起こす可能性があることを理解してください。 異なるものを指定するには
各エンドポイントの値はカンマで区切ります。

-G x=(q|p|g):(C|U|E|N|L|P|W):#1:[#2]

フローパラメータ:

q リクエストサイズ (バイト単位)

p 応答サイズ (バイト単位)

g リクエストパケット間ギャップ (秒単位)

分布:

C 絶え間ない (#1: 価値、 #2: 使用されていない)

U ユニフォーム (#1:分、 #2:最大)

E 指数関数 (#1: ランバ - 生涯、 #2: 使用されていない)

N 通常 (#1: mu - 平均値、 #2: sigma_square - 分散)

L 対数正規(#1: ゼータ - 意味、 #2: シグマ - 標準開発)

P パレート (#1: k - 形状、 #2: x_min - スケール)

W ワイブル (#1: ラムダ - スケール、 #2: k - 形状)

weibull のような高度なディストリビューションは、flowgrind がコンパイルされている場合にのみ使用可能です
libgsl サポート付き。

-U # リクエストとレスポンスのサイズの計算値の上限を指定します(必要)
高度な分散値には制限がないため、
バッファサイズ (定数値または一様分布には必要ありません)。 価値観
境界外の場合は、有効な結果が得られるまで再計算されますが、最大 10 です。
回 (その場合、境界値が使用されます)

ソケット オプション


Flowgrind では、オプションを使用して次の標準および非標準ソケット オプションを設定できます。
-O.

すべてのソケット オプションは、オプションの「x」で示されるフロー エンドポイントを引数として受け取ります。
構文。 「x」は、ソース エンドポイントの場合は「s」、エンドポイントの場合は「d」のいずれかに置き換える必要があります。
宛先エンドポイント、または両方のエンドポイントの場合は「b」。 それぞれに異なる値を指定するには
エンドポイントはカンマで区切ります。 また、同じものを繰り返し通過することも可能です
複数のソケット オプションを指定するためのエンドポイント。

スタンダード ソケット オプション
-O x=TCP_CONGESTION=ALG
テストソケットに輻輳制御アルゴリズム ALG を設定する

-O x=TCP_CORK
テストソケットに TCP_CORK を設定します

-O x=TCP_NODELAY
テストソケットのnagleアルゴリズムを無効にする

-O x=SO_DEBUG
テストソケットに SO_DEBUG を設定する

-O x=IP_MTU_DISCOVER
システムのデフォルトでまだ有効になっていない場合は、テストソケットに IP_MTU_DISCOVER を設定します

-O x=ROUTE_RECORD
テストソケットに ROUTE_RECORD を設定します

非標準 ソケット オプション
-O x=TCP_MTCP
テストソケットに TCP_MTCP (15) を設定します

-O x=TCP_ELCN
テストソケットに TCP_ELCN (20) を設定します

-O x=TCP_LCD
テストソケットに TCP_LCD (21) を設定します


フローグラインド
flowgrind -H と同じ、デフォルト設定でのローカルホストの IPv4 TCP パフォーマンスのテスト
b=127.0.0.1 -T s=10、d=0。 flowgrind デーモンはローカルホスト上で実行する必要があります

フローグラインド -H b=::1/127.0.0.1
上記と同じですが、デフォルト設定でローカルホストの IPv6 TCP パフォーマンスをテストします。

フローグラインド -H s=ホスト1、d=ホスト2
host1 と host2 の間のバルク TCP 転送。 Host1 はソースとして機能し、host2 はソースとして機能します
宛先エンドポイント。 両方のエンドポイントで flowgrind デーモンを実行する必要があります。 の
デフォルトのフロー オプションが使用され、フロー期間は 10 秒、データ ストリームが使用されます。
ホスト1からホスト2へ

フローグラインド -H s=ホスト1、d=ホスト2 -T s=0、d=10
上記と同じですが、代わりに host10 から host2 に XNUMX 秒間データを送信するフローを使用します。
host1

フローグラインド -n 2 -F 0 -H s=192.168.0.1、d=192.168.0.69 -F 1 -H s=10.0.0.1、d=10.0.0.2
192.168.0.1 つの並列フローをセットアップします。最初のフローは 192.168.0.69 と XNUMX の間で、XNUMX 番目のフローは
10.0.0.1 ~ 10.0.0.2 の間のフロー

フローグラインド -p -H s=10.0.0.100/192.168.1.100、d=10.0.0.101/192.168.1.101 -A s
10.0.0.100 と 10.0.0.101 の間に 192.168.1 つのフローを設定し、XNUMX.x IP アドレスを使用します
制御トラフィック用。 RTT 計算の最小応答を有効にする

フローグラインド -i 0.001 -T s = 1 | egrep ^S | gnuplot -持続する -e 'プロット 「 - 」 3:5   ライン
タイトル "スループット" '
ループバック デバイス上に XNUMX つのフローを設定し、ヘルプを使用して送信者のデータをプロットします
gnuplot の

フローグラインド -G s=q,C,400 -G s=p,N,2000,50 -G s=g,U,0.005,0.01 -U 32000
-G s=q,C,400: 400 バイトの定数リクエスト サイズを使用します。
-G s=p,N,2000,50: 平均 2000 バイトの通常の分散応答サイズを使用し、
分散 50
-G s=g,U,0.005,0.01: 最小 0.005 秒で均一に分散されたパケット間ギャップを使用し、
最大10ms
-U 32000: ブロック サイズを 32 KB で切り捨てます (正規分布に必要)

トラフィック シナリオ


次の例は、flowgrind のトラフィック生成機能がどのように実現できるかを示しています。
使用済み。 これらはフローグラインドのさまざまなテストに組み込まれており、証明されています。
意味のある。 ただし、インターネット トラフィックは多様であるため、これらが確実に一致するという保証はありません。
あらゆる状況に適しています。

リクエスト レスポンス 形式 (HTTP)
このシナリオは、の作品に基づいています。
http://www.3gpp2.org/Public_html/specs/C.R1002-0_v1.0_041221.pdf.

フローグラインド -M s -G s=q,C,350 -G s=p,L,9055,115.17 -U 100000
-M s: 送信側でトラフィックをダンプします。
-G s=q,C,350: 定数リクエストのサイズ 350 バイトを使用します
-G s=p,L,9055,115: 平均 9055、分散 115 の対数正規分布を使用します。
応答サイズ
-U 100000: 応答を 100 KB で切り捨てる

このシナリオでは、RTT (値が低いほど良い) とネットワークに焦点を当てることをお勧めします。
メトリックとしてのトランザクション/秒 (値が高いほど優れています)。

対話 セッションを開く (Telnet)
このシナリオは Telnet セッションをエミュレートします。

フローグラインド -G s=q,U,40,10000 -G s=q,U,40,10000 -O b=TCP_NODELAY
-G s=q,U,40,10000 -G s=q,U,40,10000: 均一に分散されたリクエストとレスポンスを使用します。
サイズは40Bから10kBの間
-O b=TCP_NODELAY: Telnet アプリケーションで使用されるソケット オプション TCP_NODELAY を設定します。

このシナリオでは、RTT (低いほど良い) とネットワーク トランザクション数が有用なメトリクスになります。
(高いほど良いです)。

レート 限定的 (ストリーミング メディア)
このシナリオでは、ビットレート 800 kbit/s のビデオ ストリーム転送をエミュレートします。

フローグラインド -G s=q,C,800 -G s=g,N,0.008,0.001
平均が 0.008 で分散が小さい正規分布パケット間ギャップを使用します。
(0.001)。 リクエスト サイズが 800 バイトであるため、平均ビットレートは約 800 バイトになります。
kbit/sを達成します。 分散は、可変ビットレートをエミュレートするために追加されます。
現在のビデオ コーデックで使用されています。

このシナリオでは、IAT (低いほど優れています) と最小スループット (高いほど優れています) は次のようになります。
興味深い指標。

出力 COLUMNS


フロー/エンドポイント 識別子
# フローエンドポイント、ソースの場合は「S」、宛先の場合は「D」のいずれか

ID 数値フロー識別子

始まる & end
測定間隔の境界を秒単位で指定します。 表示されている時間は経過時間です
RPC メッセージを受信して​​からデーモン ポイントからテストを開始するまでの時間
ビュー

申し込み メトリクス
 
この測定間隔中にフロー エンドポイントのグッドプットを送信し、
Mbit/s (デフォルト) または MB/s (-m)

トランサック
XNUMX 秒あたりに正常に受信された応答ブロックの数 (これをネットワークと呼びます)
トランザクション/秒)

要求/応答
この測定間隔中に送信された要求および応答ブロックの数 (列
デフォルトでは無効になっています)

IAT 到着間隔時間 (IAT) をブロックします。 最小値と最大値を合わせると、
その特定の測定間隔の算術平均が表示されます。 ブロックがない場合は、
レポート間隔中に受信した場合は、「inf」が表示されます。

DLY & RTT
一方向と二方向のブロック遅延は、それぞれブロック レイテンシとブロック ラウンドトリップです。
時間 (RTT)。 両方の遅延について、その中で発生する最小値と最大値は
測定間隔を算術平均とともに表示します。 ブロックがない場合は、
それぞれブロック確認応答がそのレポート間隔中に到着した場合、「inf」は
表示されます。 一方向と双方向のブロック遅延はどちらもデフォルトで無効になっています(「
オプション -I & -A).

カーネル メトリクス (TCP_情報)
以下のすべての TCP 固有のメトリックは、TCP_INFO を通じてカーネルから取得されます。
ソケットオプション end すべてのレポート間隔。 サンプリングレートは次の方法で変更できます。
オプション -i.

cwnd (tcpi_cwnd)
TCP 輻輳ウィンドウ (CWND) のサイズ (セグメント (Linux) またはバイト数)
(FreeBSD)

ああ (tcpi_snd_sshtresh)
スロースタートしきい値のサイズ (セグメント数 (Linux) またはバイト数 (FreeBSD))

ウアック (tcpi_unacked)
現在確認されていないセグメントの数、つまり、処理中のセグメントの数
(フライトサイズ) (Linux のみ)

(tcpi_sacked)
選択的に確認応答されたセグメントの数 (Linux のみ)

失われた (tcpi_lost)
失われたと想定されるセグメントの数 (Linux のみ)

retr (tcpi_retrans)
未確認の再送信セグメントの数 (Linux のみ)

トレット (tcpi_retransmits)
再送信タイムアウト (RTO) によってトリガーされる再送信の回数 (Linux のみ)

偽物 (tcpi_fackets)
SND.UNA と選択的に確認された最高のセグメントの間のセグメントの数
シーケンス番号 (SND.FACK) (Linux のみ)

リア (tcpi_reordering)
セグメント並べ替えメトリック。 Linux カーネルは並べ替えを検出して対処できます。
セグメントが変位しても、パフォーマンスが大幅に低下することはありません。
並べ替えメトリックを超えないこと (Linux のみ)

RTT (tcpi_rtt) と rttvar (tcpi_rttvar)
TCP ラウンドトリップ時間とその分散 (ミリ秒単位)

RTO (tcpi_rto)
ミリ秒単位で指定される再送信タイムアウト

ブコフ (tcpi_backoff)
RTO バックオフの数 (Linux のみ)

ca 状態 (tcpi_ca_state)
に実装されている TCP 輻輳制御ステート マシンの内部状態
Linux カーネル。 次のいずれかになります 開いた, 障害, CWR, 回復 or 損失 (Linuxのみ)

Open が正常な状態です。 重複した確認応答 (ACK) が存在しないことを示します。
受信され、セグメントは失われたとはみなされません

障害
最初の連続した重複 ACK の受信時に入力される、または
選択的確認応答 (SACK)

CWR Explicit Congestion Notification (ECN) からの通知が入力されると入力されます。
受け取られます

回復
XNUMX つの重複 ACK または同等の数の SACK が送信された場合に入力されます。
受け取った。 この状態では、次のような輻輳制御と損失回復手順が行われます。
高速再送信および高速リカバリ (RFC 5861) が実行されます

損失 RTO が期限切れになると入力されます。 再び輻輳制御と損失回復
手続きが実行される

SMS & 午後トゥ
送信者の最大セグメント サイズとパスの最大送信単位 (バイト単位)

内部 フローグラインド 状態 (のみ 使用可能 in debug ビルド)
status 診断を目的としたフローグラインド内部の流れの状態。 XNUMXつのタプルです
値。最初の値は送信用で、XNUMX 番目の値は受信用です。 理想的には、
フローの送信元エンドポイントと宛先エンドポイントの両方が対称である必要がありますが、
それらは同期されていないため、同時に変更することはできません。 可能な値
には次の値があります:

c 送受信が完了した方向

d 初期遅延を待っています

f 障害状態

l アクティブ状態、まだ何も送受信されていない

n 通常のアクティビティ、一部のデータが送信または受信されました

o その方向のフローの継続時間はゼロであり、データは交換されません

作者


Flowgrind はもともと Daniel Schaffrath によって始められました。 分散測定
アーキテクチャと高度なトラフィック生成は、後に Tim Kosse によって追加されました。
クリスチャン・サムセル。 現在、flowgrind の開発と保守は Arnd Hannemann と
アレクサンダー・ツィマーマン。

onworks.net サービスを使用してオンラインで flowgrind を使用する


無料のサーバーとワークステーション

Windows と Linux のアプリをダウンロード

Linuxコマンド

Ad