
qperf ユーティリティーは、2 つのノード間の RDMA と IP のパフォーマンスを、帯域幅、レイテンシー、CPU 使用率の観点から測定します。
Oracle Exadata ではデフォルトで利用できる qperf ですが、Oracle Linux 環境でも導入して TCP / UDP のレイテンシをマイクロ秒(μs)単位で測定できます。
特にマルチクラウドや DB 間通信では、ネットワーク帯域とレイテンシ(RTT)の確認が重要になります。
たとえば、次のような通信パターンで影響が出やすくなります。
- アプリケーション 〜 データベース間
- 同一 AD / AZ 内の コンピューター間
- AD / AZ をまたぐコンピュータ間
- リージョンをまたぐコンピュータ間
また、OLTP のように応答速度が重要な処理や、Data Guard の SYNC 転送では、RTT が性能に大きく影響します。 さらに、大量データ転送や REDO 転送では、帯域だけでなく、レイテンシ、パケットロス、輻輳もスループット低下の要因になり、マルチクラウド・ソリューションに関するMAA評価 には次のものがあります。
● アプリケーションおよびデータベースのワークロードおよびアーキテクチャに対するネットワーク結果の影響
-
アプリケーション・パフォーマンスとネットワーク・ラウンドトリップ(RTT)待機時間:
アプリケーションがOLTPであるか、またはアプリケーションVMとデータベースVMの間の待機時間が短いことに依存している場合は、アプリケーションVMとデータベースVMを同じ場所に配置し、必ずRTT待機時間がレスポンス時間の要件を満たすようにします。 -
ローカル・スタンバイ・データベースとネットワーク・ラウンドトリップ待機時間:
同じリージョン内のプライマリとスタンバイの間の、データ損失ゼロのSYNC転送構成を検討している場合は、3ミリ秒を超えるラウンドトリップ(RTT)ネットワーク待機時間(1ミリ秒未満が望ましい)だと、アプリケーションのレスポンス時間およびスループットに影響する可能性があります。
SYNC転送を使用するほとんどのスタンバイ・データベースでは、RTTネットワーク待機時間は1ミリ秒未満です。グローバル分散データベース(シャード・データベース)は、データベース・シャード間のRTT待機時間が短いことによるメリットもあります。 -
スタンバイのピーク時データベース変更率をサポートするための十分な単一プロセス・ネットワーク・スループット:
拡大に対応するために、単一プロセスiperfスループット・テストで、各データベース・インスタンスのピークREDO率の最大スループットを上回っている必要があります(できれば20%以上)。
このスループットに満たない場合は、スタンバイが、構成後、ピーク時間の間にプライマリ・データベースに遅れずについていくことができない場合があります。Oracle Golden GateおよびGlobally Distributed Databaseの構成の場合は、単一プロセスのスループットも重要です。
単一プロセスのスループットは、2.4 GB/秒(300 MB/秒)以上である必要があります。そうでない場合は、マルチベンダー・パートナにサービス・リクエストを記録します。OCIピアリングでは、スループットは前述の最小値よりはるかに高くなることが期待されます。 -
大量のデータ転送のための十分なマルチプロセス・ネットワーク・スループット:
パラレルiperfテストでは、テストされたプロセス数でデータベースをインスタンス化できる、おおよその速度が示されます。
たとえば、50 TBのデータベースの場合、並列度8でのこのテストで1GB/秒を達成すると、8つのプロセスがあるデータベースはインスタンス化に14時間以上かかることになります。デフォルトのインスタンス化では、4つのチャネルが使用されます。Oracle Supportでサービス・リクエストを1つオープンして、インスタンス化の並列度を高めることができます。
複数プロセスのスループットは、8 GB/秒(1000 MB/秒)以上である必要があります。そうでない場合は、マルチベンダー・パートナにサービス・リクエストを記録します。OCIピアリングでは、スループットは前述の最小値よりはるかに高くなることが期待されます。レイテンシが高いほど、データ伝送の遅延が長くなり、ネットワーク速度が高くてもスループットが低下する可能性があります。スループットが低下するその他の要因には、パケットの損失と輻輳があります。
ということで、Oracle Linux 9 で qperf をインストールし、TCP/UDP レイテンシを確認すしてみてみます。
・手順概要
1. Server / Client の2台へqperfをインストール
2. Server 側で 19765/tcp, udp が疎通可能にし、qperf 待受
3. Client 側で Serverへ向けて qperf実行
4. Client と Serverを入れ替え逆方向を計測して RTTを算出
■ Oracle Linux 9 で qperf をインストール
OL9 では ol9_RDMA リポジトリを有効化
1) RDMA リポジトリを有効化
Oracle Linux9 では、ol9_RDMA リポジトリを有効化
sudo dnf install -y dnf-plugins-core
sudo dnf config-manager --enable ol9_RDMA
sudo dnf repolist | grep DMA
2) yumキャッシュ・ファイル消去
使用可能なすべてのリポジトリからyumキャッシュ・ファイルを消去します
sudo dnf clean all
sudo dnf makecache
3) qperfと依存パッケージをインストール
次のコマンドを使用して、パッケージをインストールします:
sudo dnf install -y oracle-rdma-release-guest
sudo dnf install -y qperf libibverbs librdmacm rdma-core
[root@vm-ol9 ~]# sudo dnf install -y dnf-plugins-core
Last metadata expiration check: 0:33:53 ago on Fri 13 Mar 2026 08:24:11 AM GMT.
Package dnf-plugins-core-4.3.0-24.0.1.el9_7.noarch is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[root@vm-ol9 ~]# sudo dnf config-manager --enable ol9_RDMA
[root@vm-ol9 ~]# sudo dnf repolist | grep DMA
ol9_RDMA Oracle Linux 9 (x86_64) RDMA
[root@vm-ol9 ~]# sudo dnf clean all
45 files removed
[root@vm-ol9 ~]# sudo dnf makecache
Ksplice for Oracle Linux 9 (x86_64) 65 MB/s | 18 MB 00:00
Oracle Linux 9 OCI Included Packages (x86_64) 46 MB/s | 215 MB 00:04
Oracle Linux 9 EPEL Packages for Development (x86_64) 72 MB/s | 31 MB 00:00
Oracle Linux 9 BaseOS Latest (x86_64) 74 MB/s | 113 MB 00:01
Oracle Linux 9 Application Stream Packages (x86_64) 74 MB/s | 85 MB 00:01
Oracle Linux 9 Addons (x86_64) 18 MB/s | 842 kB 00:00
Oracle Linux 9 (x86_64) RDMA 1.7 MB/s | 87 kB 00:00
Oracle Linux 9 UEK Release 8 (x86_64) 74 MB/s | 31 MB 00:00
Metadata cache created.
[root@vm-ol9 ~]# sudo dnf install -y oracle-rdma-release-guest
Last metadata expiration check: 0:01:48 ago on Fri 13 Mar 2026 08:59:35 AM GMT.
Dependencies resolved.
==============================================================================================================================================================================================
Package Architecture Version Repository Size
==============================================================================================================================================================================================
Installing:
oracle-rdma-release-guest x86_64 0.31.0-1.el9ora ol9_RDMA 15 k
Transaction Summary
==============================================================================================================================================================================================
Install 1 Package
Total download size: 15 k
Installed size: 19 k
Downloading Packages:
oracle-rdma-release-guest-0.31.0-1.el9ora.x86_64.rpm 68 kB/s | 15 kB 00:00
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 68 kB/s | 15 kB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : oracle-rdma-release-guest-0.31.0-1.el9ora.x86_64 1/1
Verifying : oracle-rdma-release-guest-0.31.0-1.el9ora.x86_64 1/1
Installed:
oracle-rdma-release-guest-0.31.0-1.el9ora.x86_64
Complete!
[root@vm-ol9 ~]# sudo dnf install -y qperf libibverbs librdmacm rdma-core
Last metadata expiration check: 0:02:03 ago on Fri 13 Mar 2026 08:59:35 AM GMT.
Package libibverbs-57.0-2.el9.x86_64 is already installed.
Dependencies resolved.
==============================================================================================================================================================================================
Package Architecture Version Repository Size
==============================================================================================================================================================================================
Installing:
librdmacm x86_64 5:61.0-1.0.2.el9ora ol9_RDMA 80 k
qperf x86_64 5:0.4.11-1.0.10.el9ora ol9_RDMA 68 k
rdma-core x86_64 5:61.0-1.0.2.el9ora ol9_RDMA 110 k
Upgrading:
libibverbs x86_64 5:61.0-1.0.2.el9ora ol9_RDMA 370 k
Transaction Summary
==============================================================================================================================================================================================
Install 3 Packages
Upgrade 1 Package
Total download size: 628 k
Downloading Packages:
(1/4): librdmacm-61.0-1.0.2.el9ora.x86_64.rpm 928 kB/s | 80 kB 00:00
(2/4): qperf-0.4.11-1.0.10.el9ora.x86_64.rpm 559 kB/s | 68 kB 00:00
(3/4): libibverbs-61.0-1.0.2.el9ora.x86_64.rpm 4.9 MB/s | 370 kB 00:00
(4/4): rdma-core-61.0-1.0.2.el9ora.x86_64.rpm 283 kB/s | 110 kB 00:00
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 1.6 MB/s | 628 kB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Upgrading : libibverbs-5:61.0-1.0.2.el9ora.x86_64 1/5
Running scriptlet: libibverbs-5:61.0-1.0.2.el9ora.x86_64 1/5
Installing : librdmacm-5:61.0-1.0.2.el9ora.x86_64 2/5
Running scriptlet: librdmacm-5:61.0-1.0.2.el9ora.x86_64 2/5
Installing : qperf-5:0.4.11-1.0.10.el9ora.x86_64 3/5
Installing : rdma-core-5:61.0-1.0.2.el9ora.x86_64 4/5
Running scriptlet: rdma-core-5:61.0-1.0.2.el9ora.x86_64 4/5
Cleanup : libibverbs-57.0-2.el9.x86_64 5/5
Running scriptlet: libibverbs-57.0-2.el9.x86_64 5/5
Verifying : librdmacm-5:61.0-1.0.2.el9ora.x86_64 1/5
Verifying : qperf-5:0.4.11-1.0.10.el9ora.x86_64 2/5
Verifying : rdma-core-5:61.0-1.0.2.el9ora.x86_64 3/5
Verifying : libibverbs-5:61.0-1.0.2.el9ora.x86_64 4/5
Verifying : libibverbs-57.0-2.el9.x86_64 5/5
Upgraded:
libibverbs-5:61.0-1.0.2.el9ora.x86_64
Installed:
librdmacm-5:61.0-1.0.2.el9ora.x86_64 qperf-5:0.4.11-1.0.10.el9ora.x86_64 rdma-core-5:61.0-1.0.2.el9ora.x86_64
Complete!
● インストール確認
1) インストール確認
[root@vm-ol9 ~]# qperf --version
qperf 0.4.11
[root@vm-ol9 ~]# which qperf
/usr/bin/qperf
[root@vm-ol9 ~]# rpm -qa | grep -E 'qperf|libibverbs|librdmacm|rdma-core|oracle-rdma'
oracle-rdma-release-guest-0.31.0-1.el9ora.x86_64
libibverbs-61.0-1.0.2.el9ora.x86_64
librdmacm-61.0-1.0.2.el9ora.x86_64
qperf-0.4.11-1.0.10.el9ora.x86_64
rdma-core-61.0-1.0.2.el9ora.x86_64
2) help確認
[root@vm-tokyo ~]# qperf -h
Synopsis
qperf
qperf SERVERNODE [OPTIONS] TESTS
Description
qperf measures bandwidth and latency between two nodes. It can work
over TCP/IP as well as the RDMA transports. On one of the nodes, qperf
is typically run with no arguments designating it the server node. One
may then run qperf on a client node to obtain measurements such as
bandwidth, latency and cpu utilization.
In its most basic form, qperf is run on one node in server mode by
invoking it with no arguments. On the other node, it is run with two
arguments: the name of the server node followed by the name of the
test. A list of tests can be found in the section, TESTS. A variety
of options may also be specified.
One can get more detailed information on qperf by using the --help
option. Below are examples of using the --help option:
qperf --help examples Some examples of using qperf
qperf --help opts Summary of options
qperf --help options Description of options
qperf --help tests Short summary and description of tests
qperf --help TESTNAME More information on test TESTNAME
[root@vm-tokyo ~]#
[root@vm-tokyo ~]# qperf --help options
--access_recv OnOff (-ar)
If OnOff is non-zero, data is accessed once received. Otherwise,
data is ignored. By default, OnOff is 0. This can help to mimic
some applications.
-ar1
Cause received data to be accessed.
--alt_port Port (-ap)
Set alternate path port. This enables automatic path failover.
--loc_alt_port Port (-lap)
Set local alternate path port. This enables automatic path failover.
--rem_alt_port Port (-rap)
Set remote alternate path port. This enables automatic path failover.
--cpu_affinity PN (-ca)
Set cpu affinity to PN. CPUs are numbered sequentially from 0. If
PN is "any", any cpu is allowed otherwise the cpu is limited to the
one specified.
--loc_cpu_affinity PN (-lca)
Set local processor affinity to PN.
--rem_cpu_affinity PN (-rca)
Set remote processor affinity to PN.
--flip OnOff (-f)
If non-zero, cause sender and receiver to play opposite roles.
-f1
Cause sender and receiver to play opposite roles.
--help Topic (-h)
Print out information about Topic. To see the list of topics, type
qperf --help
--host Host (-H)
Run test between the current node and the qperf running on node Host.
This can also be specified as the first non-option argument.
--id Device:Port (-i)
Use RDMA Device and Port.
--loc_id Device:Port (-li)
Use local RDMA Device and Port.
--rem_id Device:Port (-ri)
Use remote RDMA Device and Port.
--listen_port Port (-lp)
Set the port we listen on to ListenPort. This must be set to the
same port on both the server and client machines. The default value
is 19765.
--loop Var:Init:Last:Incr (-oo)
Run a test multiple times sequencing through a series of values. Var
is the loop variable; Init is the initial value; Last is the value it
must not exceed and Incr is the increment. It is useful to set the
--verbose_used (-vu) option in conjunction with this option.
--msg_size Size (-m)
Set the message size to Size. The default value varies by test. It
is assumed that the value is specified in bytes however, a trailing
kib or K, mib or M, or gib or G indicates that the size is being
specified in kibibytes, mebibytes or gibibytes respectively while a
trailing kb or k, mb or m, or gb or g indicates kilobytes, megabytes
or gigabytes respectively.
--mtu_size Size (-mt)
Set the MTU size. Only relevant to the RDMA UC/RC tests. Units are
specified in the same manner as the --msg_size option.
--no_msgs N (-n)
Set test duration by number of messages sent instead of time.
--cq_poll OnOff (-cp)
Turn polling mode on or off. This is only relevant to the RDMA tests
and determines whether they poll or wait on the completion queues.
If OnOff is 0, they wait; otherwise they poll.
--loc_cq_poll OnOff (-lcp)
Locally turn polling mode on or off.
--rem_cq_poll OnOff (-rcp)
Remotely turn polling mode on or off.
-cp1
Turn polling mode on.
-lcp1
Turn local polling mode on.
-rcp1
Turn remote polling mode on.
--ip_port Port (-ip)
Use Port to run the socket tests. This is different from
--listen_port which is used for synchronization. This is only
relevant for the socket tests and refers to the TCP/UDP/SDP/RDS/SCTP
port that the test is run on.
--precision Digits (-e)
Set the number of significant digits that are used to report results.
--rd_atomic Max (-nr)
Set the number of in-flight operations that can be handled for a RDMA
read or atomic operation to Max. This is only relevant to the RDMA
Read and Atomic tests.
--loc_rd_atomic Max (-lnr)
Set local read/atomic count.
--rem_rd_atomic Max (-rnr)
Set remote read/atomic count.
--service_level SL (-sl)
Set RDMA service level to SL. This is only used by the RDMA tests.
The service level must be between 0 and 15. The default service
level is 0.
--loc_service_level SL (-lsl)
Set local service level.
--rem_service_level SL (-rsl)
Set remote service level.
--sock_buf_size Size (-sb)
Set the socket buffer size. This is only relevant to the socket
tests.
--loc_sock_buf_size Size (-lsb)
Set local socket buffer size.
--rem_sock_buf_size Size (-rsb)
Set remote socket buffer size.
--src_path_bits N (-sp)
Set source path bits. If the LMC is not zero, this will cause the
connection to use a LID with the low order LMC bits set to N.
--loc_src_path_bits N (-lsp)
Set local source path bits.
--rem_src_path_bits N (-rsp)
Set remote source path bits.
--static_rate Rate (-sr)
Force InfiniBand static rate. Rate can be one of: 2.5, 5, 10, 20,
30, 40, 60, 80, 120, 1xSDR (2.5 Gbps), 1xDDR (5 Gbps), 1xQDR (10
Gbps), 4xSDR (2.5 Gbps), 4xDDR (5 Gbps), 4xQDR (10 Gbps), 8xSDR (2.5
Gbps), 8xDDR (5 Gbps), 8xQDR (10 Gbps).
--loc_static_rate (-lsr)
Force local InfiniBand static rate
--rem_static_rate (-rsr)
Force remote InfiniBand static rate
--time Time (-t)
Set test duration to Time. Specified in seconds however a trailing
m, h or d indicates that the time is specified in minutes, hours or
days respectively.
--timeout Time (-to)
Set timeout to Time. This is the timeout used for various things
such as exchanging messages. The default is 5 seconds.
--loc_timeout Time (-lto)
Set local timeout to Time. This may be used on the server to set
the timeout when initially exchanging data with each client.
However, as soon as we receive the client's parameters, the client's
remote timeout will override this parameter.
--rem_timeout Time (-rto)
Set remote timeout to Time.
--unify_nodes (-un)
Unify the nodes. Describe them in terms of local and remote rather
than send and receive.
--unify_units (-uu)
Unify the units that results are shown in. Uses the lowest common
denominator. Helpful for scripts.
--use_bits_per_sec (-ub)
Use bits/sec rather than bytes/sec when displaying networking speed.
--use_cm OnOff (-cm)
Use the RDMA Connection Manager (CM) if OnOff is non-zero. It is
necessary to use the CM for iWARP devices. The default is to
establish the connection without using the CM. This only works for
the tests that use the RC transport.
-cm1
Use RDMA Connection Manager.
--verbose (-v)
Provide more detailed output. Turns on -vc, -vs, -vt and -vu.
--verbose_conf (-vc)
Provide information on configuration.
--verbose_stat (-vs)
Provide information on statistics.
--verbose_time (-vt)
Provide information on timing.
--verbose_used (-vu)
Provide information on parameters used.
--verbose_more (-vv)
Provide even more detailed output. Turns on -vvc, -vvs, -vvt and
-vvu.
--verbose_more_conf (-vvc)
Provide more information on configuration.
--verbose_more_stat (-vvs)
Provide more information on statistics.
--verbose_more_time (-vvt)
Provide more information on timing.
--verbose_more_used (-vvu)
Provide more information on parameters used.
--version (-V)
The current version of qperf is printed.
--wait_server Time (-ws)
If the server is not ready, continue to try connecting for Time
seconds before giving up. The default is 5 seconds.
■ qperf測定実行
● Server(受信側)設定
1) Firewall設定
netserver の待受ポート(デフォルト 19765)です。
OS や Cloud の Firewall 設定で、Client と Server間で TCP/UDP の 19765番ポート が通るように設定しておきます。
2) qperf起動
qperfコマンドで Client からの接続を受け付けができるようにします。
[root@vm-ol9 ~]# qperf
● Client(送信側)実行
1) Server への 19765ポートアクセス確認
[root@vm-tokyo ~]# nc -vz 10.10.0.3 19765
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 10.10.0.3:19765.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
2) TCP/UDP レイテンシ測定
単位は 1μs (0.001ms)です。
-t 10 で 10秒間測定します。
[root@vm-tokyo ~]# qperf -vvu 10.10.0.3 -t 10 tcp_lat udp_lat
tcp_lat:
latency = 30.2 us
msg_size = 1 bytes
time = 10 sec
timeout = 5 sec
udp_lat:
latency = 29.2 us
msg_size = 1 bytes
time = 10 sec
timeout = 5 sec
今回の例では同一ネットワーク内でおよそ 30μs 前後の低遅延でした。
qperf の tcp_lat / udp_lat は片方向レイテンシの確認に使えます。
RTT を見たい場合は、通信を両方向で確認して全体の往復遅延として評価します。
ということで、逆向きとなる帰りのルートが異なりレイテンシが異なる可能性あるため、単純に2倍するればいいわけではありません。そのため、往復のRTTを計測するには、逆向きからも計測する必要があります。
3) 逆向き TCP/UDP レイテンシ測定
今度は、ServerとClientを入れ替えて逆向きのレイテンシを計測します。
[root@vm-ol9 ~]# qperf -vvu 10.10.0.2 -t 10 tcp_lat udp_lat
tcp_lat:
latency = 30.4 us
msg_size = 1 bytes
time = 10 sec
timeout = 5 sec
udp_lat:
latency = 28.9 us
msg_size = 1 bytes
time = 10 sec
timeout = 5 sec
逆向きは、およそ 30μs 前後でした。
双方向の結果を足して RTT は約 60μs であることを確認できました。
今回は Oracle Linux 9 に qperf を導入し、TCP / UDP のレイテンシを μs 単位で確認するところまで試してみました。
次回は、同一 AD/AZ 内、AZ 間、リージョン間など条件を変えて比較していくと、アプリケーション配置や DB 配置の判断材料としてさらに面白くなりそうです。
■ 参考
・ qperfを使用してネットワークの帯域幅と遅延性能を測定する方法
・ Oracle LinuxへのOracle対応RDMAパッケージのインストールおよびアップグレード
・ Unbreakable Enterprise Kernel: Installing and Upgrading Oracle-Supported RDMA Packages on Oracle Linux
・ Oracle Database MulticloudソリューションのMAAネットワーク評価
・ MAAによるマルチクラウドソリューションの評価
・ 高可用性概要およびベスト・プラクティス
・ マルチクラウド向けのOracle Maximum Availability Architecture
・ マルチクラウド・ソリューションに関するMAA評価
■ 解説
ネットワークのパフォーマンスについて興味出るよう解説しています。