このセクションでは、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 ~]#