
TCP、UDP、HTTP、HTTPS、ICMPを使用したネットワークパフォーマンステスト用のクロスプラットフォームCLI:帯域幅、接続数/秒、パケット数/秒、レイテンシ、パケット損失、ジッタ、ping、traceroute。
Ethr は、golang で書かれたクロスプラットフォーム対応のネットワークパフォーマンス測定ツールです。このプロジェクトの目標は、帯域幅、接続数/秒、パケット数/秒、遅延、損失、ジッターといった包括的なネットワークパフォーマンス測定を、TCP、UDP、HTTP、HTTPS などの複数のプロトコルにわたって、Windows、Linux、その他の Unix システムなどの複数のプラットフォームで提供するネイティブツールを提供することです。
Ethr は、既存のオープンソースのネットワークパフォーマンスツールから着想を得て、それらのアイデアを基に構築されています。帯域幅測定については、TCP および UDP トラフィックにおいて iPerf3 と似ています。iPerf3 には、帯域制限付きテストやより豊富な機能セットなど、より多くのオプションがありますが、Ethr は複数スレッドをサポートしており、1024 以上の接続数にスケールでき、複数のクライアントが単一のサーバーと通信することなどが可能です。遅延測定については、Windows の latte や Linux の sockperf に似ています。
Ethr は他のツールと比較して、より多くのテスト測定を提供します。例えば、帯域幅、接続数/秒、パケット数/秒、遅延、TCP 接続セットアップ遅延の測定をすべて単一のツールで提供します。将来は、ネットワークパフォーマンス測定のための包括的なツールにするために、より多くの機能を追加(他の人々の貢献を期待)し、より多くのプロトコルをサポートする計画があります。
Ethr は golang のおかげで、機能を制限する可能性のある cygwin のような抽象化レイヤーを介したコンパイルとは異なり、ネイティブにクロスプラットフォームです。iPerf3、ntttcp、psping、sockperf、latte などのツールの機能を組み合わせ、複数のプラットフォームと複数のプロトコルにわたって単一のツールを提供することで、パフォーマンス測定を統一することを目指しています。
https://github.com/Microsoft/ethr/releases/latest
Linux
wget https://github.com/microsoft/ethr/releases/latest/download/ethr_linux.zip
unzip ethr_linux.zip
Windows Powershell
wget https://github.com/microsoft/ethr/releases/latest/download/ethr_windows.zip -OutFile ethr_windows.zip
Expand-Archive .\ethr_windows.zip -DestinationPath .
OSX
wget https://github.com/microsoft/ethr/releases/latest/download/ethr_osx.zip
unzip ethr_osx.zip
注: ソースからビルドするには、go バージョン 1.11 以降が必要です。
Ethr の依存関係を管理するために go-module を使用しています。詳細については、go-modules の使い方 を確認してください。
git clone https://github.com/Microsoft/ethr.git
cd ethr
go build
ethr が $GOPATH/src ツリー内にクローンされている場合は、GO111MODULE=on を指定して go コマンドを実行してください!
以下のコマンドでイメージをビルドします:
docker build -t microsoft/ethr .
バイナリを作成:
Linux
docker run -e GOOS=linux -v $(pwd):/out microsoft/ethr make build-docker
Windows
docker run -e BINARY_NAME=ethr.exe -e GOOS=windows -v $(pwd):/out microsoft/ethr make build-docker
OS X
docker run -e BINARY_NAME=ethr -e GOOS=darwin -v $(pwd):/out microsoft/ethr make build-docker
go get github.com/microsoft/ethr
yay (https://github.com/Jguer/yay) を使用している場合:
yay -S ethr
「ソースからのビルド」のトピックに従って ethr.exe をビルドします。
新しいリリースバージョンを追加するために ethr.nuspec を変更します。
vim ethr.nuspec
nuget パッケージを作成します (例: Ethr.0.2.1.nupkg)。
nuget.exe pack ethr.nuspec
パッケージを nuget.org にアップロードします。
ヘルプ:
ethr -h
サーバー:
ethr -s
テキスト UI 付きサーバー:
ethr -s -ui
クライアント:
ethr -c <server ip>
例:
// サーバーを起動
ethr -s
// 1 スレッドを使用してデフォルト(帯域幅)テスト測定のクライアントを起動
ethr -c localhost
// 8 スレッドを使用して帯域幅テストを開始
ethr -c localhost -n 8
// 64 スレッドを使用してサーバー 10.1.0.11 への接続数/秒テストを開始
ethr -c 10.1.0.11 -t c -n 64
// ポート 9999 で Ethr サーバーを実行
./ethr -s -port 9999
// ポート 9999 の ethr サーバーへの TCP 接続セットアップ遅延を測定
// Ethr サーバーが IP アドレス 10.1.1.100 のサーバーで実行されていると仮定
./ethr -c 10.1.1.100 -p tcp -t pi -d 0 -4 -port 9999
// ポート 443 の www.github.com への TCP 接続セットアップ遅延を測定
./ethr -x www.github.com:443 -p tcp -t pi -d 0 -4
// ポート 443 の www.github.com への TCP 接続セットアップ遅延を測定
// 注: ここではポート 443 は https から自動的に設定されます
./ethr -x https://www.github.com -p tcp -t pi -d 0 -4
// www.github.com への ICMP ping 遅延を測定
sudo ./ethr -x www.github.com -p icmp -t pi -d 0 -4
// Linux の mtr と同様の測定を実行
sudo ./ethr -x www.github.com -p icmp -t mtr -d 0 -4
// 1 バイトの小さなパケットを送信して UDP 上のパケット数/秒を測定
./ethr -c 172.28.192.1 -p udp -t p -d 0
ICMP 関連のテスト (Ping、TraceRoute、MyTraceRoute) では、Windows はファイアウォールで ICMP を許可する必要があります。これは、PowerShell で次のコマンドを使用して行うことができます。ただし、これはセットアップのセキュリティポリシーで許可されている場合にのみ使用してください。
// IPv4 のファイアウォール経由で ICMP パケットを許可
New-NetFirewallRule -DisplayName "ICMP_Allow_Any" -Direction Inbound -Protocol ICMPv4 -IcmpType Any -Action Allow -Profile Any -RemotePort Any
// IPv6 のファイアウォール経由で ICMP パケットを許可
New-NetFirewallRule -DisplayName "ICMPV6_Allow_Any" -Direction Inbound -Protocol ICMPv6 -IcmpType Any -Action Allow -Profile Any -RemotePort Any
さらに、TCP ベースの TraceRoute および MyTraceRoute では、管理者モードが必要です。そうしないと、Ethr は ICMP TTL 超過メッセージを受信できません。
ICMP Ping、ICMP/TCP TraceRoute、MyTraceRoute には、sudo による特権モードが必要です。
-h
ヘルプ
-no
ファイルへのログ記録を無効にします。ファイルへのログ記録はデフォルトで有効です。
-o <filename>
ログファイルの名前。デフォルトでは、次のファイル名が使用されます:
サーバーモード: 'ethrs.log'
クライアントモード: 'ethrc.log'
-debug
ログ出力にデバッグ情報を有効にします。
-4
IP v4 バージョンのみを使用します
-6
IP v6 バージョンのみを使用します
このモードでは、Ethr はサーバーとして実行され、複数のクライアントが
サーバーに対してパフォーマンステストを実行できるようにします。
-s
サーバーモードで実行します。
-ip <string>
TCP および UDP テスト用に指定されたローカル IP アドレスにバインドします。
これは有効な IPv4 または IPv6 アドレスである必要があります。
デフォルト: <空> - 任意の IP
-port <number>
TCP および UDP テスト用に指定されたポート番号を使用します。
デフォルト: 8888
-ui
出力をテキスト UI で表示します。
このモードでは、Ethr クライアントは Ethr サーバーとのみ通信できます。
-c <server>
クライアントモードで実行し、<server> に接続します。
サーバーは、名前、FQDN、または IP アドレスで指定されます。
-b <rate>
毎秒のビット数だけを送信します (形式: <num>[K | M | G])
帯域幅テストでのみ有効です。デフォルト: 0 - 無制限
例: 100 (100bits/s)、1M (1Mbits/s)。
-cport <number>
TCP および UDP テスト用にクライアントで指定されたローカルポート番号を使用します。
デフォルト: 0 - エフェメラルポート
-d <duration>
テストの期間 (形式: <num>[ms | s | m | h]
0: 無期限に実行
デフォルト: 10s
-g <gap>
連続する測定間の時間間隔 (形式: <num>[ms | s | m | h]
遅延、ping、traceRoute テストでのみ有効です。
0: 間隔なし
デフォルト: 1s
-i <iterations>
各遅延測定のラウンドトリップ反復回数。
遅延テストでのみ有効です。
デフォルト: 1000
-ip <string>
TCP および UDP テスト用に指定されたローカル IP アドレスにバインドします。
これは有効な IPv4 または IPv6 アドレスである必要があります。
デフォルト: <空> - 任意の IP
-l <length>
使用するバッファの長さ (形式: <num>[KB | MB | GB])
帯域幅テストでのみ有効です。最大 1GB。
デフォルト: 16KB
-n <number>
並列セッション数(およびスレッド数)。
0: CPU 数と同じ
デフォルト: 1
-p <protocol>
プロトコル ("tcp"、"udp"、"http"、"https"、または "icmp")
デフォルト: tcp
-port <number>
TCP および UDP テスト用に指定されたポート番号を使用します。
デフォルト: 8888
-r
帯域幅テストでは、サーバーからクライアントにデータを送信します。
-t <test>
実行するテスト ("b"、"c"、"p"、"l"、"cl"、または "tr")
b: 帯域幅
c: 接続数/秒
p: パケット数/秒
l: 遅延、損失、ジッター
pi: Ping 損失と遅延
tr: TraceRoute
mtr: 損失と遅延を含む MyTraceRoute
デフォルト: b - 帯域幅測定。
-tos
IPv4 TOS フィールドまたは IPv6 トラフィッククラスフィールドで使用する 8 ビット値を指定します。
-w <number>
ウォームアップに使用する反復回数を指定します。
デフォルト: 1
-T <string>
ログファイルで結果を記録するために指定されたタイトルを使用します。
デフォルト: <空>
このモードでは、Ethr は Ethr 以外のサーバーと通信します。このモードは、
Ping、接続数/秒、TraceRoute などのいくつかの種類の測定のみをサポートします。
-x <destination>
外部クライアントモードで実行し、<destination> に接続します。
<destination> は URL または Host:Port 形式で指定されます。
URL の場合、ポートが指定されていないと、http では 80、https では 443 と見なされます。
例: TCP - www.microsoft.com:443 または 10.1.0.4:22 または https://www.github.com
ICMP - www.microsoft.com または 10.1.0.4
-cport <number>
TCP および UDP テスト用にクライアントで指定されたローカルポート番号を使用します。
デフォルト: 0 - エフェメラルポート
-d <duration>
テストの期間 (形式: <num>[ms | s | m | h]
0: 無期限に実行
デフォルト: 10s
-g <gap>
連続する測定間の時間間隔 (形式: <num>[ms | s | m | h]
遅延、ping、traceRoute テストでのみ有効です。
0: 間隔なし
デフォルト: 1s
-ip <string>
TCP および UDP テスト用に指定されたローカル IP アドレスにバインドします。
これは有効な IPv4 または IPv6 アドレスである必要があります。
デフォルト: <空> - 任意の IP
-n <number>
並列セッション数(およびスレッド数)。
0: CPU 数と同じ
デフォルト: 1
-p <protocol>
プロトコル ("tcp"、または "icmp")
デフォルト: tcp
-t <test>
実行するテスト ("c"、"cl"、または "tr")
c: 接続数/秒
pi: Ping 損失と遅延
tr: TraceRoute
mtr: 損失と遅延を含む MyTraceRoute
デフォルト: pi - Ping 損失と遅延。
-tos
IPv4 TOS フィールドまたは IPv6 トラフィッククラスフィールドで使用する 8 ビット値を指定します。
-w <number>
ウォームアップに使用する反復回数を指定します。
デフォルト: 1
-T <string>
ログファイルで結果を記録するために指定されたタイトルを使用します。
デフォルト: <空>
Windows
テスト済み: Windows 10、Windows 7 SP1
未テスト: その他の Windows バージョン
Linux
テスト済み: Ubuntu Linux 18.04.1 LTS、OpenSuse Leap 15
未テスト: その他の Linux バージョン
OSX
テスト済み: OSX はコントリビューターによってテストされています
その他
現時点では他のプラットフォームはテストされていません
やることリストの作業項目を以下に示します。これらの作業項目や、その他の機能、バグ修正への貢献を歓迎します。
このプロジェクトでは、貢献と提案を歓迎します。ほとんどの貢献には、あなたの貢献を使用する権利が実際にあり、使用を許可することに同意することを宣言する Contributor License Agreement (CLA) への同意が必要です。詳細については、https://cla.microsoft.com をご覧ください。
プルリクエストを送信すると、CLA ボットが CLA を提供する必要があるかどうかを自動的に判断し、PR を適切に装飾します(例: ラベル、コメント)。ボットから提供される指示に従ってください。これは、CLA を使用するすべてのリポジトリで一度だけ行う必要があります。
このプロジェクトは、Microsoft Open Source Code of Conduct を採用しています。 詳細については、Code of Conduct FAQ を参照するか、追加の質問やコメントがある場合は [email protected] までお問い合わせください。
| プロトコル | 帯域幅 | 接続数/秒 | パケット数/秒 | 遅延 | Ping | TraceRoute | MyTraceRoute |
|---|
| TCP | はい | はい | 該当なし | はい | はい | はい | はい |
| UDP | はい | 該当なし | はい | いいえ | 該当なし | いいえ | いいえ |
| ICMP | いいえ | 該当なし | 該当なし | 該当なし | はい | はい | はい |