iperf3で通信速度を測ってみる

iperf3で通信速度を測ってみる

ネットワークの通信速度は大事

インフラ屋をやっていると、ネットワークの速度は測る必要がある。

設定速度と実測は異なるからだ。

自宅のインターネット回線が1ギガ(1Gbps=約125MB/秒)だったとしよう。でも、なぜかインターネットが遅い気がして、速度計測サイトで計測すると30Mbps(約3.75MB/秒)だったなんてことがある。

自宅ならそれでいいが、何百万円もかけて構築したデータセンターとクラウドの専用線ネットワークが、想定した速度が出ていないとなると大変だ。もちろん、プロトコルや通信するデータによっても速度は変わってくることはある。

それでも、想定した速度がそもそも出るのかというチェックは必要だ。

iperf3とは

自宅のインターネットであれば、速度計測サイトを使えばいいが、オンプレネットワークや、業務ネットワーク内での速度計測は専用ツールが必要になる。

Windows全盛期はサーバーもWindowsサーバーが使われることが多いが、昨今は自社サーバーをLinuxで構築する会社も多いはずだ。

今回はiperf3というツールを使って、ネットワークの速度を計ってみる。

iperf3は、ネットワーク性能の測定に特化したオープンソースのツールだ。主にネットワーク帯域幅のテストに使用され、TCP、UDP、SCTPのプロトコルをサポートしてる。クライアントとサーバー間でデータを送信し、その際のスループットやレイテンシ、ジッターなどを測定するという仕組みだ。

マルチプラットフォームなので、どのOS間でも計測が可能だ。

https://iperf.fr/iperf-download.php

インストールと計測方法

インストール方法

OSによってインストール方法はそれぞれ異なるが、今回はUbuntuサーバー同士で計測する。

$ sudo apt install iperf3

サーバーの実行

sオプションでサーバーとして起動する。

$ iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

上記のような状態になれば、待機状態になる。

終了するときはCtrl+Cで止められる。

クライアントからサーバーに対して計測を実行

以下のコマンドで計測が開始して数秒で完了する。

$ iperf3 -c [サーバーのIPアドレス]

インターネット経由でも、ローカルネットでも計測可能だ。

Ubuntu24.04でインストールすると、最新版は常にサービスを裏で立ち上げて待機するオプションも搭載されたようだが、今回は含めなかった。

測定結果

測定数回行われて、平均値を算出してくれる。シンプルに測定した結果は以下の通りだ。

ローカルネット内(1Gbpsの有線LAN接続)

サーバー側(Proxmox上のUbuntu20.04)

$ iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.1.119, port 59176
[  5] local 192.168.1.59 port 5201 connected to 192.168.1.119 port 59186
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  92.3 MBytes   774 Mbits/sec
[  5]   1.00-2.00   sec  99.1 MBytes   831 Mbits/sec
[  5]   2.00-3.00   sec   101 MBytes   843 Mbits/sec
[  5]   3.00-4.00   sec  97.7 MBytes   820 Mbits/sec
[  5]   4.00-5.00   sec  96.7 MBytes   811 Mbits/sec
[  5]   5.00-6.00   sec  96.4 MBytes   808 Mbits/sec
[  5]   6.00-7.00   sec  95.5 MBytes   801 Mbits/sec
[  5]   7.00-8.00   sec  94.9 MBytes   796 Mbits/sec
[  5]   8.00-9.00   sec  94.1 MBytes   790 Mbits/sec
[  5]   9.00-10.00  sec  93.9 MBytes   788 Mbits/sec
[  5]  10.00-10.07  sec  6.94 MBytes   786 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.07  sec   968 MBytes   806 Mbits/sec                  receiver
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

クライアント側(Windows11のWSLのUbuntu20.04)

