Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,17 @@ Configs named `raw_rx_*` are RX-only — they initialize the RX path and wait fo

When determining throughput for a benchmark use the `mlnx_perf` utility in the background to view transmit and receive rates. Using application run time with packet counts is usually not accurate enough due to startup inconsistencies.

### Platform profiles (Spark / IGX)

The `*_spark*` sweep configs and the `run_spark_*` / `setup_spark_wire_loopback_netns.sh` scripts are **platform-parameterized**, selected by `BENCH_PLATFORM` (default `spark`):

```bash
BENCH_PLATFORM=igx ./examples/run_spark_bench.sh dpdk sweep # IGX Orin devkit
./examples/run_spark_bench.sh dpdk sweep # DGX Spark (default)
```

`examples/bench_platform.sh` sources `examples/bench_platform_<P>.env` (one profile per platform) and fills `@VAR@` placeholders in the sweep config templates. A profile carries the per-platform values that differ between a GB10 Spark (unified memory → `kind: host_pinned`, isolcpus 16-19) and an IGX Orin devkit (discrete RTX 6000 Ada → `kind: device` for real GPUDirect, isolcpus 9-11, PCIe `0005:03:00.x`): memory kind, `num_bufs`, core map, DPDK port BDFs, wire-loopback netdevs/RDMA devices, and the RoCE flow-control depth cap. Add a platform by dropping in a new `bench_platform_<name>.env`. The `daqiri_bench_socket_*_netns` configs are not templated (kernel sockets: `kind: host`, master 8, fixed netns IPs); only their per-pair cores differ, applied by the run script. Set `REPEATS=3` for publication-quality error bars.

## Formatting

`clang-format` is required for contributions (CONTRIBUTING.md):
Expand Down Expand Up @@ -112,6 +123,7 @@ The web docs live in `docs/` and are built with [MkDocs Material](https://squidf
- `docs/benchmarks/socket_benchmarking.md` — "Socket and RDMA Benchmarking" (TCP/UDP and RoCE/RDMA)
- `docs/benchmarks/raw_benchmarking.md` — "Raw Ethernet Benchmarking" (DPDK `raw_*` benches)
- `docs/benchmarks/performance-dgx-spark.md` — per-platform performance report for DGX Spark stream/protocol combinations (the long internal report lives outside the repo in `projects/daqiri-notes/`)
- `docs/benchmarks/performance-igx-orin.md` — the IGX Orin devkit counterpart (discrete RTX 6000 Ada, `kind: device` GPUDirect), produced by the same sweep scripts with `BENCH_PLATFORM=igx`
- `docs/stylesheets/extra.css` — custom theme overrides

**User-facing vocabulary:** the YAML schema uses `stream_type` (`raw`, `socket`, future `pcie`); for socket streams the transport is encoded in the endpoint URI scheme (`udp://`, `tcp://`, `roce://`) in `socket_config.local_addr`/`remote_addr`, **not** a separate `protocol` field. (`SocketProtocol` still exists internally, derived from the scheme.) **"Engine"** is the standard term for the specific library backing an implementation; it replaced the former "manager" and "backend" terms and is now used consistently across code (`src/engines/<name>/`, the `Engine` ABC, CMake `DAQIRI_ENGINE`), the API reference, tutorials, the landing page, and concept pages. The mapping: `stream_type: "raw"` is implemented by the `dpdk` engine; `stream_type: "socket"` with `udp://`/`tcp://` endpoints by the always-built `socket` engine; `stream_type: "socket"` with `roce://` endpoints by the `ibverbs` engine.
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ Reference material for the DAQIRI codebase:
- [C++ API Usage](https://nvidia.github.io/daqiri/api-reference/cpp/) — C++ RX/TX workflows, buffer lifecycle, file writing, utilities, and status codes
- [Python API Usage](https://nvidia.github.io/daqiri/api-reference/python/) — Python bindings, workflow examples, enums, config classes, and helper functions
- [Performance: DGX Spark](https://nvidia.github.io/daqiri/benchmarks/performance-dgx-spark/) — Per-platform throughput, drop, and utilization numbers for stream/protocol combinations on DGX Spark
- [Performance: IGX Orin](https://nvidia.github.io/daqiri/benchmarks/performance-igx-orin/) — The same sweep on an IGX Orin devkit (discrete RTX 6000 Ada, `kind: device` GPUDirect)
- [Contributing](CONTRIBUTING.md) — Contribution guidelines, coding standards, DCO sign-off

## Tutorials
Expand Down
9 changes: 8 additions & 1 deletion docs/benchmarks/performance-dgx-spark.md
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,13 @@ export DAQIRI_BUILD_DIR=./build
export LD_LIBRARY_PATH=/opt/daqiri/lib:${LD_LIBRARY_PATH:-}
```

The sweep scripts are platform-parameterized via `BENCH_PLATFORM` (default
`spark`); these Spark numbers use the default. The same scripts run on an IGX
Orin devkit with `BENCH_PLATFORM=igx`, which selects that platform's profile
(`examples/bench_platform_igx.env`): a discrete GPU uses `kind: device` for real
GPUDirect (vs Spark's `kind: host_pinned` over unified memory), with its own core
map and PCIe addresses. See the "Platform profiles" note in `AGENTS.md`.

The base container does not ship the network tools the setup scripts and RoCE
baseline depend on; install them first, or
`scripts/setup_spark_wire_loopback_netns.sh` fails with `ip: command not found`:
Expand Down Expand Up @@ -300,4 +307,4 @@ Each run writes `bench-results/<timestamp>-<backend>-<mode>/runs.csv`. See
per-transport details.

---
**Previous:** [Raw Ethernet Benchmarking](raw_benchmarking.md)
**Previous:** [Raw Ethernet Benchmarking](raw_benchmarking.md) &nbsp;|&nbsp; **Next:** [Performance: IGX Orin](performance-igx-orin.md)
Loading
Loading