このセクションでは、iperf のツールを使ってホスト間のスループットを測定する方法を紹介します。
yumで EPEL の yum リポジトリをインストールします。
[root@java-1 ~]# yum install epel-release Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: ftp.riken.jp * extras: ftp.riken.jp * updates: ftp.riken.jp Resolving Dependencies --> Running transaction check ---> Package epel-release.noarch 0:7-11 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: epel-release noarch 7-11 extras 15 k Transaction Summary ================================================================================ Install 1 Package Total download size: 15 k Installed size: 24 k Is this ok [y/d/N]: y Downloading packages: epel-release-7-11.noarch.rpm | 15 kB 00:03 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : epel-release-7-11.noarch 1/1 Verifying : epel-release-7-11.noarch 1/1 Installed: epel-release.noarch 0:7-11 Complete! [root@java-1 ~]#
iperf ツールをインストールします。
[root@java-1 ~]# yum install iperf Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile epel/x86_64/metalink | 10 kB 00:00 * base: ftp.riken.jp * epel: www.ftp.ne.jp * extras: ftp.riken.jp * updates: ftp.riken.jp epel | 4.7 kB 00:00 (1/3): epel/x86_64/group_gz | 88 kB 00:02 (2/3): epel/x86_64/updateinfo | 953 kB 00:02 (3/3): epel/x86_64/primary_db | 6.6 MB 00:05 Resolving Dependencies --> Running transaction check ---> Package iperf.x86_64 0:2.0.12-4.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: iperf x86_64 2.0.12-4.el7 epel 81 k Transaction Summary ================================================================================ Install 1 Package Total download size: 81 k Installed size: 177 k Is this ok [y/d/N]: y Downloading packages: warning: /var/cache/yum/x86_64/7/epel/packages/iperf-2.0.12-4.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY Public key for iperf-2.0.12-4.el7.x86_64.rpm is not installed iperf-2.0.12-4.el7.x86_64.rpm | 81 kB 00:01 Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 Importing GPG key 0x352C64E5: Userid : "Fedora EPEL (7) <epel@fedoraproject.org>" Fingerprint: 91e9 7d7c 4a5e 96f1 7f3e 888f 6a2f aea2 352c 64e5 Package : epel-release-7-11.noarch (@extras) From : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 Is this ok [y/N]: y Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : iperf-2.0.12-4.el7.x86_64 1/1 Verifying : iperf-2.0.12-4.el7.x86_64 1/1 Installed: iperf.x86_64 0:2.0.12-4.el7 Complete! [root@java-1 ~]#
サーバー側のホストで 以下コマンドを実行します。ここでは、 -p のオプションを付けて TCP 80番ポートでリッスンしています。
[root@java-1 ~]# iperf -s -p 80 ------------------------------------------------------------ Server listening on TCP port 80 TCP window size: 85.3 KByte (default) ------------------------------------------------------------ [ 4] local 172.16.2.200 port 80 connected with 172.16.2.201 port 35652 [ ID] Interval Transfer Bandwidth [ 4] 0.0-10.1 sec 426 MBytes 356 Mbits/sec
クライアント側のホストで以下コマンドを実行すると、 サーバー側のTCP 80番ポートに対するスループットの測定が実施できます。ここでは、356 Mbps のスループットが出ていることが確認できます。
[root@java-2 ~]# iperf -c 172.16.2.200 -p 80 ------------------------------------------------------------ Client connecting to 172.16.2.200, TCP port 80 TCP window size: 45.0 KByte (default) ------------------------------------------------------------ [ 3] local 172.16.2.201 port 35652 connected with 172.16.2.200 port 80 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 426 MBytes 356 Mbits/sec [root@java-2 ~]#
クライアント側のホストで以下コマンドを実行する( -m オプションを付ける)と、TCPセグメントサイズをレポート出力してくれます。ここでは、399 Mbps のスループットで、MSSサイズが1398 bytes であることが確認できます。
[root@java-2 ~]# iperf -c 172.16.2.200 -p 80 -m ------------------------------------------------------------ Client connecting to 172.16.2.200, TCP port 80 TCP window size: 45.0 KByte (default) ------------------------------------------------------------ [ 3] local 172.16.2.201 port 35660 connected with 172.16.2.200 port 80 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 476 MBytes 399 Mbits/sec [ 3] MSS size 1398 bytes (MTU 1438 bytes, unknown interface) [root@java-2 ~]#
クライアント側のホストで以下コマンドを実行する( -t オプションを付ける)と、スループットの測定を指定した秒間実施できます。ここでは、60秒間のスループット測定を行い、結果が421 Mbps であることが確認できます。
[root@java-2 ~]# iperf -c 172.16.2.200 -p 80 -m -t 60
------------------------------------------------------------
Client connecting to 172.16.2.200, TCP port 80
TCP window size: 45.0 KByte (default)
------------------------------------------------------------
[ 3] local 172.16.2.201 port 35702 connected with 172.16.2.200 port 80
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-60.0 sec 2.94 GBytes 421 Mbits/sec
[ 3] MSS size 1398 bytes (MTU 1438 bytes, unknown interface)
[root@java-2 ~]#
クライアント側のホストで以下コマンドを実行する( -P オプションを付ける)と、指定した数のスレッドでスループットの測定が実施できます。ここでは、3つのスレッドで 合計 656 Mbps のスループットであることが確認できます。
[root@java-2 ~]# iperf -c 172.16.2.200 -p 80 -m -t 60 -P 3 ------------------------------------------------------------ Client connecting to 172.16.2.200, TCP port 80 TCP window size: 45.0 KByte (default) ------------------------------------------------------------ [ 5] local 172.16.2.201 port 35710 connected with 172.16.2.200 port 80 [ 4] local 172.16.2.201 port 35708 connected with 172.16.2.200 port 80 [ 3] local 172.16.2.201 port 35706 connected with 172.16.2.200 port 80 [ ID] Interval Transfer Bandwidth [ 3] 0.0-60.0 sec 1.54 GBytes 220 Mbits/sec [ 3] MSS size 1398 bytes (MTU 1438 bytes, unknown interface) [ 5] 0.0-60.0 sec 1.53 GBytes 218 Mbits/sec [ 5] MSS size 1398 bytes (MTU 1438 bytes, unknown interface) [ 4] 0.0-60.1 sec 1.52 GBytes 218 Mbits/sec [ 4] MSS size 1398 bytes (MTU 1438 bytes, unknown interface) [SUM] 0.0-60.1 sec 4.59 GBytes 656 Mbits/sec [root@java-2 ~]#
クライアント側のホストで以下コマンドを実行する( -i オプションを付ける)と、指定した間隔でレポートを出力してくれます。ここでは、1秒間隔でスループットの結果を出力されていることが確認できます。
[root@java-2 ~]# iperf -c 172.16.2.200 -p 80 -m -i 1 ------------------------------------------------------------ Client connecting to 172.16.2.200, TCP port 80 TCP window size: 45.0 KByte (default) ------------------------------------------------------------ [ 3] local 172.16.2.201 port 35738 connected with 172.16.2.200 port 80 [ ID] Interval Transfer Bandwidth [ 3] 0.0- 1.0 sec 23.0 MBytes 193 Mbits/sec [ 3] 1.0- 2.0 sec 31.1 MBytes 261 Mbits/sec [ 3] 2.0- 3.0 sec 40.5 MBytes 340 Mbits/sec [ 3] 3.0- 4.0 sec 22.8 MBytes 191 Mbits/sec [ 3] 4.0- 5.0 sec 28.5 MBytes 239 Mbits/sec [ 3] 5.0- 6.0 sec 50.2 MBytes 422 Mbits/sec [ 3] 6.0- 7.0 sec 31.1 MBytes 261 Mbits/sec [ 3] 7.0- 8.0 sec 27.4 MBytes 230 Mbits/sec [ 3] 8.0- 9.0 sec 22.8 MBytes 191 Mbits/sec [ 3] 9.0-10.0 sec 42.5 MBytes 357 Mbits/sec [ 3] 0.0-10.0 sec 320 MBytes 268 Mbits/sec [ 3] MSS size 1398 bytes (MTU 1438 bytes, unknown interface) [root@java-2 ~]#
クライアント側のホストで以下コマンドを実行する( -u と -b オプションを付ける)と、UDP でのスループットの測定が実施できます。ここでは、1000Gbps の帯域でUDPでスループット測定した結果、48.8Mbps であったことが確認できます。
[root@java-2 ~]# iperf -c 172.16.2.200 -p 80 -u -m -b 1000000M ------------------------------------------------------------ Client connecting to 172.16.2.200, UDP port 80 Sending 1470 byte datagrams, IPG target: 0.01 us (kalman adjust) UDP buffer size: 208 KByte (default) ------------------------------------------------------------ [ 3] local 172.16.2.201 port 35479 connected with 172.16.2.200 port 80 [ 3] WARNING: did not receive ack of last datagram after 10 tries. [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 58.3 MBytes 48.8 Mbits/sec [ 3] Sent 41582 datagrams [root@java-2 ~]#