$ iperf3 -c 192.168.1.59
Connecting to host 192.168.1.59, port 5201
[  7] local 172.29.136.215 port 36014 connected to 192.168.1.59 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  7]   0.00-1.00   sec   100 MBytes   839 Mbits/sec    0   3.15 MBytes
[  7]   1.00-2.00   sec  98.8 MBytes   828 Mbits/sec  186   2.37 MBytes
[  7]   2.00-3.00   sec   100 MBytes   839 Mbits/sec    0   2.56 MBytes
[  7]   3.00-4.00   sec  98.8 MBytes   828 Mbits/sec    0   2.72 MBytes
[  7]   4.00-5.00   sec  96.2 MBytes   807 Mbits/sec    0   2.84 MBytes
[  7]   5.00-6.00   sec  96.2 MBytes   807 Mbits/sec    0   2.94 MBytes
[  7]   6.00-7.00   sec  95.0 MBytes   797 Mbits/sec    0   3.00 MBytes
[  7]   7.00-8.00   sec  95.0 MBytes   797 Mbits/sec    0   3.00 MBytes
[  7]   8.00-9.00   sec  93.8 MBytes   786 Mbits/sec    0   3.00 MBytes
[  7]   9.00-10.00  sec  95.0 MBytes   797 Mbits/sec    0   3.00 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  7]   0.00-10.00  sec   969 MBytes   813 Mbits/sec  186             sender
[  7]   0.00-10.07  sec   968 MBytes   806 Mbits/sec                  receiver

iperf Done.

1Gbpsの有線LAN接続のため、800Mbps出ているので上出来だ。

ネパールと日本のVPN接続(YamahaRTX1200)-日本時間平日20時半

サーバー側(Proxmox上のUbuntu24.04) in 日本

$ iperf3 -s
-----------------------------------------------------------
Server listening on 5201 (test #1)
-----------------------------------------------------------
Accepted connection from 192.168.100.201, port 59906
[  5] local 192.168.100.81 port 5201 connected to 192.168.100.201 port 59902
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec   768 KBytes  6.28 Mbits/sec
[  5]   1.00-2.00   sec  3.75 MBytes  31.5 Mbits/sec
[  5]   2.00-3.00   sec  6.00 MBytes  50.3 Mbits/sec
[  5]   3.00-4.00   sec  5.25 MBytes  44.0 Mbits/sec
[  5]   4.00-5.00   sec  5.62 MBytes  47.2 Mbits/sec
[  5]   5.00-6.00   sec  5.25 MBytes  44.0 Mbits/sec
[  5]   6.00-7.00   sec  6.00 MBytes  50.3 Mbits/sec
[  5]   7.00-8.00   sec  5.75 MBytes  48.2 Mbits/sec
[  5]   8.00-9.00   sec  5.88 MBytes  49.3 Mbits/sec
[  5]   9.00-10.00  sec  5.88 MBytes  49.3 Mbits/sec
[  5]  10.00-10.15  sec   896 KBytes  48.2 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.15  sec  51.0 MBytes  42.1 Mbits/sec                  receiver
-----------------------------------------------------------
Server listening on 5201 (test #2)
-----------------------------------------------------------

クライアント側(Windows11のWSLのUbuntu20.04) in ネパール

$ iperf3 -c 192.168.100.81
Connecting to host 192.168.100.81, port 5201
[  7] local 172.29.136.215 port 39432 connected to 192.168.100.81 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  7]   0.00-1.00   sec  3.09 MBytes  25.9 Mbits/sec    0    814 KBytes
[  7]   1.00-2.00   sec  4.92 MBytes  41.2 Mbits/sec  483    759 KBytes
[  7]   2.00-3.00   sec  5.00 MBytes  41.9 Mbits/sec    0    821 KBytes
[  7]   3.00-4.00   sec  6.25 MBytes  52.4 Mbits/sec    0    865 KBytes
[  7]   4.00-5.00   sec  5.00 MBytes  41.9 Mbits/sec    0    894 KBytes
[  7]   5.00-6.00   sec  5.00 MBytes  41.9 Mbits/sec    0    912 KBytes
[  7]   6.00-7.00   sec  6.25 MBytes  52.4 Mbits/sec    0    919 KBytes
[  7]   7.00-8.00   sec  6.25 MBytes  52.4 Mbits/sec    0    922 KBytes
[  7]   8.00-9.00   sec  5.00 MBytes  41.9 Mbits/sec    1    922 KBytes
[  7]   9.00-10.00  sec  6.25 MBytes  52.4 Mbits/sec    0    927 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  7]   0.00-10.00  sec  53.0 MBytes  44.5 Mbits/sec  484             sender
[  7]   0.00-10.15  sec  51.0 MBytes  42.1 Mbits/sec                  receiver

