6.2. iperf3 を使用した UDP スループットのテスト
iperf3 ユーティリティーは、サーバーモードとクライアントモードを提供し、2 つのホスト間のネットワークスループットテストを実行します。
アプリケーションのスループットは、アプリケーションが使用するバッファーサイズなど、多くの要因に依存します。したがって、iperf3 などのテストユーティリティーで測定された結果は、実稼働ワークロード下のサーバー上のアプリケーションの結果とは大きく異なる可能性があります。
前提条件
-
iperf3パッケージはクライアントとサーバーの両方にインストールされている。 - 両方のホスト上の他のサービスによって、テスト結果に大きな影響を与えるネットワークトラフィックが発生することはない。
- オプション: サーバーとクライアントの両方で最大 UDP ソケットサイズを増やしている。詳細は、システム全体の UDP ソケットバッファーの増加 を参照してください。
手順
オプション: サーバーとクライアントの両方のネットワークインターフェイスコントローラー (NIC) の最大ネットワーク速度を表示します。
ethtool enp1s0 | grep "Speed"
# ethtool enp1s0 | grep "Speed" Speed: 10000Mb/sCopy to Clipboard Copied! Toggle word wrap Toggle overflow サーバー上では以下の設定になります。
UDP ソケット読み取りバッファーの最大サイズを表示し、値をメモします。
sysctl net.core.rmem_max
# sysctl net.core.rmem_max net.core.rmem_max = 16777216Copy to Clipboard Copied! Toggle word wrap Toggle overflow 表示される値はバイト単位です。
firewalldサービスでデフォルトのiperf3ポート 5201 を一時的に開きます。firewall-cmd --add-port=5201/tcp --add-port=5201/udp
# firewall-cmd --add-port=5201/tcp --add-port=5201/udpCopy to Clipboard Copied! Toggle word wrap Toggle overflow iperf3は、サーバー上の TCP ソケットのみを開くことに注意してください。クライアントが UDP を使用する場合、最初にこの TCP ポートに接続します。その後、サーバーが同じポート番号で UDP ソケットを開いて UDP トラフィックのスループットテストを実行します。このため、ローカルファイアウォールで TCP プロトコルと UDP プロトコルの両方に対してポート 5201 を開く必要があります。iperf3をサーバーモードで起動します。iperf3 --server
# iperf3 --serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow サービスは受信クライアント接続を待機するようになります。
クライアントで以下を実行します。
クライアントがサーバーへの接続に使用するインターフェイスの最大伝送単位 (MTU) を表示し、その値をメモします。
ip link show enp1s0
# ip link show enp1s0 2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow UDP ソケット書き込みバッファーの最大サイズを表示し、値をメモします。
sysctl net.core.wmem_max
# sysctl net.core.wmem_max net.core.wmem_max = 16777216Copy to Clipboard Copied! Toggle word wrap Toggle overflow 表示される値はバイト単位です。
スループットの測定を開始します。
iperf3 --udp --time 60 --window 16777216 --length 1472 --bitrate 2G --client 192.0.2.1
# iperf3 --udp --time 60 --window 16777216 --length 1472 --bitrate 2G --client 192.0.2.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
--udp: テストには UDP プロトコルを使用します。 -
--time <seconds>: クライアントが送信を停止する時間を秒単位で定義します。 -
--window <size>: UDP ソケットのバッファーサイズを設定します。理想的には、クライアントとサーバーのサイズが同じです。それらが異なる場合は、このパラメーターを小さい方の値に設定します。クライアントではnet.core.wmem_max、サーバーではnet.core.rmem_maxです。 -
--length <size>: 読み取りおよび書き込みを行うバッファーの長さを設定します。このオプションを断片化されていない最大のペイロードに設定します。理想的な値は次のように計算します。MTU - IP ヘッダー (IPv4 の場合は 20 バイト、IPv6 の場合は 40 バイト) - 8 バイトの UDP ヘッダー。 --bitrate <rate>: ビットレートをビット/秒単位で指定した値に制限します。2 Gbps の場合は2Gなど、単位を指定できます。このパラメーターを機能すると予想される値に設定し、後の測定で値を増やします。クライアントが送信パス上のデバイスまたはサーバーが処理できる速度よりも速い速度でパケットを送信すると、パケットがドロップされる可能性があります。
-
--client <server>: クライアントモードを有効にし、iperf3サーバーを実行するサーバーの IP アドレスまたは名前を設定します。
-
iperf3がテストを完了するまで待ちます。サーバーとクライアントの両方で統計が毎秒表示され、最後に概要が表示されます。たとえば、以下はクライアントに表示される概要です。[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams [ 5] 0.00-60.00 sec 14.0 GBytes 2.00 Gbits/sec 0.000 ms 0/10190216 (0%) sender [ 5] 0.00-60.04 sec 14.0 GBytes 2.00 Gbits/sec 0.002 ms 0/10190216 (0%) receiver
[ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams [ 5] 0.00-60.00 sec 14.0 GBytes 2.00 Gbits/sec 0.000 ms 0/10190216 (0%) sender [ 5] 0.00-60.04 sec 14.0 GBytes 2.00 Gbits/sec 0.002 ms 0/10190216 (0%) receiverCopy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、平均ビットレートは 2 Gbps で、パケットの損失はありませんでした。
サーバー上では以下の設定になります。
-
Ctrl+C を押して
iperf3サーバーを停止します。 firewalldのポート 5201 を閉じます。firewall-cmd --remove-port=5201/tcp --remove-port=5201/udp
# firewall-cmd --remove-port=5201/tcp --remove-port=5201/udpCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
Ctrl+C を押して