Benchmarking¶
DAQIRI ships with several stream types to handle different types of incoming and outgoing streams. Choosing the stream type depends on the type of sensor being used and its capabilities. The stream_type is decided from the decision tree below:
Choose a stream type¶
| Use case | DAQIRI config | Benchmark | Start here |
|---|---|---|---|
| Ingest from or egress to a programmable PCIe sensor, such as an FPGA on the PCIe bus. | stream_type: "pcie" |
n/a | Under development (see note below). |
| Compare against normal Linux networking, run on a non-NVIDIA NIC, or test a peer that speaks TCP/UDP sockets. | stream_type: "socket" with tcp:// or udp:// endpoints |
daqiri_bench_socket |
Socket and RDMA Benchmarking |
| Test a peer that already implements RDMA verbs over RoCE. | stream_type: "socket" and roce:// endpoints |
daqiri_bench_rdma |
Socket and RDMA Benchmarking |
| Drive raw Ethernet packets directly from an NVIDIA NIC under DAQIRI control. | stream_type: "raw" |
daqiri_bench_raw_gpudirect and the other raw_* benches |
Raw Ethernet Benchmarking |
PCIe stream type status
The PCIe programmable-sensor path is under development. Once completed it will allow 3rd party PCIe devices to read from and write to the GPU's BAR1 memory.
Why RDMA is listed under socket
The RoCE benchmark uses the connection-oriented socket/RDMA configuration model. The executable is named daqiri_bench_rdma to show the RDMA-specific API calls.
Common benchmark workflow¶
Label the path before comparing benchmark results. A physical cross-host run,
a two-port cabled loopback, NIC hardware loopback, and namespace or software
loopback exercise different parts of the system and are not interchangeable.
For cabled runs, advancing directional PHY counters prove that traffic crossed
the intended link. For NIC hardware loopback, vport_loopback_bytes advances
while the PHY counters remain flat.
-
Build the examples with the engines you plan to test. The default container build enables every stream type:
-
Pick the physical pair or host pair that should carry the traffic. For same-host Spark wire tests, prefer a client namespace and a server namespace so the route cannot silently fall back to loopback.
-
Prove the direction with hardware counters before trusting bandwidth numbers. For one-way client-to-server tests, the important counters are the client-side
tx_packets_phy/tx_bytes_phyand the server-siderx_packets_phy/rx_bytes_phy. -
Run the DAQIRI benchmark and a known baseline such as
iperf3orib_send_bwwith the same namespace, interface, and message-size assumptions. -
Monitor line rate with NIC counters or
mlnx_perf; application-side byte counts are useful, but hardware counters answer whether packets actually reached the physical path.
For a result you intend to compare or publish, also record the DAQIRI commit and build, hardware and link setup, exact config, CPU placement, message size, queue count, requested rate, and measured duration. Run for at least 10 seconds, exclude partial startup and shutdown samples, and check application delivery together with the transport-specific error and drop counters described on the pages below.
Page map¶
- Socket and RDMA Benchmarking covers Linux TCP/UDP and RoCE/RDMA runs with matching client/server namespace setup.
- Raw Ethernet Benchmarking covers the DPDK/raw Ethernet examples, hugepage sizing, physical loopback configuration, and raw benchmark troubleshooting.
- Understanding the Configuration File explains the YAML fields once you have selected the stream type and example config.