iperf Done.

40Mbps強の速度が出ていることになる。

VPN経由であることを考えても、まずまずの結果だと思う。

ネパールと日本のVPN接続(WireGuard)-日本時間平日21時

ルーター搭載のVPNよりWireGuardの方が速いと聞くので比べてみた。

サーバー側(Proxmox上のUbuntu24.04) in 日本

$ iperf3 -s
-----------------------------------------------------------
Server listening on 5201 (test #1)
-----------------------------------------------------------
Accepted connection from 192.168.100.78, port 60980
[  5] local 192.168.100.81 port 5201 connected to 192.168.100.78 port 60996
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec   384 KBytes  3.14 Mbits/sec
[  5]   1.00-2.00   sec  4.50 MBytes  37.8 Mbits/sec
[  5]   2.00-3.00   sec  5.38 MBytes  45.1 Mbits/sec
[  5]   3.00-4.00   sec  5.25 MBytes  44.0 Mbits/sec
[  5]   4.00-5.00   sec  5.25 MBytes  44.0 Mbits/sec
[  5]   5.00-6.00   sec  5.25 MBytes  44.0 Mbits/sec
[  5]   6.00-7.00   sec  5.38 MBytes  45.1 Mbits/sec
[  5]   7.00-8.00   sec  5.38 MBytes  45.1 Mbits/sec
[  5]   8.00-9.00   sec  5.25 MBytes  44.0 Mbits/sec
[  5]   9.00-10.00  sec  5.38 MBytes  45.1 Mbits/sec
[  5]  10.00-10.16  sec   896 KBytes  44.9 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.16  sec  48.2 MBytes  39.8 Mbits/sec                  receiver
-----------------------------------------------------------
Server listening on 5201 (test #2)
-----------------------------------------------------------

クライアント側(Windows11のWSLのUbuntu20.04) in ネパール

$ iperf3 -c 192.168.100.81
Connecting to host 192.168.100.81, port 5201
[  7] local 172.29.136.215 port 35638 connected to 192.168.100.81 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  7]   0.00-1.00   sec  2.34 MBytes  19.6 Mbits/sec    0    428 KBytes
[  7]   1.00-2.00   sec  6.06 MBytes  50.8 Mbits/sec    0   1.42 MBytes
[  7]   2.00-3.00   sec  5.00 MBytes  41.9 Mbits/sec    0   1.69 MBytes
[  7]   3.00-4.00   sec  5.00 MBytes  41.9 Mbits/sec  151   1.27 MBytes
[  7]   4.00-5.00   sec  5.00 MBytes  41.9 Mbits/sec  216    965 KBytes
[  7]   5.00-6.00   sec  6.25 MBytes  52.4 Mbits/sec    0   1022 KBytes
[  7]   6.00-7.00   sec  5.00 MBytes  41.9 Mbits/sec    0   1.04 MBytes
[  7]   7.00-8.00   sec  5.00 MBytes  41.9 Mbits/sec    0   1.06 MBytes
[  7]   8.00-9.00   sec  5.00 MBytes  41.9 Mbits/sec    0   1.08 MBytes
[  7]   9.00-10.00  sec  6.25 MBytes  52.4 Mbits/sec    0   1.08 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  7]   0.00-10.00  sec  50.9 MBytes  42.7 Mbits/sec  367             sender
[  7]   0.00-10.16  sec  48.2 MBytes  39.8 Mbits/sec                  receiver

iperf Done.

残念ながら、40Mbps弱とYamahaのルーターのVPNより2Mbps遅い結果になってしまった。

しかし、普段の用途を考えると、YamahaルーターのVPNよりWireGuardの方が体感は早い気がしている。

つまり、計測用のデータは純粋な経路の速度であって、データの内容によって暗号化処理が走るので処理速度に影響が出るという事だろう。

オプションについて

