- 1 iperf3コマンドとは?
- 2 検証環境
- 3 インストール方法
- 4 事前準備
- 5 オプション一覧
- 6 利用可能な最大帯域を測定する方法(もっとも基本的な使い方)
- 7 実行時間を指定する方法(-t)
- 8 帯域を指定する方法(-b)
- 9 測定に使用するインタフェースを指定する方法(-B)
- 10 ポート番号を指定する方法(-p)
- 11 指定したCPUでiperf3を実行する方法(-A)
- 12 UDPを使う方法(-u)
- 13 データ送受信用コネクションを複数生成する方法(-P)
- 14 IPv6で帯域測定をする方法(-6)
- 15 ファイル転送のボトルネックを調べる方法(-F)
- 16 詳細情報を表示する方法(-V)
- 17 タイトルを付ける方法(-T)
- Z 参考情報
1 iperf3コマンドとは?
利用可能なネットワークの最大帯域の測定や、指定した帯域の負荷をかけるためのものです。
2 検証環境
3 インストール方法
サーバとクライアントでiperf3パッケージをインストールします。
[root@server ~]# yum -y install iperf3
iperf3コマンドの版数を確認します。
[root@server ~]# iperf3 -v iperf 3.1.7 Linux server 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 Optional features available: CPU affinity setting, IPv6 flow label, TCP congestion algorithm setting, sendfile / zerocopy, socket pacing
4 事前準備
サーバでポート番号を開放します。iperf3は,TCP/UDPの5201番ポートを使うので、5201番ポートへのアクセスを許可しておきます。まず、TCPの5201番ポートを開放します。firewall-cmdの使い方は、firewall-cmdの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# firewall-cmd --add-port=5201/tcp success
ポートの状態を確認します。TCPの5201番ポートが開放されたことがわかります。
[root@server ~]# firewall-cmd --list-ports 5201/tcp
次に、UDPの5201番ポートを開放します。
[root@server ~]# firewall-cmd --add-port=5201/udp success
ポートの状態を確認します。UDPの5201番ポートが開放されたことがわかります。
[root@server ~]# firewall-cmd --list-ports 5201/tcp 5201/udp
5 オプション一覧
オプション一覧を確認します。
[root@server ~]# iperf3 -h Usage: iperf [-s|-c host] [options] iperf [-h|--help] [-v|--version] Server or Client: -p, --port # server port to listen on/connect to -f, --format [kmgKMG] format to report: Kbits, Mbits, KBytes, MBytes -i, --interval # seconds between periodic bandwidth reports -F, --file name xmit/recv the specified file -A, --affinity n/n,m set CPU affinity -B, --bind <host> bind to a specific interface -V, --verbose more detailed output -J, --json output in JSON format --logfile f send output to a log file --forceflush force flushing output at every interval -d, --debug emit debugging output -v, --version show version information and quit -h, --help show this message and quit Server specific: -s, --server run in server mode -D, --daemon run the server as a daemon -I, --pidfile file write PID file -1, --one-off handle one client connection then exit Client specific: -c, --client <host> run in client mode, connecting to <host> -u, --udp use UDP rather than TCP -b, --bandwidth #[KMG][/#] target bandwidth in bits/sec (0 for unlimited) (default 1 Mbit/sec for UDP, unlimited for TCP) (optional slash and packet count for burst mode) --fq-rate #[KMG] enable fair-queuing based socket pacing in bits/sec (Linux only) -t, --time # time in seconds to transmit for (default 10 secs) -n, --bytes #[KMG] number of bytes to transmit (instead of -t) -k, --blockcount #[KMG] number of blocks (packets) to transmit (instead of -t or -n) -l, --len #[KMG] length of buffer to read or write (default 128 KB for TCP, dynamic or 1 for UDP) --cport <port> bind to a specific client port (TCP and UDP, default: ephemeral port) -P, --parallel # number of parallel client streams to run -R, --reverse run in reverse mode (server sends, client receives) -w, --window #[KMG] set window size / socket buffer size -C, --congestion <algo> set TCP congestion control algorithm (Linux and FreeBSD only) -M, --set-mss # set TCP/SCTP maximum segment size (MTU - 40 bytes) -N, --no-delay set TCP/SCTP no delay, disabling Nagle's Algorithm -4, --version4 only use IPv4 -6, --version6 only use IPv6 -S, --tos N set the IP 'type of service' -L, --flowlabel N set the IPv6 flow label (only supported on Linux) -Z, --zerocopy use a 'zero copy' method of sending data -O, --omit N omit the first n seconds -T, --title str prefix every output line with this string --get-server-output get results from server --udp-counters-64bit use 64-bit counters in UDP test packets [KMG] indicates options that support a K/M/G suffix for kilo-, mega-, or giga- iperf3 homepage at: http://software.es.net/iperf/ Report bugs to: https://github.com/esnet/iperf
6 利用可能な最大帯域を測定する方法(もっとも基本的な使い方)
クライアントからサーバにTCPパケットを送信して帯域を測定します。
サーバでiperf3コマンドを実行します。このとき、-sオプションを指定します。
[root@server ~]# iperf3 -s ----------------------------------------------------------- Server listening on 5201 -----------------------------------------------------------
クライアントでiperf3コマンドを実行します。このとき、-cオプションを指定します。サーバのIPアドレスには192.168.0.10を指定します。測定した送信側、受信側の帯域が1.56Gbits/secであることがわかります。
[root@client ~]# iperf3 -c 192.168.2.100 Connecting to host 192.168.2.100, port 5201 [ 4] local 192.168.2.105 port 51136 connected to 192.168.2.100 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 149 MBytes 1.25 Gbits/sec 0 1.18 MBytes [ 4] 1.00-2.00 sec 175 MBytes 1.47 Gbits/sec 9 1.44 MBytes [ 4] 2.00-3.00 sec 181 MBytes 1.52 Gbits/sec 0 1.57 MBytes [ 4] 3.00-4.00 sec 188 MBytes 1.57 Gbits/sec 0 1.68 MBytes [ 4] 4.00-5.00 sec 181 MBytes 1.52 Gbits/sec 0 1.76 MBytes [ 4] 5.00-6.00 sec 171 MBytes 1.44 Gbits/sec 0 1.82 MBytes [ 4] 6.00-7.00 sec 182 MBytes 1.53 Gbits/sec 4 1.37 MBytes [ 4] 7.00-8.00 sec 205 MBytes 1.72 Gbits/sec 0 1.46 MBytes [ 4] 8.00-9.00 sec 208 MBytes 1.74 Gbits/sec 0 1.54 MBytes [ 4] 9.00-10.00 sec 218 MBytes 1.82 Gbits/sec 0 1.61 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 1.81 GBytes 1.56 Gbits/sec 13 sender [ 4] 0.00-10.00 sec 1.81 GBytes 1.56 Gbits/sec receiver iperf Done.
サーバの実行結果は以下のとおりです。受信側の帯域が1.55Gbits/secであることがわかります。
[root@server ~]# iperf3 -s ----------------------------------------------------------- Server listening on 5201 ----------------------------------------------------------- Accepted connection from 192.168.2.105, port 51134 [ 5] local 192.168.2.100 port 5201 connected to 192.168.2.105 port 51136 [ ID] Interval Transfer Bandwidth [ 5] 0.00-1.00 sec 142 MBytes 1.19 Gbits/sec [ 5] 1.00-2.00 sec 173 MBytes 1.45 Gbits/sec [ 5] 2.00-3.00 sec 182 MBytes 1.53 Gbits/sec [ 5] 3.00-4.00 sec 187 MBytes 1.57 Gbits/sec [ 5] 4.00-5.00 sec 181 MBytes 1.52 Gbits/sec [ 5] 5.00-6.00 sec 170 MBytes 1.43 Gbits/sec [ 5] 6.00-7.00 sec 184 MBytes 1.54 Gbits/sec [ 5] 7.00-8.00 sec 204 MBytes 1.71 Gbits/sec [ 5] 8.00-9.00 sec 208 MBytes 1.75 Gbits/sec [ 5] 9.00-10.01 sec 217 MBytes 1.81 Gbits/sec [ 5] 10.01-10.04 sec 8.56 MBytes 2.00 Gbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth [ 5] 0.00-10.04 sec 0.00 Bytes 0.00 bits/sec sender [ 5] 0.00-10.04 sec 1.81 GBytes 1.55 Gbits/sec receiver ----------------------------------------------------------- Server listening on 5201 -----------------------------------------------------------
7 実行時間を指定する方法(-t)
帯域測定の時間はデフォルトで10秒です。-tオプションを使うことで、測定時間を変更することができます。ここでは、5秒間実行してみます。サーバでiperf3コマンドを実行します。このとき、-sオプションを指定します。
[root@server ~]# iperf3 -s ----------------------------------------------------------- Server listening on 5201 -----------------------------------------------------------
クライアントでiperf3コマンドを実行します。このとき、-tオプションを指定して測定時間を指定します。ここでは5秒間帯域の測定をしてみます。
[root@client ~]# iperf3 -c 192.168.2.100 -t 5 Connecting to host 192.168.2.100, port 5201 [ 4] local 192.168.2.105 port 51140 connected to 192.168.2.100 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 163 MBytes 1.37 Gbits/sec 0 1.59 MBytes [ 4] 1.00-2.00 sec 168 MBytes 1.41 Gbits/sec 45 1.48 MBytes [ 4] 2.00-3.00 sec 161 MBytes 1.35 Gbits/sec 0 1.61 MBytes [ 4] 3.00-4.00 sec 215 MBytes 1.80 Gbits/sec 0 1.71 MBytes [ 4] 4.00-5.01 sec 215 MBytes 1.80 Gbits/sec 0 1.78 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-5.01 sec 922 MBytes 1.54 Gbits/sec 45 sender [ 4] 0.00-5.01 sec 919 MBytes 1.54 Gbits/sec receiver iperf Done.
サーバでiperf3コマンドの実行結果を確認します。最終結果に"0.00-5.05"と表示されているため、帯域の測定時間が5秒であることがわかります。
[root@server ~]# iperf3 -s ----------------------------------------------------------- Server listening on 5201 ----------------------------------------------------------- Accepted connection from 192.168.2.105, port 51138 [ 5] local 192.168.2.100 port 5201 connected to 192.168.2.105 port 51140 [ ID] Interval Transfer Bandwidth [ 5] 0.00-1.00 sec 154 MBytes 1.29 Gbits/sec [ 5] 1.00-2.00 sec 168 MBytes 1.41 Gbits/sec [ 5] 2.00-3.00 sec 161 MBytes 1.35 Gbits/sec [ 5] 3.00-4.00 sec 215 MBytes 1.80 Gbits/sec [ 5] 4.00-5.00 sec 214 MBytes 1.80 Gbits/sec [ 5] 5.00-5.05 sec 8.27 MBytes 1.49 Gbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth [ 5] 0.00-5.05 sec 0.00 Bytes 0.00 bits/sec sender [ 5] 0.00-5.05 sec 919 MBytes 1.53 Gbits/sec receiver
8 帯域を指定する方法(-b)
このオプションは、利用可能な最大帯域を測定する、という目的に使うのではなく、指定した帯域の負荷をかけた状態で他の様々なテストを行うときに使うものです。
サーバの実行方法は、これまでの方法と同じなので、ここでは省略します。クライアントの実行結果のみを記載します。
8.1 100(Mbits/sec)を指定した場合
クライアントの実行結果を確認します。送信側、受信側の最大帯域が99.1Mbits/secであることがわかります。
[root@client ~]# iperf3 -c 192.168.2.100 -b 100M Connecting to host 192.168.2.100, port 5201 [ 4] local 192.168.2.105 port 51144 connected to 192.168.2.100 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 11.0 MBytes 91.7 Mbits/sec 0 140 KBytes [ 4] 1.00-2.00 sec 11.9 MBytes 99.8 Mbits/sec 0 195 KBytes [ 4] 2.00-3.00 sec 11.9 MBytes 99.6 Mbits/sec 0 257 KBytes [ 4] 3.00-4.00 sec 11.9 MBytes 99.5 Mbits/sec 0 294 KBytes [ 4] 4.00-5.00 sec 12.0 MBytes 101 Mbits/sec 0 331 KBytes [ 4] 5.00-6.00 sec 11.9 MBytes 99.8 Mbits/sec 0 365 KBytes [ 4] 6.00-7.00 sec 11.9 MBytes 99.3 Mbits/sec 0 393 KBytes [ 4] 7.00-8.00 sec 12.0 MBytes 101 Mbits/sec 0 417 KBytes [ 4] 8.00-9.00 sec 11.9 MBytes 99.5 Mbits/sec 0 428 KBytes [ 4] 9.00-10.00 sec 12.0 MBytes 101 Mbits/sec 0 441 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 118 MBytes 99.1 Mbits/sec 0 sender [ 4] 0.00-10.00 sec 118 MBytes 99.1 Mbits/sec receiver iperf Done.
8.2 50(Mbits/sec)を指定した場合
クライアントの実行結果を確認します。送信側、受信側の最大帯域が49.6Mbits/sec であることがわかります。
[root@client ~]# iperf3 -c 192.168.2.100 -b 50M Connecting to host 192.168.2.100, port 5201 [ 4] local 192.168.2.105 port 51148 connected to 192.168.2.100 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 5.51 MBytes 46.2 Mbits/sec 0 93.3 KBytes [ 4] 1.00-2.00 sec 5.88 MBytes 49.2 Mbits/sec 0 126 KBytes [ 4] 2.00-3.00 sec 6.00 MBytes 50.4 Mbits/sec 0 146 KBytes [ 4] 3.00-4.00 sec 6.00 MBytes 50.2 Mbits/sec 0 165 KBytes [ 4] 4.00-5.00 sec 5.88 MBytes 49.3 Mbits/sec 0 185 KBytes [ 4] 5.00-6.00 sec 6.00 MBytes 50.3 Mbits/sec 0 201 KBytes [ 4] 6.00-7.00 sec 6.00 MBytes 50.3 Mbits/sec 0 226 KBytes [ 4] 7.00-8.00 sec 5.88 MBytes 49.3 Mbits/sec 0 245 KBytes [ 4] 8.00-9.00 sec 6.00 MBytes 50.4 Mbits/sec 0 255 KBytes [ 4] 9.00-10.00 sec 6.00 MBytes 50.2 Mbits/sec 0 263 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 59.1 MBytes 49.6 Mbits/sec 0 sender [ 4] 0.00-10.00 sec 59.1 MBytes 49.6 Mbits/sec receiver iperf Done.
9 測定に使用するインタフェースを指定する方法(-B)
複数のインタフェースがある場合に使用するオプションです。-Bオプションで指定したインタフェースから帯域測定用のパケットを送信するようになります。このオプションは、サーバとクライアントで使うことができます。私の検証環境ではサーバ、クライアントともにインタフェースが1つしかないので、あまり意味はありませんが、使い方を説明するため、それぞれのインタフェースを指定してみます。
サーバでiperf3コマンドを実行します。このとき、-Bオプションを指定してサーバのインタフェースを指定します。
[root@server ~]# iperf3 -s -B 192.168.2.100 ----------------------------------------------------------- Server listening on 5201 -----------------------------------------------------------
クライアントでiperf3コマンドを実行します。このとき、-Bオプションを指定してクライアントのインタフェースを指定します。
[root@client ~]# iperf3 -c 192.168.2.100 -B 192.168.2.105 Connecting to host 192.168.2.100, port 5201 [ 4] local 192.168.2.105 port 44045 connected to 192.168.2.100 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 175 MBytes 1.46 Gbits/sec 0 814 KBytes [ 4] 1.00-2.00 sec 170 MBytes 1.43 Gbits/sec 26 1.38 MBytes [ 4] 2.00-3.00 sec 186 MBytes 1.56 Gbits/sec 0 1.52 MBytes [ 4] 3.00-4.00 sec 184 MBytes 1.54 Gbits/sec 0 1.64 MBytes [ 4] 4.00-5.00 sec 199 MBytes 1.67 Gbits/sec 0 1.73 MBytes [ 4] 5.00-6.00 sec 214 MBytes 1.79 Gbits/sec 0 1.80 MBytes [ 4] 6.00-7.00 sec 218 MBytes 1.83 Gbits/sec 0 1.85 MBytes [ 4] 7.00-8.01 sec 211 MBytes 1.76 Gbits/sec 11 1.37 MBytes [ 4] 8.01-9.00 sec 216 MBytes 1.82 Gbits/sec 0 1.47 MBytes [ 4] 9.00-10.00 sec 219 MBytes 1.84 Gbits/sec 0 1.55 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 1.94 GBytes 1.67 Gbits/sec 37 sender [ 4] 0.00-10.00 sec 1.94 GBytes 1.67 Gbits/sec receiver iperf Done.
10 ポート番号を指定する方法(-p)
iperf3はデフォルトで5201番のポートを使います。すでに他のアプリが5201を使っている場合、5201以外のポート番号を使う必要があります。このような時に使用するオプションです。ここでは、5201番ポートではなく11111番ポートを使うため、TCPの11111番ポートを開放します。UDPを使って帯域測定する場合は、UDPの11111番ポートも開放してください。
[root@server ~]# firewall-cmd --add-port=11111/tcp success
ポートの状態を確認します。TCPの11111番ポートが開放されたことがわかります。
[root@server ~]# firewall-cmd --list-ports 5201/tcp 5201/udp 11111/tcp
サーバでiperf3を実行します。このとき、-pオプションを指定して、iperf3がTCPの11111番ポートでListenするようにします。
[root@server ~]# iperf3 -s -p 11111 ----------------------------------------------------------- Server listening on 11111 -----------------------------------------------------------
もう1つターミナルを開きます。lsofコマンドを実行して、iperf3がListenしているポート番号を確認します。iperf3がTCPの11111番ポートでListenしていることがわかります。
なお、lsofコマンドの使い方は、
lsofコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# lsof -c iperf3 -a -i -a -P COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME iperf3 5392 root 3u IPv6 73032 0t0 TCP *:11111 (LISTEN)
クライアントでiperf3コマンドを実行します。このとき、-pオプションを指定してサーバのiperf3がListenしているポート番号を指定します。
[root@client ~]# iperf3 -c 192.168.2.100 -p 11111 Connecting to host 192.168.2.100, port 11111 [ 4] local 192.168.2.105 port 39192 connected to 192.168.2.100 port 11111 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 145 MBytes 1.22 Gbits/sec 0 663 KBytes [ 4] 1.00-2.00 sec 191 MBytes 1.61 Gbits/sec 0 1.04 MBytes [ 4] 2.00-3.00 sec 192 MBytes 1.62 Gbits/sec 22 1.35 MBytes [ 4] 3.00-4.01 sec 178 MBytes 1.48 Gbits/sec 0 1.50 MBytes [ 4] 4.01-5.01 sec 189 MBytes 1.58 Gbits/sec 0 1.61 MBytes [ 4] 5.01-6.00 sec 216 MBytes 1.82 Gbits/sec 0 1.70 MBytes [ 4] 6.00-7.01 sec 208 MBytes 1.73 Gbits/sec 0 1.76 MBytes [ 4] 7.01-8.01 sec 219 MBytes 1.84 Gbits/sec 0 1.81 MBytes [ 4] 8.01-9.01 sec 221 MBytes 1.86 Gbits/sec 0 1.85 MBytes [ 4] 9.01-10.00 sec 216 MBytes 1.82 Gbits/sec 0 1.87 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 1.93 GBytes 1.66 Gbits/sec 22 sender [ 4] 0.00-10.00 sec 1.93 GBytes 1.65 Gbits/sec receiver iperf Done.
11 指定したCPUでiperf3を実行する方法(-A)
iperf3を実行するCPUを指定するオプションです。このオプションは、サーバとクライアントで使うことができます。ここでは、サーバでiperf3を指定したCPUで動作させる実行例を示します。まず、サーバに搭載れているCPUを確認します。4つのCPUが搭載されていることがわかります。
[root@server ~]# cat /proc/cpuinfo |grep processor processor : 0 processor : 1 processor : 2 processor : 3
iperf3をCPU0で動作させてみます。
[root@server ~]# iperf3 -s -A 0 ----------------------------------------------------------- Server listening on 5201 -----------------------------------------------------------
psコマンドを実行して、iperf3が動作しているCPUを確認します。iperf3がCPU0で動作していることがわかります。なお、psコマンドの使い方は、psコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# ps -C iperf3 -o comm,pid,psr COMMAND PID PSR iperf3 5596 0
次にiperf3をCPU3で動作させてみます。
[root@server ~]# iperf3 -s -A 3 ----------------------------------------------------------- Server listening on 5201 -----------------------------------------------------------
psコマンドを実行して、iperf3が動作しているCPUを確認します。iperf3がCPU3で動作していることがわかります。
[root@server ~]# ps -C iperf3 -o comm,pid,psr COMMAND PID PSR iperf3 5632 3
12 UDPを使う方法(-u)
帯域測定用のパケットにTCPではなくUDPを使う場合に指定するオプションです。サーバでiperf3コマンドを実行します。サーバ側はTCPでもUDPでもオプションに違いはありません。
12.1 デフォルトのビットレートで送信する方法
サーバでiperf3を実行します。
[root@server ~]# iperf3 -s
クライアントでiperf3を実行します。このとき"-u"オプションを指定して、UDPパケットを送信してみます。デフォルトでは、1Mbits/secでUDPパケットを送信します。
[root@client ~]# iperf3 -c 192.168.2.100 -u Connecting to host 192.168.2.100, port 5201 [ 4] local 192.168.2.105 port 45835 connected to 192.168.2.100 port 5201 [ ID] Interval Transfer Bandwidth Total Datagrams [ 4] 0.00-1.00 sec 116 KBytes 950 Kbits/sec 82 [ 4] 1.00-2.00 sec 129 KBytes 1.05 Mbits/sec 91 [ 4] 2.00-3.00 sec 127 KBytes 1.04 Mbits/sec 90 [ 4] 3.00-4.00 sec 129 KBytes 1.06 Mbits/sec 91 [ 4] 4.00-5.00 sec 127 KBytes 1.04 Mbits/sec 90 [ 4] 5.00-6.00 sec 129 KBytes 1.06 Mbits/sec 91 [ 4] 6.00-7.00 sec 127 KBytes 1.04 Mbits/sec 90 [ 4] 7.00-8.00 sec 129 KBytes 1.05 Mbits/sec 91 [ 4] 8.00-9.00 sec 129 KBytes 1.05 Mbits/sec 91 [ 4] 9.00-10.00 sec 127 KBytes 1.04 Mbits/sec 90 - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-10.00 sec 1.24 MBytes 1.04 Mbits/sec 0.137 ms 0/897 (0%) [ 4] Sent 897 datagrams iperf Done.
12.2 ビットレートを指定する方法(-b)
"-b"を指定すると、UDPの送信ビットレートを指定することができます。ここでは、5Mbit/sでUDPパケットを送信してみます。
[root@client ~]# iperf3 -c 192.168.2.100 -u -b 5M Connecting to host 192.168.2.100, port 5201 [ 4] local 192.168.2.105 port 41786 connected to 192.168.2.100 port 5201 [ ID] Interval Transfer Bandwidth Total Datagrams [ 4] 0.00-1.00 sec 560 KBytes 4.57 Mbits/sec 396 [ 4] 1.00-2.00 sec 604 KBytes 4.95 Mbits/sec 427 [ 4] 2.00-3.00 sec 611 KBytes 5.01 Mbits/sec 432 [ 4] 3.00-4.00 sec 609 KBytes 4.99 Mbits/sec 431 [ 4] 4.00-5.00 sec 611 KBytes 5.01 Mbits/sec 432 [ 4] 5.00-6.00 sec 609 KBytes 4.98 Mbits/sec 431 [ 4] 6.00-7.00 sec 612 KBytes 5.01 Mbits/sec 433 [ 4] 7.00-8.00 sec 609 KBytes 5.00 Mbits/sec 431 [ 4] 8.00-9.00 sec 611 KBytes 5.00 Mbits/sec 432 [ 4] 9.00-10.00 sec 608 KBytes 4.98 Mbits/sec 430 - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams [ 4] 0.00-10.00 sec 5.90 MBytes 4.95 Mbits/sec 0.090 ms 0/4275 (0%) [ 4] Sent 4275 datagrams iperf Done.
13 データ送受信用コネクションを複数生成する方法(-P)
iperf3は、デフォルトで以下のTCPコネクションを生成します。
・制御用×1本(帯域測定にTCPを使うかUDPを使うか等の情報交換で使用する)
・帯域測定用×1本
"-P"オプションは帯域測定用のTCPコネクション数を指定します。ここでは、帯域測定用のTCPコネクションを3つ作成してみます。
サーバでiperf3コマンドを実行します。
[root@server ~]# iperf3 -s
クライアントでiperf3コマンドを実行します。-Pオプションを指定して帯域測定用のTCPコネクションを3つ生成してみます。実行結果(★)より、TCPコネクションが3つ確立されていることがわかります。
[root@client ~]# iperf3 -c 192.168.2.100 -P 3 Connecting to host 192.168.2.100, port 5201 [ 4] local 192.168.2.105 port 51172 connected to 192.168.2.100 port 5201 ★ [ 6] local 192.168.2.105 port 51174 connected to 192.168.2.100 port 5201 ★ [ 8] local 192.168.2.105 port 51176 connected to 192.168.2.100 port 5201 ★ [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 69.9 MBytes 586 Mbits/sec 0 553 KBytes [ 6] 0.00-1.00 sec 56.7 MBytes 476 Mbits/sec 0 477 KBytes [ 8] 0.00-1.00 sec 46.1 MBytes 386 Mbits/sec 0 411 KBytes [SUM] 0.00-1.00 sec 173 MBytes 1.45 Gbits/sec 0 -snip- - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 830 MBytes 696 Mbits/sec 125 sender [ 4] 0.00-10.00 sec 826 MBytes 693 Mbits/sec receiver [ 6] 0.00-10.00 sec 690 MBytes 579 Mbits/sec 109 sender [ 6] 0.00-10.00 sec 687 MBytes 576 Mbits/sec receiver [ 8] 0.00-10.00 sec 446 MBytes 374 Mbits/sec 120 sender [ 8] 0.00-10.00 sec 443 MBytes 372 Mbits/sec receiver [SUM] 0.00-10.00 sec 1.92 GBytes 1.65 Gbits/sec 354 sender [SUM] 0.00-10.00 sec 1.91 GBytes 1.64 Gbits/sec receiver iperf Done.
14 IPv6で帯域測定をする方法(-6)
サーバでiperf3コマンドを実行します。このとき、-6オプションを指定してIPv6アドレスを使うことを指定します。
[[root@server ~]# iperf3 -s -6 ----------------------------------------------------------- Server listening on 5201 -----------------------------------------------------------
クライアントでiperf3コマンドを実行します。インタフェース名は、帯域測定用のIPv6パケットを送信するインタフェースの名前です。<宛先のIPv6アドレス>%<インタフェース名>
[root@client ~]# iperf3 -6 -c fe80::174:936a:8876:8055%ens33 Connecting to host fe80::174:936a:8876:8055%ens33, port 5201 [ 4] local fe80::3e2:a9c0:9fa6:a8ad port 48898 connected to fe80::174:936a:8876:8055 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 95.7 MBytes 802 Mbits/sec 0 551 KBytes [ 4] 1.00-2.00 sec 131 MBytes 1.10 Gbits/sec 0 651 KBytes [ 4] 2.00-3.00 sec 158 MBytes 1.33 Gbits/sec 0 747 KBytes [ 4] 3.00-4.00 sec 173 MBytes 1.45 Gbits/sec 0 1.10 MBytes [ 4] 4.00-5.00 sec 173 MBytes 1.45 Gbits/sec 0 1.53 MBytes [ 4] 5.00-6.00 sec 175 MBytes 1.47 Gbits/sec 0 1.54 MBytes [ 4] 6.00-7.00 sec 176 MBytes 1.48 Gbits/sec 0 1.54 MBytes [ 4] 7.00-8.00 sec 176 MBytes 1.48 Gbits/sec 0 1.54 MBytes [ 4] 8.00-9.00 sec 176 MBytes 1.48 Gbits/sec 0 1.54 MBytes [ 4] 9.00-10.00 sec 176 MBytes 1.48 Gbits/sec 0 1.54 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 1.57 GBytes 1.35 Gbits/sec 0 sender [ 4] 0.00-10.00 sec 1.57 GBytes 1.35 Gbits/sec receiver iperf Done.
15 ファイル転送のボトルネックを調べる方法(-F)
- "-F"オプションを指定しないと、クライアントのiperf3が送信したデータはサーバのiperf3で受信され、ストレージに書き込まず、廃棄されます。
- "-F"オプションを指定すると、サーバのiperf3は受信したデータをストレージに書き込みます。
問題が発生しているシステムで、"-F"オプションを指定した場合と指定しない場合の実行結果を比較して、ストレージにボトルネックがあるかどうか絞り込みます。なお、manによると、送信したファイルサイズが元のファイルサイズと一致しない場合があるようです。
テスト用のファイルを作成します。
なお、ファイルの作成方法は、ファイルの作り方 - hana_shinのLinux技術ブログを参照してください。
[root@client ~]# fallocate -l 500M test.dat
作成したファイルのファイルサイズを確認します。
[root@client ~]# ls -lh test.dat -rw-r--r--. 1 root root 500M 1月 16 11:10 test.dat
サーバでiperf3コマンドを実行します。このとき、-Fオプションを指定して受信したデータを書き込むファイルを指定します。
[root@server ~]# iperf3 -s -F test.dat ----------------------------------------------------------- Server listening on 5201 -----------------------------------------------------------
クライアントでiperf3コマンドを実行します。このとき、-Fオプションを指定して送信するファイルを指定します。
[root@client ~]# iperf3 -c 192.168.2.100 -F test.dat Connecting to host 192.168.2.100, port 5201 [ 4] local 192.168.2.105 port 46566 connected to 192.168.2.100 port 5201 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 75.1 MBytes 630 Mbits/sec 0 212 KBytes [ 4] 1.00-2.00 sec 101 MBytes 847 Mbits/sec 0 298 KBytes [ 4] 2.00-2.43 sec 54.4 MBytes 1.05 Gbits/sec 0 328 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-2.43 sec 230 MBytes 794 Mbits/sec 0 sender Sent 230 MByte / 500 MByte (46%) of test.dat [ 4] 0.00-2.43 sec 227 MBytes 784 Mbits/sec receiver iperf Done.
なお、サーバでstraceコマンドを使うと、iperf3が受信データをファイルに書き込んでいることがわかります。straceコマンドの使いかたは、straceコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。
[root@server ~]# strace -e trace=open iperf3 -s -F test.dat -snip- ----------------------------------------------------------- Server listening on 5201 ----------------------------------------------------------- open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 5 Accepted connection from 192.168.2.105, port 46580 open("/tmp/iperf3.xTHBO9", O_RDWR|O_CREAT|O_EXCL, 0600) = 6 open("test.dat", O_WRONLY|O_CREAT|O_TRUNC, 0600) = 7 -snip-
16 詳細情報を表示する方法(-V)
このオプションは、サーバ、クライアントの両方で使用できます。Vオプションを指定すると、iperf3の版数、OS版数、実行時刻等の詳細情報が追加表示されます。
[root@server ~]# iperf3 -s -V iperf 3.1.7 Linux server 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 ----------------------------------------------------------- Server listening on 5201 ----------------------------------------------------------- Time: Sat, 15 Jan 2022 12:50:06 GMT Accepted connection from 192.168.2.105, port 51194 Cookie: client.1642251006.468534.06949ef12fc TCP MSS: 0 (default) -snip-
[root@client ~]# iperf3 -c 192.168.2.100 -V iperf 3.1.7 Linux client 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 Control connection MSS 1448 Time: Sat, 15 Jan 2022 12:50:06 GMT Connecting to host 192.168.2.100, port 5201 Cookie: client.1642251006.468534.06949ef12fc TCP MSS: 1448 (default) -snip-
17 タイトルを付ける方法(-T)
表示されるレポートの各行の行頭に文字列を表示することができます。ここではホスト名を表示してみます。
[root@server ~]# iperf3 -s ----------------------------------------------------------- Server listening on 5201 -----------------------------------------------------------
hostnameコマンドの実行結果(client)が左端に表示されていることがわかります。
[root@client ~]# iperf3 -c 192.168.2.100 -T `hostname` client: Connecting to host 192.168.2.100, port 5201 client: [ 4] local 192.168.2.105 port 51200 connected to 192.168.2.100 port 5201 client: [ ID] Interval Transfer Bandwidth Retr Cwnd client: [ 4] 0.00-1.00 sec 148 MBytes 1.24 Gbits/sec 0 1.33 MBytes client: [ 4] 1.00-2.00 sec 185 MBytes 1.55 Gbits/sec 10 1.42 MBytes client: [ 4] 2.00-3.00 sec 191 MBytes 1.61 Gbits/sec 0 1.55 MBytes client: [ 4] 3.00-4.00 sec 200 MBytes 1.68 Gbits/sec 0 1.66 MBytes client: [ 4] 4.00-5.00 sec 200 MBytes 1.68 Gbits/sec 0 1.74 MBytes client: [ 4] 5.00-6.00 sec 214 MBytes 1.80 Gbits/sec 0 1.80 MBytes client: [ 4] 6.00-7.00 sec 209 MBytes 1.75 Gbits/sec 0 1.84 MBytes client: [ 4] 7.00-8.00 sec 220 MBytes 1.85 Gbits/sec 0 1.87 MBytes client: [ 4] 8.00-9.00 sec 192 MBytes 1.61 Gbits/sec 19 1.37 MBytes client: [ 4] 9.00-10.01 sec 221 MBytes 1.85 Gbits/sec 0 1.47 MBytes client: - - - - - - - - - - - - - - - - - - - - - - - - - client: [ ID] Interval Transfer Bandwidth Retr client: [ 4] 0.00-10.01 sec 1.93 GBytes 1.66 Gbits/sec 29 sender client: [ 4] 0.00-10.01 sec 1.93 GBytes 1.66 Gbits/sec receiver client: client: iperf Done.
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