iperf3で通信速度を測ってみる
- 2024.11.03
- 雑談
ネットワークの通信速度は大事
インフラ屋をやっていると、ネットワークの速度は測る必要がある。
設定速度と実測は異なるからだ。
自宅のインターネット回線が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時半以降のため、日中の速度も気にはなる。
とはいえ、このように実測してみて、設計速度と実測の違いを肌で感じること。また、値がおかしい特にどこがおかしいのかを調べる訓練をしていると、実際の業務でも役立つのではないかと思う。
ネットワークを学び始めた人は参考にしてほしい。
-
前の記事
VPNとローカルブレイクアウトについて 2024.10.27
-
次の記事
Zabbix7.0でサーバーを監視する(インストール編) 2024.11.21