オプションに関しても本家サイトに記載があるので参考にしてほしい。

https://iperf.fr/iperf-doc.php

ポイントはUDPで計測すると、Jitterやパケットロスを計ることもできる。

Jitterとは、データがネットワークを通じて送受信される際の遅延のばらつきを表す。通常、ネットワーク通信ではデータが一定の間隔で送られることが期待されるが、これが発生すると、その間隔が不規則になる。つまり、データが一部早く届いたり、逆に遅れて届いたりするということだ。

この値が大きくなると、特にリアルタイム通信に悪影響が出る。Jitter値には明確な基準はないが、一般的にリアルタイム通信(VoIP、ビデオ会議、オンラインゲームなど)では、以下の目安を参考にすると良いと思う。

Jitter値ざっくり判定
0~5msおおむね良好
5~10ms許容範囲内(影響はあるが、実用には支障なし)
10~20ms少し問題あり(音声や映像に影響が出る可能性あり)
20~50ms大きな問題あり(会話の遅延やラグが発生する可能性が高い)
50ms~致命的(リアルタイム通信に大きな支障)

では、ローカル環境で試してみる。

サーバー側

$ iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

Accepted connection from 192.168.1.119, port 59166
[  5] local 192.168.1.59 port 5201 connected to 192.168.1.119 port 58455
[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-1.00   sec   116 KBytes   952 Kbits/sec  61797.868 ms  0/87 (0%)
[  5]   1.00-2.00   sec   122 KBytes   996 Kbits/sec  173.975 ms  0/91 (0%)
[  5]   2.00-3.00   sec   123 KBytes  1.01 Mbits/sec  0.514 ms  0/92 (0%)
[  5]   3.00-4.00   sec   122 KBytes   996 Kbits/sec  0.061 ms  0/91 (0%)
[  5]   4.00-5.00   sec   122 KBytes   996 Kbits/sec  0.064 ms  0/91 (0%)
[  5]   5.00-6.00   sec   123 KBytes  1.01 Mbits/sec  0.062 ms  0/92 (0%)
[  5]   6.00-7.00   sec   122 KBytes   996 Kbits/sec  0.058 ms  0/91 (0%)
[  5]   7.00-8.00   sec   122 KBytes   996 Kbits/sec  0.057 ms  0/91 (0%)
[  5]   8.00-9.00   sec   123 KBytes  1.01 Mbits/sec  0.052 ms  0/92 (0%)
[  5]   9.00-10.00  sec   122 KBytes   996 Kbits/sec  0.049 ms  0/91 (0%)
[  5]  10.00-10.06  sec  6.68 KBytes   981 Kbits/sec  0.044 ms  0/5 (0%)
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-10.06  sec  1.19 MBytes   995 Kbits/sec  0.044 ms  0/914 (0%)  receiver
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

クライアント側

$ iperf3 -c 192.168.1.59 -u -b 1M
Connecting to host 192.168.1.59, port 5201
[  7] local 172.29.136.215 port 41229 connected to 192.168.1.59 port 5201
[ ID] Interval           Transfer     Bitrate         Total Datagrams
[  7]   0.00-1.00   sec   123 KBytes  1.01 Mbits/sec  92
[  7]   1.00-2.00   sec   122 KBytes   996 Kbits/sec  91
[  7]   2.00-3.00   sec   123 KBytes  1.01 Mbits/sec  92
[  7]   3.00-4.00   sec   122 KBytes   996 Kbits/sec  91
[  7]   4.00-5.00   sec   122 KBytes   996 Kbits/sec  91
[  7]   5.00-6.00   sec   123 KBytes  1.01 Mbits/sec  92
[  7]   6.00-7.00   sec   122 KBytes   996 Kbits/sec  91
[  7]   7.00-8.00   sec   122 KBytes   996 Kbits/sec  91
[  7]   8.00-9.00   sec   123 KBytes  1.01 Mbits/sec  92
[  7]   9.00-10.00  sec   122 KBytes   996 Kbits/sec  91
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  7]   0.00-10.00  sec  1.19 MBytes  1.00 Mbits/sec  0.000 ms  0/914 (0%)  sender
[  7]   0.00-10.06  sec  1.19 MBytes   995 Kbits/sec  0.044 ms  0/914 (0%)  receiver

