QPERF(1)
β¨ NAME β¨
qperf(1) β Measure RDMA and IP performance
πΈ SYNOPSIS πΈ
qperf
qperf SERVERNODE [OPTIONS] TESTS
π DESCRIPTION π
So 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
β¨ EXAMPLES β¨
In these examples, we first run qperf on a node called myserver in server mode by invoking it with no arguments. In all the subsequent examples, we run qperf on another node and connect to the server which we assume has a hostname of myserver.
- To run a TCP bandwidth and latency test:
qperf myserver tcp_bw tcp_lat
- To run a SDP bandwidth test for 10 seconds:
qperf myserver -t 10 sdp_bw
- To run a UDP latency test and then cause the server to terminate:
qperf myserver udp_lat quit
- To measure the RDMA UD latency and bandwidth:
qperf myserver ud_lat ud_bw
- To measure RDMA UC bi-directional bandwidth:
qperf myserver rc_bi_bw
- To get a range of TCP latencies with a message size from 1 to 64K
qperf myserver -oo msg_size:1:64K:*2 -vu tcp_lat
π OPTIONS π
Okay bestie, here come the options. There are literally so many, but you got this. Every single one is here, no skips. π
-ar,--access_recv OnOffβ 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.-ap,--alt_port Portβ Set alternate path port. This enables automatic path failover.-lap,--loc_alt_port Portβ Set local alternate path port. This enables automatic path failover.-rap,--rem_alt_port Portβ Set remote alternate path port. This enables automatic path failover.-ca,--cpu_affinity PNβ 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.-lca,--loc_cpu_affinity PNβ Set local processor affinity to PN.-rca,--rem_cpu_affinity PNβ Set remote processor affinity to PN.-f,--flip OnOffβ If non-zero, cause sender and receiver to play opposite roles.-f1β Cause sender and receiver to play opposite roles.-h,--help Topicβ Print out information about Topic. To see the list of topics, typeqperf --help.-H,--host Hostβ Run test between the current node and theqperfrunning on node Host. This can also be specified as the first non-option argument.-i,--id Device:Portβ Use RDMA Device and Port.-li,--loc_id Device:Portβ Use local RDMA Device and Port.-ri,--rem_id Device:Portβ Use remote RDMA Device and Port.-lp,--listen_port Portβ 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.-oo,--loop Var:Init:Last:Incrβ 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.-m,--msg_size Sizeβ Set the message size to Size. The default value varies by test. It is assumed that the value is specified in bytes however, a trailingkiborK,miborM, orgiborGindicates that the size is being specified in kibibytes, mebibytes or gibibytes respectively while a trailingkbork,mborm, orgborgindicates kilobytes, megabytes or gigabytes respectively.-mt,--mtu_size Sizeβ Set the MTU size. Only relevant to the RDMA UC/RC tests. Units are specified in the same manner as the--msg_sizeoption.-n,--no_msgs Nβ Set test duration by number of messages sent instead of time.-cp,--cq_poll OnOffβ 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.-lcp,--loc_cq_poll OnOffβ Locally turn polling mode on or off.-rcp,--rem_cq_poll OnOffβ 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,--ip_port Portβ Use Port to run the socket tests. This is different from--listen_portwhich 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.-e,--precision Digitsβ Set the number of significant digits that are used to report results.-nr,--rd_atomic Maxβ 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.-lnr,--loc_rd_atomic Maxβ Set local read/atomic count.-rnr,--rem_rd_atomic Maxβ Set remote read/atomic count.-sl,--service_level 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.-lsl,--loc_service_level SLβ Set local service level.-rsl,--rem_service_level SLβ Set remote service level.-sb,--sock_buf_size Sizeβ Set the socket buffer size. This is only relevant to the socket tests.-lsb,--loc_sock_buf_size Sizeβ Set local socket buffer size.-rsb,--rem_sock_buf_size Sizeβ Set remote socket buffer size.-sp,--src_path_bits Nβ 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.-lsp,--loc_src_path_bits Nβ Set local source path bits.-rsp,--rem_src_path_bits Nβ Set remote source path bits.-sr,--static_rate Rateβ 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).-lsr,--loc_static_rateβ Force local InfiniBand static rate-rsr,--rem_static_rateβ Force remote InfiniBand static rate-t,--time Timeβ Set test duration to Time. Specified in seconds however a trailingm,hordindicates that the time is specified in minutes, hours or days respectively.-to,--timeout Timeβ Set timeout to Time. This is the timeout used for various things such as exchanging messages. The default is 5 seconds.-lto,--loc_timeout Timeβ 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.-rto,--rem_timeout Timeβ Set remote timeout to Time.-un,--unify_nodesβ Unify the nodes. Describe them in terms of local and remote rather than send and receive.-uu,--unify_unitsβ Unify the units that results are shown in. Uses the lowest common denominator. Helpful for scripts.-ub,--use_bits_per_secβ Use bits/sec rather than bytes/sec when displaying networking speed.-cm,--use_cm OnOffβ 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.-v,--verboseβ Provide more detailed output. Turns on-vc,-vs,-vtand-vu.-vc,--verbose_confβ Provide information on configuration.-vs,--verbose_statβ Provide information on statistics.-vt,--verbose_timeβ Provide information on timing.-vu,--verbose_usedβ Provide information on parameters used.-vv,--verbose_moreβ Provide even more detailed output. Turns on-vvc,-vvs,-vvtand-vvu.-vvc,--verbose_more_confβ Provide more information on configuration.-vvs,--verbose_more_statβ Provide more information on statistics.-vvt,--verbose_more_timeβ Provide more information on timing.-vvu,--verbose_more_usedβ Provide more information on parameters used.-V,--versionβ The current version ofqperfis printed.-ws,--wait_server Timeβ If the server is not ready, continue to try connecting for Time seconds before giving up. The default is 5 seconds.
β¨ TESTS β¨
Okay so this is the whole roster of tests qperf can run for you, and bestie there are a lot of them π . Some are just little housekeeping vibes, some are network speed runs, and some are full-on RDMA situations. You pass a test name to qperf and it does the thing β that's the whole deal. Let's go π
confβ shows you the configuration, like a lil mirror for your setup πͺquitβ makes the server quit. Yeah, it just... ends it π (server said "I'm out")rds_bwβ RDS streaming, one-way bandwidthrds_latβ RDS, one-way latencysctp_bwβ SCTP streaming, one-way bandwidthsctp_latβ SCTP, one-way latencysdp_bwβ SDP streaming, one-way bandwidthsdp_latβ SDP, one-way latencytcp_bwβ TCP streaming, one-way bandwidthtcp_latβ TCP, one-way latencyudp_bwβ UDP streaming, one-way bandwidthudp_latβ UDP, one-way latencyrc_bi_bwβ RC streaming, two-way bandwidth (both directions, main character energy π₯)rc_bwβ RC streaming, one-way bandwidthrc_latβ RC, one-way latencyuc_bi_bwβ UC streaming, two-way bandwidthuc_bwβ UC streaming, one-way bandwidthuc_latβ UC, one-way latencyud_bi_bwβ UD streaming, two-way bandwidthud_bwβ UD streaming, one-way bandwidthud_latβ UD, one-way latencyxrc_bi_bwβ XRC streaming, two-way bandwidthxrc_bwβ XRC streaming, one-way bandwidthxrc_latβ XRC, one-way latencyrc_rdma_read_bwβ RC RDMA read streaming, one-way bandwidthrc_rdma_read_latβ RC RDMA read, one-way latencyrc_rdma_write_bwβ RC RDMA write streaming, one-way bandwidthrc_rdma_write_latβ RC RDMA write, one-way latencyrc_rdma_write_poll_latβ RC RDMA write polling latency πuc_rdma_write_bwβ UC RDMA write streaming, one-way bandwidthuc_rdma_write_latβ UC RDMA write, one-way latencyuc_rdma_write_poll_latβ UC RDMA write polling latencyrc_compare_swap_mrβ RC compare and swap messaging raterc_fetch_add_mrβ RC fetch and add messaging ratever_rc_compare_swapβ verify RC compare and swap βver_rc_fetch_addβ verify RC fetch and add β
πΈ AUTHOR πΈ
Written by Johann George. Respect the legend π«Ά
π BUGS π
Okay so the fine print, and ngl some of this is giving "read before you run it" energy:
- None of the RDMA tests are available if
qperfis compiled without the RDMA libraries. No libs, no RDMA tests, periodt π - None of the XRC tests are available if
qperfis compiled without the XRC extensions. Same situation, different acronym π - The
-foption is not yet implemented in many of the tests. Like, it exists, but a lot of tests are still ghosting it π
fr fr, if you're confused why a test won't run, check how your qperf was built first β that's usually the plot twist.
and that's the whole page bestie, you ate it π this was qperf, April 2018 vintage, page QPERF(1) β go measure something slay β¨π
π¦ where this page comes from
- debian bookworm: qperf 0.4.11-3 Β· GPL-2.0-only
- debian trixie: qperf 0.4.11-3+b1 Β· GPL-2.0-only
- opensuse-leap 16.0: qperf 0.4.11-160000.2.2 Β· BSD-2-Clause OR GPL-2.0-only
- opensuse-leap 16.0: qperf 0.4.11-160000.2.2 Β· BSD-2-Clause OR GPL-2.0-only
- opensuse-leap 16.0: qperf 0.4.11-160000.2.2 Β· BSD-2-Clause OR GPL-2.0-only
- opensuse-leap 16.0: qperf 0.4.11-160000.2.2 Β· BSD-2-Clause OR GPL-2.0-only
- ubuntu jammy: qperf 0.4.11-2 Β· GPL-2.0-only
- ubuntu noble: qperf 0.4.11-3build2 Β· GPL-2.0-only
- ubuntu questing: qperf 0.4.11-3build2
- ubuntu resolute: qperf 0.4.11-3build3 Β· GPL-2.0-only
- ubuntu stonking: qperf 0.4.11-3build3 Β· GPL-2.0-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms