Amazon Linux 2023 に iperf3 をインストールして、EC2 インスタンス間のネットワークパフォーマンスをテストしてみた
はじめに
テクニカルサポートの 片方 です。
本ブログでは、Amazon Linux 2023(AL2023)上でネットワークベンチマークツールの iperf3 を使い、TCP 及び UDP 通信によるスループットを簡単に計測する手順を紹介します。
検証時の条件
- Amazon Linux 2023 を利用
- インスタンスタイプは m5.large を利用
- 同じ AZ 内で起動
実装
- Amazon Linux 2023 OS の EC2 インスタンスを同じ AZ 内で 2 台起動します。
- SSH を使用して Linux インスタンスに接続し iperf3 をインストールします。
※ Amazon Linux 2023 の例
$ sudo yum -y install iperf3
実行例
sh-5.2$ sudo yum -y install iperf3
Amazon Linux 2023 Kernel Livepatch repository 247 kB/s | 26 kB 00:00
Dependencies resolved.
===================================================================================================================================================================================================================
Package Architecture Version Repository Size
===================================================================================================================================================================================================================
Installing:
iperf3 x86_64 3.19.1-1.amzn2023 amazonlinux 127 k
Installing dependencies:
lksctp-tools x86_64 1.0.18-9.amzn2023.0.3 amazonlinux 92 k
Transaction Summary
===================================================================================================================================================================================================================
Install 2 Packages
Total download size: 218 k
Installed size: 572 k
Downloading Packages:
(1/2): iperf3-3.19.1-1.amzn2023.x86_64.rpm 2.5 MB/s | 127 kB 00:00
(2/2): lksctp-tools-1.0.18-9.amzn2023.0.3.x86_64.rpm 1.6 MB/s | 92 kB 00:00
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 2.5 MB/s | 218 kB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : lksctp-tools-1.0.18-9.amzn2023.0.3.x86_64 1/2
Installing : iperf3-3.19.1-1.amzn2023.x86_64 2/2
Running scriptlet: iperf3-3.19.1-1.amzn2023.x86_64 2/2
Verifying : iperf3-3.19.1-1.amzn2023.x86_64 1/2
Verifying : lksctp-tools-1.0.18-9.amzn2023.0.3.x86_64 2/2
Installed:
iperf3-3.19.1-1.amzn2023.x86_64 lksctp-tools-1.0.18-9.amzn2023.0.3.x86_64
Complete!
sh-5.2$
これで実装手順は完了です。少ない手順でセットアップできる点が良いですね。
テストしてみた
インスタンス間の TCP ネットワークパフォーマンス
1 つ目のインスタンスを特定の TCP ポートでリッスンするサーバーとして設定するために、以下のコマンドを実行します。
$ sudo iperf3 -s -p 5001
この状態を維持しておいてください。
2 つ目のインスタンスをクライアントとして設定し、適切なパラメータを使用してサーバーに対してテストを実行します。
$ sudo iperf3 -c xxx.xxx.xxx.xxx -p 5001 -t 10 -i 1
実行結果
1 つ目インスタンス側の実行結果
sh-5.2$ sudo iperf3 -s -p 5001
-----------------------------------------------------------
Server listening on 5001 (test #1)
-----------------------------------------------------------
Accepted connection from 10.0.27.41, port 51088
[ 5] local 10.0.20.0 port 5001 connected to 10.0.27.41 port 51098
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 593 MBytes 4.97 Gbits/sec
[ 5] 1.00-2.00 sec 592 MBytes 4.97 Gbits/sec
[ 5] 2.00-3.00 sec 584 MBytes 4.89 Gbits/sec
[ 5] 3.00-4.00 sec 592 MBytes 4.97 Gbits/sec
[ 5] 4.00-5.00 sec 592 MBytes 4.97 Gbits/sec
[ 5] 5.00-6.00 sec 592 MBytes 4.97 Gbits/sec
[ 5] 6.00-7.00 sec 592 MBytes 4.97 Gbits/sec
[ 5] 7.00-8.00 sec 592 MBytes 4.97 Gbits/sec
[ 5] 8.00-9.00 sec 592 MBytes 4.97 Gbits/sec
[ 5] 9.00-10.00 sec 592 MBytes 4.97 Gbits/sec
[ 5] 10.00-10.00 sec 768 KBytes 4.64 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate
[ 5] 0.00-10.00 sec 5.78 GBytes 4.96 Gbits/sec receiver
-----------------------------------------------------------
Server listening on 5001 (test #2)
-----------------------------------------------------------
2 つ目インスタンス側の実行結果
sh-5.2$ sudo iperf3 -c 10.0.20.0 -p 5001 -t 10 -i 1
Connecting to host 10.0.20.0, port 5001
[ 5] local 10.0.27.41 port 51098 connected to 10.0.20.0 port 5001
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 597 MBytes 5.00 Gbits/sec 0 1.10 MBytes
[ 5] 1.00-2.00 sec 591 MBytes 4.96 Gbits/sec 0 1.17 MBytes
[ 5] 2.00-3.00 sec 584 MBytes 4.90 Gbits/sec 0 1.24 MBytes
[ 5] 3.00-4.00 sec 592 MBytes 4.97 Gbits/sec 0 1.37 MBytes
[ 5] 4.00-5.00 sec 592 MBytes 4.97 Gbits/sec 0 1.37 MBytes
[ 5] 5.00-6.00 sec 593 MBytes 4.97 Gbits/sec 0 1.37 MBytes
[ 5] 6.00-7.00 sec 592 MBytes 4.97 Gbits/sec 0 1.37 MBytes
[ 5] 7.00-8.00 sec 591 MBytes 4.96 Gbits/sec 0 1.37 MBytes
[ 5] 8.00-9.00 sec 593 MBytes 4.97 Gbits/sec 0 1.37 MBytes
[ 5] 9.00-10.00 sec 592 MBytes 4.96 Gbits/sec 0 1.37 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 5.78 GBytes 4.96 Gbits/sec 0 sender
[ 5] 0.00-10.00 sec 5.78 GBytes 4.96 Gbits/sec receiver
インスタンス間の UDP ネットワークパフォーマンス
前回と同様、1 つ目のインスタンスを特定の TCP ポートでリッスンするサーバーとして設定するために、以下のコマンドを実行します。
$ sudo iperf3 -s -p 5001
この状態を維持しておいてください。
2 つ目のインスタンスをクライアントとして設定し、適切なパラメータを使用してサーバーに対してテストを実行します。
オプションとして、-u 付与することで、UDPモードを有効化します。
$ sudo iperf3 -c xxx.xxx.xxx.xxx -u -p 5001 -b 5g -t 10 -i 1
実行結果
1 つ目インスタンス側の実行結果
sh-5.2$ sudo iperf3 -s -p 5001
-----------------------------------------------------------
Server listening on 5001 (test #1)
-----------------------------------------------------------
Accepted connection from 10.0.27.41, port 46860
[ 5] local 10.0.20.0 port 5001 connected to 10.0.27.41 port 48358
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-1.00 sec 595 MBytes 4.98 Gbits/sec 0.022 ms 21/69684 (0.03%)
[ 5] 1.00-2.00 sec 594 MBytes 4.98 Gbits/sec 0.020 ms 6/69586 (0.0086%)
[ 5] 2.00-3.00 sec 594 MBytes 4.98 Gbits/sec 0.020 ms 26/69570 (0.037%)
[ 5] 3.00-4.00 sec 594 MBytes 4.98 Gbits/sec 0.021 ms 10/69585 (0.014%)
[ 5] 4.00-5.00 sec 594 MBytes 4.98 Gbits/sec 0.021 ms 7/69575 (0.01%)
[ 5] 5.00-6.00 sec 594 MBytes 4.98 Gbits/sec 0.019 ms 16/69583 (0.023%)
[ 5] 6.00-7.00 sec 594 MBytes 4.98 Gbits/sec 0.033 ms 0/69568 (0%)
[ 5] 7.00-8.00 sec 594 MBytes 4.98 Gbits/sec 0.012 ms 1/69587 (0.0014%)
[ 5] 8.00-9.00 sec 594 MBytes 4.98 Gbits/sec 0.016 ms 3/69571 (0.0043%)
[ 5] 9.00-10.00 sec 593 MBytes 4.98 Gbits/sec 0.016 ms 59/69583 (0.085%)
[ 5] 10.00-10.00 sec 236 KBytes 5.13 Gbits/sec 0.019 ms 0/27 (0%)
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-10.00 sec 5.80 GBytes 4.98 Gbits/sec 0.019 ms 149/695919 (0.021%) receiver
-----------------------------------------------------------
Server listening on 5001 (test #2)
-----------------------------------------------------------
2 つ目インスタンス側の実行結果
sh-5.2$ sudo iperf3 -c 10.0.20.0 -u -p 5001 -b 5g -t 10 -i 1
Connecting to host 10.0.20.0, port 5001
[ 5] local 10.0.27.41 port 48358 connected to 10.0.20.0 port 5001
[ ID] Interval Transfer Bitrate Total Datagrams
[ 5] 0.00-1.00 sec 595 MBytes 4.99 Gbits/sec 69718
[ 5] 1.00-2.00 sec 594 MBytes 4.98 Gbits/sec 69575
[ 5] 2.00-3.00 sec 594 MBytes 4.98 Gbits/sec 69580
[ 5] 3.00-4.00 sec 594 MBytes 4.98 Gbits/sec 69577
[ 5] 4.00-5.00 sec 594 MBytes 4.98 Gbits/sec 69576
[ 5] 5.00-6.00 sec 594 MBytes 4.98 Gbits/sec 69575
[ 5] 6.00-7.00 sec 594 MBytes 4.98 Gbits/sec 69582
[ 5] 7.00-8.00 sec 594 MBytes 4.98 Gbits/sec 69576
[ 5] 8.00-9.00 sec 594 MBytes 4.98 Gbits/sec 69576
[ 5] 9.00-10.00 sec 594 MBytes 4.98 Gbits/sec 69584
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams
[ 5] 0.00-10.00 sec 5.80 GBytes 4.98 Gbits/sec 0.000 ms 0/695919 (0%) sender
[ 5] 0.00-10.00 sec 5.80 GBytes 4.98 Gbits/sec 0.019 ms 149/695919 (0.021%) receiver
iperf Done.
UDP はコネクションレス型であり、TCP のような輻輳制御アルゴリズムはありません。iperf3 でテストする場合、UDP から取得する帯域幅は TCP から取得する帯域幅よりも低くなる可能性があります。
対象 EC2 インスタンスをクラスタープレイスメントグループに所属させてテスト
対象の EC2 インスタンスを共に、クラスタープレイスメントグループへ所属させます。
同様、1 つ目のインスタンスを特定の TCP ポートでリッスンするサーバーとして設定するために、以下のコマンドを実行します。
$ sudo iperf3 -s -p 5001
この状態を維持しておいてください。
2 つ目のインスタンスをクライアントとして設定し、適切なパラメータを使用してサーバーに対してテストを実行します。
以下は TCP Ver です。
$ sudo iperf3 -c xxx.xxx.xxx.xxx -p 5001 -t 10 -i 1
実行結果
1 つ目インスタンス側の実行結果
sh-5.2$ sudo iperf3 -s -p 5001
-----------------------------------------------------------
Server listening on 5001 (test #1)
-----------------------------------------------------------
Accepted connection from 10.0.27.41, port 56840
[ 5] local 10.0.20.0 port 5001 connected to 10.0.27.41 port 56844
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 1.11 GBytes 9.53 Gbits/sec
[ 5] 1.00-2.00 sec 1.11 GBytes 9.53 Gbits/sec
[ 5] 2.00-3.00 sec 1.11 GBytes 9.53 Gbits/sec
[ 5] 3.00-4.00 sec 1.11 GBytes 9.51 Gbits/sec
[ 5] 4.00-5.00 sec 1.11 GBytes 9.53 Gbits/sec
[ 5] 5.00-6.00 sec 1.11 GBytes 9.53 Gbits/sec
[ 5] 6.00-7.00 sec 1.11 GBytes 9.53 Gbits/sec
[ 5] 7.00-8.00 sec 1.11 GBytes 9.53 Gbits/sec
[ 5] 8.00-9.00 sec 1.11 GBytes 9.53 Gbits/sec
[ 5] 9.00-10.00 sec 1.11 GBytes 9.53 Gbits/sec
[ 5] 10.00-10.00 sec 384 KBytes 6.98 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate
[ 5] 0.00-10.00 sec 11.1 GBytes 9.53 Gbits/sec receiver
-----------------------------------------------------------
Server listening on 5001 (test #2)
-----------------------------------------------------------
2 つ目インスタンス側の実行結果
sh-5.2$ sudo iperf3 -c 10.0.20.0 -p 5001 -t 10 -i 1
Connecting to host 10.0.20.0, port 5001
[ 5] local 10.0.27.41 port 56844 connected to 10.0.20.0 port 5001
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 1.11 GBytes 9.57 Gbits/sec 0 1.94 MBytes
[ 5] 1.00-2.00 sec 1.11 GBytes 9.52 Gbits/sec 0 1.94 MBytes
[ 5] 2.00-3.00 sec 1.11 GBytes 9.54 Gbits/sec 0 1.94 MBytes
[ 5] 3.00-4.00 sec 1.11 GBytes 9.50 Gbits/sec 122 2.43 MBytes
[ 5] 4.00-5.00 sec 1.11 GBytes 9.54 Gbits/sec 0 2.76 MBytes
[ 5] 5.00-6.00 sec 1.11 GBytes 9.52 Gbits/sec 0 2.76 MBytes
[ 5] 6.00-7.00 sec 1.11 GBytes 9.53 Gbits/sec 0 2.76 MBytes
[ 5] 7.00-8.00 sec 1.11 GBytes 9.53 Gbits/sec 0 2.76 MBytes
[ 5] 8.00-9.00 sec 1.11 GBytes 9.53 Gbits/sec 0 2.76 MBytes
[ 5] 9.00-10.00 sec 1.11 GBytes 9.53 Gbits/sec 0 2.76 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 11.1 GBytes 9.53 Gbits/sec 122 sender
[ 5] 0.00-10.00 sec 11.1 GBytes 9.53 Gbits/sec receiver
iperf Done.
以下のように、クラスタープレイスメントグループに配置したことでスループットが向上していることが確認できました。
テスト条件 | 平均スループット |
---|---|
通常(同一VPC・同AZ) | 約 4.9〜5.0 Gbps |
クラスタープレイスメントグループ配置後 | 約 9.53 Gbps |
まとめ
本ブログがネットワークベンチマーク実施時の参考になれば幸いです。
参考資料
- 同じ VPC 内にある EC2 Linux インスタンス間のネットワークスループットをベンチマークする | AWS re:Post
- プレイスメントグループのプレイスメント戦略 - Amazon Elastic Compute Cloud
- Disk Testing using iperf3
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。