iperf Done.

近いので、何の問題もない。

では、先ほどの日本とネパールではどうか。

サーバー in 日本

$ iperf3 -s
-----------------------------------------------------------
Server listening on 5201 (test #1)
-----------------------------------------------------------
Accepted connection from 192.168.100.78, port 65008
[  5] local 192.168.100.81 port 5201 connected to 192.168.100.78 port 59361
[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-1.00   sec   103 KBytes   843 Kbits/sec  1.356 ms  0/77 (0%)
[  5]   1.00-2.00   sec   123 KBytes  1.01 Mbits/sec  0.982 ms  0/92 (0%)
[  5]   2.00-3.00   sec   122 KBytes   996 Kbits/sec  0.832 ms  0/91 (0%)
[  5]   3.00-4.00   sec   120 KBytes   985 Kbits/sec  0.882 ms  0/90 (0%)
[  5]   4.00-5.00   sec   124 KBytes  1.02 Mbits/sec  0.989 ms  0/93 (0%)
[  5]   5.00-6.00   sec   122 KBytes   996 Kbits/sec  0.838 ms  0/91 (0%)
[  5]   6.00-7.00   sec   123 KBytes  1.01 Mbits/sec  0.852 ms  0/92 (0%)
[  5]   7.00-8.00   sec   122 KBytes   996 Kbits/sec  1.015 ms  0/91 (0%)
[  5]   8.00-9.00   sec   123 KBytes  1.01 Mbits/sec  0.855 ms  0/92 (0%)
[  5]   9.00-10.00  sec   122 KBytes   996 Kbits/sec  0.756 ms  0/91 (0%)
[  5]  10.00-10.15  sec  18.7 KBytes   991 Kbits/sec  0.891 ms  0/14 (0%)
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  5]   0.00-10.15  sec  1.19 MBytes   985 Kbits/sec  0.891 ms  0/914 (0%)  receiver
-----------------------------------------------------------
Server listening on 5201 (test #2)
-----------------------------------------------------------

クライアント in ネパール

$ iperf3 -c 192.168.100.81 -u -b 1M
Connecting to host 192.168.100.81, port 5201
[  7] local 172.29.136.215 port 37681 connected to 192.168.100.81 port 5201
[ ID] Interval           Transfer     Bitrate         Total Datagrams
[  7]   0.00-1.00   sec   123 KBytes  1.01 Mbits/sec  92
[  7]   1.00-2.00   sec   122 KBytes   996 Kbits/sec  91
[  7]   2.00-3.00   sec   123 KBytes  1.01 Mbits/sec  92
[  7]   3.00-4.00   sec   122 KBytes   996 Kbits/sec  91
[  7]   4.00-5.00   sec   122 KBytes   996 Kbits/sec  91
[  7]   5.00-6.00   sec   123 KBytes  1.01 Mbits/sec  92
[  7]   6.00-7.00   sec   122 KBytes   996 Kbits/sec  91
[  7]   7.00-8.00   sec   122 KBytes   996 Kbits/sec  91
[  7]   8.00-9.00   sec   123 KBytes  1.01 Mbits/sec  92
[  7]   9.00-10.00  sec   122 KBytes   996 Kbits/sec  91
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Jitter    Lost/Total Datagrams
[  7]   0.00-10.00  sec  1.19 MBytes  1.00 Mbits/sec  0.000 ms  0/914 (0%)  sender
[  7]   0.00-10.15  sec  1.19 MBytes   985 Kbits/sec  0.891 ms  0/914 (0%)  receiver

iperf Done.

Jitterは1ms未満なので、日本とネパールの環境でもVoIP通話には特に問題なさそうだ。テストしたのは日本時間の22時半以降のため、日中の速度も気にはなる。

とはいえ、このように実測してみて、設計速度と実測の違いを肌で感じること。また、値がおかしい特にどこがおかしいのかを調べる訓練をしていると、実際の業務でも役立つのではないかと思う。

ネットワークを学び始めた人は参考にしてほしい。