Microsoft NTttcpを利用したNW帯域幅/スループットの測定(Windows)

#■はじめに
帯域幅/スループットの測定のため、Microsoft NTttcpツールを使用した調査手順を記載します。

>**[Microsoft]帯域幅/スループットのテスト (NTTTCP)**
https://docs.microsoft.com/ja-jp/azure/virtual-network/virtual-network-bandwidth-testing

＃なんと、AWSでも使用を推奨（むしろMSサイトより説明が詳しい？）

>**Amazon EC2 Windows インスタンスのネットワークスループットをベンチマークする方法を教えてください。**
4.EC2 Windows インスタンスのアーキテクチャと名前が一致するフォルダのディレクトリに移動してから、NTttcp を実行します。
>https://aws.amazon.com/jp/premiumsupport/knowledge-center/network-throughput-benchmark-windows-ec2/


#■前提
①本ツールはWindows/Linux両用ですが、今回はWindows Server 2016にて実施しています。
②本ツールは**送信側サーバと受信側サーバの両方ともに仕掛けるツール**です。
③インストールは不要で、実行ファイルを配置して実行するだけとなります。
④TCP 5001-5002ポートを利用します(変更可能)。
⑤確認は、同一のAzure仮想NWに存在する、VM(A)からVM(B)へ行っています。
※ツールの詳細オプション等は、下記の公式ドキュメント(NTttcp.docx)を確認ください。

#■実行準備
①NTttcpをダウンロード
以下のサイトからzipファイルをダウンロードします。公式ドキュメントも付属しています。
>NTttcp Utility: Profile and Measure Windows Networking Performance
https://gallery.technet.microsoft.com/NTttcp-Version-528-Now-f8b12769
NTttcp-v5.33.zip

②解凍および配置
調査を実施したいサーバ**（送信側と受信側の両方）**にzipファイルの中身を配置します。今回は　C:\　直下に配置しています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/201787/5a14c813-00db-df80-27df-06b0468bd657.png)

③コマンドプロンプトを管理者で実行します。

#■実行
送信側、受信側でそれぞれ別のコマンドを実行します。まずはあまりオプションをつけない形で実施します。
送信側[cpu1core,192.168.100.6] -> 受信側[cpu1core,192.168.100.7]

```:受信側（管理者：コマンドプロンプト）
C:\> C:\NTttcp-v5.33\amd64fre\NTttcp.exe [送信/受信指定] [マッピング] [計測時間指定]
```

`受信側指定 : -r`
`送信側指定 : -s`
`マッピング(スレッド,CPU-ID,受信IPアドレス)：-m 2,*,192.168.100.7`
`計測時間30秒 : -t 30`
※マッピングのスレッドは、シングルスレッドCPUは1、マルチスレッドCPUは2を設定します。
※CPU-IDは利用するCPUコアを番号設定可能です。*で任意のコアを利用します。
※マッピング等の内容は受信側と送信側で同じにしないとエラーが出ます。

```:受信側（管理者：コマンドプロンプト）
C:\> C:\NTttcp-v5.33\amd64fre\NTttcp.exe -r -m 2,*,192.168.100.7 -t 30
```

```:送信側（管理者：コマンドプロンプト）
C:\> C:\NTttcp-v5.33\amd64fre\NTttcp.exe -s -m 2,*,192.168.100.7 -t 30
```
<br>

```:結果（管理者：コマンドプロンプト）
C:\>C:\NTttcp-v5.33\amd64fre\NTttcp.exe -s -m 2,*,192.168.100.7 -t 30
Copyright Version 5.33
Network activity progressing...


Thread  Time(s) Throughput(KB/s) Avg B / Compl
======  ======= ================ =============
     0   30.002        44978.335     65536.000
     1   30.002        45865.742     65536.000


#####  Totals:  #####


   Bytes(MEG)    realtime(s) Avg Frame Size Throughput(MB/s)
================ =========== ============== ================
     2661.625000      30.007       1398.837           88.700


Throughput(Buffers/s) Cycles/Byte       Buffers
===================== =========== =============
             1419.202       1.973     42586.000


DPCs(count/s) Pkts(num/DPC)   Intr(count/s) Pkts(num/intr)
============= ============= =============== ==============
     2188.323         2.314        2268.437          2.232


Packets Sent Packets Received Retransmits Errors Avg. CPU %
============ ================ =========== ====== ==========
     1995169           151930       12213      0      7.654
```
＃結果は送信側および受信側で同じ内容が出力されます。


#■結果
「Totals:」の「Throughput(MB/s) 88.700」≒「709.6Mbps」として読み取ることが出来ました。


#■その他
以下オプション指定が出来ます。詳細は公式ドキュメントにてご確認ください。

`詳細 : -v`
実行中のタイムスタンプ/ステータスが追加されます（結果内容表示は同じ）。

`利用ポート(80番) : -p 80`
利用ポートを指定できます。デフォルトは5001-5002番です。
＃指定ポートと指定ポート+1の2ポートを使っているようです。

`ウォームアップ時間(5秒) : -wu 5`
`クールダウンアップ時間(5秒) : -cd 5`
どちらもデフォルトは15秒です。

`UDPモード : -i`

`xmlファイルで出力(c:\test.xml) : -xml c:\test.xml`
デフォルトではファイル出力されません。


#■参考/出典
[Microsoft]帯域幅/スループットのテスト (NTTTCP)
https://docs.microsoft.com/ja-jp/azure/virtual-network/virtual-network-bandwidth-testing

[Microsoft]NTttcp Utility: Profile and Measure Windows Networking Performance
https://gallery.technet.microsoft.com/NTttcp-Version-528-Now-f8b12769


[AWS]Amazon EC2 Windows インスタンスのネットワークスループットをベンチマークする方法を教えてください。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/network-throughput-benchmark-windows-ec2/