Microsoftが提供しているネットワーク帯域計測ツール、NTttcpを利用したスループット計測を実施します。
■環境
windows(IPアドレス:192.168.142.71)
OS 名: Microsoft Windows Server 2016 Standard Evaluation
OS バージョン: 10.0.14393 N/A ビルド 14393
ubuntu(IPアドレス:192.168.142.53)
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.2 LTS
Release: 22.04
Codename: jammy
■Windows側の準備
Windows側のNTttcp利用については、実行ファイルを配置するだけでOKです。
以下githubにアクセスして、ntttcp.exe
をダウンロードします。
適当なディレクトリに配置します。
今回はC:\tools
に配置しました。
■Ubuntu側の準備
Ubuntu側ではパッケージのインストール、資材をgitからダウンロード、資材をmakeします。
まずはパッケージのインストールを行います。
sudo apt-get -y install build-essential
sudo apt-get -y install git
続いてgitからのダウンロードを行います。
git clone https://github.com/Microsoft/ntttcp-for-linux
最後にmakeを行います。
cd ntttcp-for-linux/src
make && make install
make時に以下エラーが表示される場合、/usr/local/bin/
ディレクトリのパーミッション設定を追加します。
cp ntttcp /usr/local/bin/
cp: cannot create regular file '/usr/local/bin/ntttcp': Permission denied
make: *** [Makefile:48: install] Error 1
$ sudo chmod 777 /usr/local/bin
$ make && make install
当環境ではufwを停止しています。
必要に応じてファイアーウォールの穴あけ等は実施してください。
(NTttcp利用するポートはデフォルトではTCP5001,5002)
$ systemctl status ufw
○ ufw.service - Uncomplicated firewall
Loaded: loaded (/lib/systemd/system/ufw.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Fri 2023-05-12 09:04:17 JST; 10s ago
■計測(Windows→Ubuntu)
Windowsを送信側、Ubuntuを受信側として計測を行います。
(Windowsはコマンドプロンプトを起動してコマンドを打ちます)
Windows(送信側)
C:\tools\ntttcp.exe -s -m 2,*,192.168.142.53 -t 60 -ns
Ubuntu(受信側)
ntttcp -r -m 2,*,192.168.142.53 -t 60 -N
オプションは以下の通りです。
-s
送信側指定
-r
受信側指定
-m
マッピング、 <使用スレッド数>,<スレッド番号>,<受信IPアドレス> を定義
-t
計測時間
-ns
windows側で、Linuxと通信する際のおまじない
-N
Linux側で、Windowsと通信する際のおまじない
Windows側では415.753MB/s
(3.326Gbps)、Ubuntu側では3.49Gbps
の速度を確認できました。
C:\tools>C:\tools\ntttcp.exe -s -m 2,*,192.168.142.53 -t 60 -ns
Copyright Version 5.39
Network activity progressing...
Thread Time(s) Throughput(KB/s) Avg B / Compl
====== ======= ================ =============
0 60.003 194272.953 65536.000
1 60.002 231473.884 65536.000
##### Totals: #####
Bytes(MEG) realtime(s) Avg Frame Size Throughput(MB/s)
================ =========== ============== ================
24947.125000 60.005 1456.364 415.753
Throughput(Buffers/s) Cycles/Byte Buffers
===================== =========== =============
6652.055 15.554 399154.000
DPCs(count/s) Pkts(num/DPC) Intr(count/s) Pkts(num/intr)
============= ============= =============== ==============
4988.850 0.964 12824.313 0.375
Packets Sent Packets Received Retransmits Errors Avg. CPU %
============ ================ =========== ====== ==========
17961821 288571 1040 0 99.953
C:\tools>
$ ntttcp -r -m 2,*,192.168.142.53 -t 60 -N
NTTTCP for Linux 1.4.0
---------------------------------------------------------
08:14:13 INFO: 2 threads created
08:15:16 INFO: Test run completed.
08:15:16 INFO: Test cycle finished.
08:15:16 INFO: ##### Totals: #####
08:15:16 INFO: test duration :60.00 seconds
08:15:16 INFO: total bytes :26157842432
08:15:16 INFO: throughput :3.49Gbps
08:15:16 INFO: retrans segs :0
08:15:16 INFO: cpu cores :2
08:15:16 INFO: cpu speed :3392.302MHz
08:15:16 INFO: user :0.76%
08:15:16 INFO: system :32.78%
08:15:16 INFO: idle :41.34%
08:15:16 INFO: iowait :0.00%
08:15:16 INFO: softirq :25.12%
08:15:16 INFO: cycles/byte :9.13
08:15:16 INFO: cpu busy (all) :86.80%
---------------------------------------------------------
$
■計測(Ubuntu→Windows)
Ubuntuを送信側、Windowsを受信側として計測を行います。
(Windowsはコマンドプロンプトを起動してコマンドを打ちます)
Ubuntu(送信側)
ntttcp -s -m 2,*,192.168.142.71 -t 60 -N
Windows(受信側)
C:\tools\ntttcp.exe -r -m 2,*,192.168.142.71 -t 60 -ns
オプションは以下の通りです。
-s
送信側指定
-r
受信側指定
-m
マッピング、 <使用スレッド数>,<スレッド番号>,<受信IPアドレス> を定義
-t
計測時間
-ns
windows側で、Linuxと通信する際のおまじない
-N
Linux側で、Windowsと通信する際のおまじない
Windows側では327.152MB/s
(2.617Gbps)、Ubuntu側では2.75Gbps
の速度を確認できました。
C:\tools>C:\tools\ntttcp.exe -r -m 2,*,192.168.142.71 -t 60 -ns
Copyright Version 5.39
Network activity progressing...
ERROR: DoSendsReceives failed: Unexpected disconnect
ERROR: DoSendsReceives failed: error in send/recv
ERROR: StartSenderReceiver in thread: 0 failed: error in send/recv
ERROR: DoWork failed: one or more worker threads failed
ERROR: main failed: one or more worker threads failed
Thread Time(s) Throughput(KB/s) Avg B / Compl
====== ======= ================ =============
0 60.010 275872.955 64998.272
1 60.015 59204.188 64996.065
##### Totals: #####
Bytes(MEG) realtime(s) Avg Frame Size Throughput(MB/s)
================ =========== ============== ================
19636.987663 60.024 57341.820 327.152
Throughput(Buffers/s) Cycles/Byte Buffers
===================== =========== =============
5234.430 18.563 314191.803
DPCs(count/s) Pkts(num/DPC) Intr(count/s) Pkts(num/intr)
============= ============= =============== ==============
496.351 12.053 6292.259 0.951
Packets Sent Packets Received Retransmits Errors Avg. CPU %
============ ================ =========== ====== ==========
50127 359090 0 0 93.869
C:\tools>
$ ntttcp -s -m 2,*,192.168.142.71 -t 60 -N
NTTTCP for Linux 1.4.0
---------------------------------------------------------
08:00:52 INFO: Starting sender activity (no sync) ...
08:00:52 INFO: 2 threads created
08:00:52 INFO: 2 connections created in 2777 microseconds
08:01:52 INFO: Test run completed.
08:01:52 INFO: Test cycle finished.
08:01:52 INFO: 2 connections tested
08:01:52 INFO: ##### Totals: #####
08:01:52 INFO: test duration :60.02 seconds
08:01:52 INFO: total bytes :20595081216
08:01:52 INFO: throughput :2.75Gbps
08:01:52 INFO: retrans segs :943
08:01:52 INFO: cpu cores :2
08:01:52 INFO: cpu speed :3392.302MHz
08:01:52 INFO: user :0.40%
08:01:52 INFO: system :14.80%
08:01:52 INFO: idle :77.73%
08:01:52 INFO: iowait :0.03%
08:01:52 INFO: softirq :7.04%
08:01:52 INFO: cycles/byte :4.40
08:01:52 INFO: cpu busy (all) :37.76%
---------------------------------------------------------
$
■その他(オプション)
Windows版とLinux版でオプションが微妙に異なるので、-h
オプションを利用してオプションを確認することを推奨します。
-h
オプションを表示します。
-s
送信側指定
-r
受信側指定
-m
マッピング、 <使用スレッド数>,<スレッド番号>,<受信IPアドレス> を定義
-t
計測時間
-ns
windows側で、Linuxと通信する際のおまじない(非同期オプション)
-N
Linux側で、Windowsと通信する際のおまじない(非同期オプション)
-6
IPv6モード
-u
UDPモード
-p
送信先ポート指定
-B
帯域制限
-V
詳細出力
■さらにその他(-Nと-ns)
公式では以下のように、非同期オプションである-N
と-ns
についてどちらか片方でもよいような記載になっています。
Windows VM と Linux VM の間で NTTTCP スループット テストを実行するには、Windows の -ns フラグまたは Linux の -N フラグを使用して同期なしモードを有効にします。
https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-network-bandwidth-testing?tabs=linux
こちらについて念のため確認してみましたが、結論から言うと両方とも非同期オプションを付けた方が正しく取得できます。
①両方付けた場合
速度結果は送信側・受信側ともに表示されます。
何回か実施し、またWindowsとLinuxで送信と受信を逆にしてみても毎回同じような結果になるのでおそらく正しいやり方になると思われます。
②片方だけでつけた場合
片方だけ付ける場合は、(送信側 or 受信側) * (Windows or Linux)で4パターン存在します。
結果表示は送信側だけ、受信側だけ、などとまちまちです。
結果的に、送信側にオプションを付けず、受信側だけにオプションを付けた場合は失敗します。
また、送信側に付けた場合も、送信側がLinuxの場合は非常に低速な結果が返却されます。
(通常2~3Gbpsのところ、600Kbpsなどと結果が返されています)
逆にいうと、Windowsを送信側としてオプションを付け、Linuxを受信側としてオプションを付けないケースでしか正しく速度計測できませんでした。
③オプションを付けない場合
非推奨なので言うまでもありませんがうまくいきません。
エラーが出て開始できなかったり、永久に待ちになります。
なお、Windows同士が送信・受信の場合は成功します。
■参考