Generated banner for Doca Bench
Generated logo for Doca Bench

Doca Bench

NVIDIAOfficialCreated by NVIDIA

  • Skill
  • Tool integration
  • Software development
  • Apache-2.0
  • Medium risk

From the author

Run `doca_bench` (DOCA 2.7.0 or newer) to measure throughput, bulk latency, precision latency, or maximum bandwidth for RDMA, Compress, AES-GCM, SHA, DMA, EC, Ethernet, Comch, or GPUNetIO on a host or BlueField Arm. Use it to discover enabled benchmark libraries, capture a reproducible command/version/device/environment baseline, compare stable runs against a declared tolerance, or diagnose configuration, device-binding, workload-precondition, and measurement failures. Trigger for requests such as measuring BlueField compression speed, NIC RDMA throughput, crypto latency, or a pre-upgrade baseline. Do not use for application end-to-end timing, custom benchmark code, DOCA installation, or binary patches.
— the description by NVIDIA

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

The doca-bench skill provides a structured approach for using the doca_bench binary to perform micro-benchmarking of various DOCA libraries. It focuses on capturing reproducible performance data, such as throughput and latency, for components like RDMA, Compress, and AES-GCM. The skill emphasizes a rigorous workflow involving configuration, smoke testing, and steady-state measurement to ensure results are reliable and comparable across different environments or versions.

What it does

  • Provides a framework for invoking the doca_bench CLI to measure library performance.
  • Supports benchmarking for RDMA, Compress, AES-GCM, SHA, DMA, EC, Ethernet, Comch, and GPUNetIO.
  • Guides users through a three-axis configuration model: library, workload shape, and measurement axis.
  • Implements a smoke-before-bulk workflow to validate configurations before running full benchmarks.
  • Offers an error taxonomy to diagnose configuration, device-binding, and workload-precondition failures.
  • Facilitates the capture of reproducible baselines including command, version, device, and environment metadata.

When to use it

  • When you need to measure the performance of a specific DOCA library on a supported device.
  • When you need to establish a reproducible performance baseline for regression testing.
  • When you need to diagnose why a benchmark run is failing or producing unexpected results.
  • When you need to determine which DOCA libraries are available and measurable on a specific installation.

Advantages

  • Ensures consistent and reproducible performance measurement practices.
  • Reduces hallucination by relying on documented CLI flags and installed version capabilities.
  • Provides a structured debug path for common benchmarking failures.
  • Promotes sound measurement practices like accounting for warm-up and steady-state periods.

Usage examples

“Measure the throughput of DOCA Compress on my BlueField-3.”
The agent will guide you through the three-axis configuration to set up the compression workload and execute the smoke-before-bulk flow to report the throughput.
“Is doca_sha enumerable on my current install?”
The agent will use the built-in query system to probe the installation and confirm if the SHA library is available for benchmarking.
“Why does my first-second throughput differ from my steady-state number?”
The agent will explain how to interpret measurement-soundness, specifically addressing warm-up periods versus steady-state performance.
“How do I capture a baseline for a firmware update?”
The agent will help you document the exact command, DOCA version, device, and environment to create a valid baseline for future regression testing.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/nvidia/doca-bench/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip doca-bench.zip -d .agents/skills

Documentation by NVIDIA

DOCA Bench (doca_bench)

Examples

  • "What does this DOCA library actually deliver on this device?" — this is in scope. Stay on doca_bench; do not write a custom microbenchmark.

  • "Which DOCA libraries can doca_bench drive on this install?" — probe the built-in query first; empty enumeration is a missing library, not a bench failure.

Instructions

Follow Loading order below. Open the tasks companion for configure / run / debug. Open the capabilities companion for modes and measurement soundness. Do not open every companion file.

Where to start: This is a tool skill for invoking doca_bench, the cross-library micro-benchmark harness. Open the tasks companion and start at ## configure for the three-axis decision (target library × workload shape × measurement axis), then ## run for the smoke-before-bulk flow. Open the capabilities companion when the question is what doca_bench can measure, which DOCA libraries it can drive, or how to interpret throughput / latency / op-rate output without fooling yourself on warm-up or steady-state. If DOCA is not installed yet, route to doca-setup/SKILL.md first; if the install version is < 2.7.0, doca_bench is not shipped on this host.

Example questions this skill answers well

The CLASSES of doca_bench questions this skill is built to answer, each with one worked example. The class is the load-bearing piece; the worked example is one instance.

  • "What does this DOCA library actually deliver on this device?" — worked example: "throughput of DOCA Compress on my BlueField-3". Answered by the three-axis configuration in the capabilities companion

    • the smoke-before-bulk flow in the tasks companion. The same shape answers "send-side throughput of DOCA RDMA" — doca_bench is cross-library, not single-library.

  • "Which DOCA libraries can doca_bench actually drive on this install?" — worked example: "is doca_sha enumerable on a granular-build install". Answered by the built-in query system surfaced in the capabilities companion

    • the tasks companion step 2 (probe-before-bench). Empty enumeration = library not installed, not bench failure.

  • "Is this number reliable, or did I miss the warm-up?" — worked example: "why does my first-second number differ from my steady-state number". Answered by the measurement-soundness overlay in the capabilities companion layer 5 + the tasks companion (the eval-loop overlay treats warm-up / steady-state / outliers as re-iteration triggers, not one-shot facts).

  • "Bench reports zero throughput / hangs at start / disagrees with the public docs." — worked example: "doca_bench shows zero ops for AES-GCM but doca_caps says the device supports it". Answered by the layered error taxonomy in the capabilities companion (config-syntax → device-binding → library-precondition → workload-precondition → measurement-soundness → version → cross-cutting) + the tasks companion.

  • "How do I capture a baseline I can later regression-test against?" — worked example: "snapshot decompress throughput on this BlueField + DOCA version before a firmware update". Answered by the CSV output + version-overlay rule in the tasks companion (capture command line + version + device + as-deployed environment alongside the numbers; quoting numbers without the four-tuple is the cross-version regression-hunt failure mode).

  • "doca_bench returns nothing for library X — what does that mean?" — worked example: "empty output for DOCA SHA". Answered by the empty-output interpretation rules in the tasks companion + the capabilities companion. Re-route through doca-caps/SKILL.md for the coarse per-device per-library capability ground truth, then back into bench once the capability is confirmed present.

Audience

This skill serves external operators, developers, and AI agents who need a reproducible, vendor-supported way to measure DOCA library performance on the user's actual install and device. Concretely:

  • An external developer choosing between DOCA libraries (e.g. COMPRESS vs SHA vs DMA throughput) before committing an application design.

  • A platform operator validating a tuning change (NUMA pinning, driver upgrade, firmware burn) by re-running a captured doca_bench baseline against the new state.

  • An SRE / performance engineer producing a "this is what the device delivers today" artifact that downstream consumers (capacity planning, regression bisection) can cite.

  • An AI agent answering "what throughput / latency should I expect from DOCA library X on device Y?" honestly — with a measured number, the command line that produced it, and the version + device + environment that scopes it — instead of guessing from datasheet headlines.

It is not for users debugging the doca_bench source code, and not a substitute for the live public DOCA Bench guide on docs.nvidia.com.

doca_bench is shipped as a tool (a single CLI binary plus a companion app for the remote half of remote-memory / RDMA / Eth scenarios), not a library you link against. The skill uses the same kind: tool three-file shape as the rest of the bundle so the agent's task-verb contract (configure / build / modify / run / test / debug) is uniform across libraries, services, and tools — even when individual verbs collapse to a routing stub for a shipped binary.

When to load this skill

Load this skill when the user is — or the agent needs to — invoke doca_bench on a real host with DOCA ≥ 2.7.0 installed (or inside the public NGC DOCA container with the equivalent version) to measure performance of a DOCA library. Concretely:

  • Picking which DOCA library to benchmark for a candidate workload (RDMA vs COMPRESS vs DMA, etc.).

  • Picking which measurement axis to ask for (throughput vs bulk latency vs precision latency) — the three modes the public guide documents; confirm the list with --help. The modes are not interchangeable.

  • Probing the install's granular-build state so the agent can honestly report "this library is not exposed on this install" instead of inventing a workload.

  • Capturing a documented baseline (command line + version + device

    • as-deployed environment + numbers) for later regression hunts.

  • Requiring the workload owner to predeclare acceptable variance and obtaining two consecutive runs within that tolerance before reporting a stable result; otherwise escalating the variance.

  • Diagnosing why a bench run reported zero / unstable / unexpected results (the error-taxonomy walk in the tasks companion).

Do not load this skill for general DOCA orientation, library API work, or installation. For those, use doca-public-knowledge-map/SKILL.md, the matching libs/<library> skill, or doca-setup/SKILL.md. Do not load it for application-level end-to-end benchmarking either — doca_bench measures the DOCA library surface, not the user's application above it.

What this skill provides

This is a thin loader. Substantive material lives in two companion files:

  • the capabilities companion — what doca_bench can measure (the cross-library scope, the three-axis configuration model, the documented operating modes, the warm-up / pipeline / multi-core concepts that constrain measurement soundness), the version overlay (doca-bench-specific facts on top of the canonical doca-version rules), the layered error taxonomy (config-syntax / device-binding / library-precondition / workload-precondition / measurement-soundness / version / cross-cutting), the observability surface (screen + CSV output, real-time stats, query system), and the safety posture (the public guide's "not for production" warning, the host vs BlueField execution rule, the companion-app attack surface).

  • the tasks companion — step-by-step workflows for the in-scope task verbs: configure (the three-axis decision + the probe-before-bench step), build (route to install — the binary is shipped, the companion app is shipped), modify (refuse — do not patch the bench binary; modify the bench invocation instead), run (the smoke-before-bulk flow), test (the eval loop — warm-up, steady-state, outliers, cross-version), debug (walk the error taxonomy layer by layer), plus a Deferred task verbs block routing out-of-scope questions and a Command appendix of doca_bench-specific invocation classes.

The skill assumes a host where DOCA ≥ 2.7.0 is already installed (or the public NGC DOCA container is running at an equivalent version) and the operator has whatever permissions the public guide requires for doca_bench to bind devices and allocate resources on their platform.

What this skill deliberately does not ship

This skill is agent guidance, not a samples or scripts bundle. To keep the boundary clean, it deliberately does not contain — and pull requests should not add:

  • Specific flag strings or scenario / metric / attribute names beyond what the public DOCA Bench guide documents. The flag surface evolves and is install-specific; the documented invocations + --help on the installed version are the authoritative answer. Inventing a flag is the most common hallucination failure for this skill.

  • Pre-baked example output or expected throughput numbers. Bench output is device-, version-, firmware-, NUMA-, and tuning-specific. A captured number pinned to one platform and one DOCA version misleads operators on a different platform / version.

  • Wrappers, parsers, or scripts in any language that consume doca_bench CSV or stdout. The output formats are documented; if a user wants to script against them, the right answer is "read the live guide, write the parser against your installed version".

  • A samples/ or reference/ subtree. This is a thin loader for a documented CLI; substantive material lives on the public page and in --help.

Loading order

  1. Read this skill first to confirm the user's question is in scope (the user actually wants to invoke doca_bench for measurement, not learn about a DOCA library in general).

  2. For what doca_bench measures, the three-axis model, the version overlay, the error taxonomy, observability surface, and safety posture, see the capabilities companion.

  3. For the documented invocations and the smoke-before-bulk workflow — configure, build, modify, run, test, debug — see the tasks companion.

  • doca-public-knowledge-map/SKILL.md — routing to the public DOCA Bench page on docs.nvidia.com and the rest of the public DOCA documentation set.

  • doca-version/SKILL.md — the canonical version-detection chain, four-way match rule, NGC container semantics, and headers-win-over-docs rule. The ## Version compatibility section in this skill is a thin overlay on top of doca-version; the body lives there.

  • doca-structured-tools-contract/SKILL.md — the bundle-wide contract for structured-output helper tools. When a site provides a helper that satisfies the detect-prefer-fallback-report loop, the ## Command appendix in the tasks companion uses it; otherwise it falls back to the manual commands.

  • doca-setup/SKILL.md — env preparation, install verification, hugepages, NUMA awareness, and the I have no install yet path with the public NGC DOCA container.

  • doca-debug/SKILL.md — the cross-cutting debug ladder. Bench surfaces its own error taxonomy in the capabilities companion; when the cause turns out to be below DOCA (driver, firmware, NUMA), the bench taxonomy hands off to doca-debug.

  • doca-caps/SKILL.md — the sibling DOCA tool for the coarse per-device per-library capability snapshot. Bench probes capability at finer grain via its own query system; doca_caps is the cheaper first step to confirm the device is even visible to DOCA.

  • The matching libs/<library> skill — e.g. doca-comch/SKILL.md, doca-compress/SKILL.md — for the workload-side preconditions, capability-query rules, and error-taxonomy overlays of the library under test. Bench drives the library; the library skill explains what "healthy" means for it.

Files

CAPABILITIES.md

DOCA Bench — Capabilities

Where to start: doca_bench is a single CLI binary (plus a companion app for the remote half of remote-memory / RDMA / Eth scenarios); the pattern overview below names the recurring doca_bench-class questions. Pick the pattern first, then drill into the H2 that owns the substance. For the how of executing each pattern, jump to TASKS.md.

This file is loaded by SKILL.md. It documents what doca_bench is, what it can measure across DOCA libraries, what versions it ships in, what its layered error and observability surfaces look like, and the safety posture the public guide stakes out (notably the "not for production deployments" warning on the companion-app channel). For step-by-step invocations and the smoke-before-bulk workflow, see TASKS.md.

Pattern overview

Every doca_bench-class question this skill teaches resolves into one of SIX patterns. The patterns are CLASSES — they apply across every DOCA library bench can drive, not just one.

doca_bench patternClass shapeWhere the substance lives
1. Pick the target libraryCross-library — bench can drive AES-GCM, Comch, Compress, DMA, EC, Eth, RDMA, SHA, GPUNetIO. Picking the target library is axis 1 of the three-axis configuration.## Capabilities and modes cross-library table + TASKS.md ## configure step 1
2. Pick the workload shapeThe pipeline-of-steps model is axis 2 — what operation is the device being asked to do on each iteration (e.g. compress vs decompress, send vs receive, encrypt vs decrypt), with the data provider, batching, and remote-memory choices that go with it.## Capabilities and modes workload-shape rules + TASKS.md ## configure step 3
3. Pick the measurement axisThroughput vs bulk-latency vs precision-latency is axis 3 — the public guide documents three modes (throughput, bulk-latency, precision-latency); confirm the list with --help. The public guide documents the modes as not interchangeable; a single number reported without naming the mode is ambiguous and the agent must surface that.## Capabilities and modes measurement-axis table + TASKS.md ## configure step 4
4. Smoke-before-bulkConfirm the bench can talk to the target device with a trivial workload before a long run; predeclare the workload's acceptable run-to-run tolerance, then require two consecutive runs within it before calling the result stableTASKS.md ## configure tolerance step + TASKS.md ## run smoke flow + TASKS.md ## test eval-loop overlay
5. Diagnose a bench failureWalk the layered error taxonomy in ## Error taxonomy — config-syntax / device-binding / library-precondition / workload-precondition / measurement-soundness / version / cross-cutting — instead of guessing at causes from a stack trace.## Error taxonomy + TASKS.md ## debug
6. Interpret a bench numberA bench number is only meaningful with the (command line + DOCA version + device + as-deployed environment) four-tuple. Quoting one without the other three is the cross-version regression-hunt failure mode.## Observability + TASKS.md ## test baseline-capture rule

Two cross-cutting rules that apply to every pattern above:

  • doca_bench is cross-library, not single-library. Recommendations that frame it as "the doca_rdma benchmarker" or "the doca_compress benchmarker" are categorically wrong; bench is the harness, the library is the unit under test. An agent picking one DOCA library and never naming the others is silently narrowing the answer.

  • Warm-up is part of the measurement, not part of the bug. The public guide documents a warm-up period (a non-zero number of jobs run through the pipeline before measurement starts). Treating a first-iteration number as steady-state, or stripping the warm-up to "get a faster answer", is the canonical measurement-soundness failure mode and the reason the bench ships the concept in the first place.

Capabilities and modes

doca_bench is shipped as a single CLI binary at /opt/mellanox/doca/tools/doca_bench on every DOCA install (host or BlueField Arm) since DOCA 2.7.0, plus a separate companion app that is part of the same install and provides the remote half of remote-memory / RDMA / Eth scenarios. The two halves communicate over an out-of-band channel (TCP/IP sockets or a DOCA Comch channel per the public guide). There is no daemon, no library to link against, and no programmatic API for the harness itself — the entire interaction model is configure the invocation, run the binary, read the printed and/or CSV output.

Three-axis configuration model — the load-bearing concept. Every doca_bench invocation commits to a point in this space; omitting any axis produces an ambiguous result.

AxisWhat it picksWhy the agent must name it
1. Target libraryWhich DOCA library is the unit under test (AES-GCM / Comch / Compress / DMA / EC / Eth / RDMA / SHA / GPUNetIO per the public guide's documented surface).The cross-library scope is the bench's defining feature; an answer that picks one library and never names the others has silently narrowed the bench to a single-library tool.
2. Workload shapeThe pipeline-of-steps the device runs each iteration — direction (e.g. send vs receive for RDMA / Eth, encrypt vs decrypt for AES-GCM, compress vs decompress for COMPRESS), the data provider (file / file-set / random-data per the public guide), batching, and whether remote-memory input / output is in play.Two runs against the same library can report wildly different numbers if the workload shape differs; quoting "DOCA Compress throughput" without naming compress-vs-decompress, the data provider, and the buffer sizing is ambiguous.
3. Measurement axisThroughput vs bulk-latency vs precision-latency per the operating modes (the public guide documents three: throughput, bulk-latency, precision-latency; confirm the list with --help).The modes are explicitly not interchangeable — precision-latency disables batching, bulk-latency uses bucketing, throughput maximizes pipeline occupancy. Comparing a precision-latency number to a throughput-mode number is the cross-mode apples-to-oranges failure.

Cross-library scope — what bench can drive. The public DOCA Bench guide enumerates the supported DOCA libraries explicitly; the bench's own built-in query system reports which subset is actually installed and exposed on the running host (the "granular build support" model). The library set on any given install is the intersection of "documented by bench" and "installed by this DOCA package selection" — the agent must probe, not assume.

GPUNetIO benchmarks — extra prerequisites. When the target is GPUNetIO (task submission and processing offloaded to a GPU), the DOCA Bench guide lists three requirements beyond doca_bench itself: DOCA GPUNetIO, the DOCA Bench Extension package (it installs libdoca_bench_cuda_impl), and the NVIDIA GDRCopy library, with GDRCOPY_PATH_L set. Documented limits: both doca_bench and doca_bench_companion run as root, only throughput testing is supported (duration by time, job count or byte limit), one CPU core, and no multi-step tests. GPU device capabilities are queried with doca_bench --gpu <pci-addr> --query device-capabilities. A DOCA_ERROR_NOT_SUPPORTED when GPU acceleration initializes is a known issue keyed to libdoca_bench_cuda_impl — check the release notes before debugging the workload.

Pipeline of steps — the workload primitive. Bench expresses a workload as a pipeline of steps, where each step is a documented operation on a DOCA library (e.g. an Ethernet receive, a SHA hash, a compress). The public guide reports that DOCA currently supports running a single pipeline at a time per invocation. Multi-step pipelines (e.g. receive → decompress → hash) are explicitly in scope; multi-pipeline-per-invocation is out of scope and the agent must not propose it.

Multi-core / multi-thread scaling. Bench creates execution threads with CPU affinities the operator picks (the public guide documents --core-mask, --core-list, --core-count, --threads-per-core as the family — exact flag names should be re-confirmed against --help on the installed version). Each thread independently runs the configured pipeline against its own jobs pool. The number of cores / threads and their NUMA placement is part of axis 2 (workload shape) for any number a later run is going to be compared against.

Operating modes. The public guide documents three modes (throughput, bulk-latency, precision-latency); confirm the full list on the installed binary with --help:

ModeWhat it optimizes forWhat it sacrifices
throughput (default)Maximum pipeline occupancy and aggregate bandwidth / op-ratePer-job latency precision; results are aggregate, not per-job
bulk-latencyA balance — submits batches, measures the time from first-submit to last-complete per batch, uses bucketing to report latency distributionPer-job precision; latency is per-batch + bucketed, not per-job
precision-latencyPer-job latency precision (min / max / median / percentiles) by submitting one job at a timeThroughput; the pipeline is deliberately serialized and capacity is wasted by design

Built-in query system. Bench ships a documented query surface that reports which DOCA libraries are installed on the running host and the supported sweep attributes. The agent treats the query output as the install-side ground truth for "is library X benchable on this box"; absence in the query output is the canonical "granular build does not include X" answer.

Companion app. Remote-memory / RDMA / Eth scenarios require the companion app on the far side, communicating with the bench host over the documented out-of-band channel (TCP/IP sockets or DOCA Comch). The agent's rule for remote scenarios: a companion app is not optional — bench will not synthesize the remote half on its own.

Version compatibility

For the canonical DOCA version-detection chain, the four-way match rule, NGC container semantics, and the headers-win-over-docs rule, see doca-version/SKILL.md. The body lives there; this skill does not duplicate it.

The doca_bench-specific overlay is:

  • doca_bench is available since DOCA 2.7.0 per the public DOCA Bench guide's prerequisites section. On older installs the binary is not present; the right answer for "I can't find doca_bench" is to confirm the installed version per doca-version TASKS.md ## configure (doca-version/TASKS.md#configure) and, if < 2.7.0, route to doca-setup/SKILL.md for an upgrade rather than recommending alternative tools.

  • Granular build means the available library set is install-specific. The public guide documents granular build support — bench probes the install and only exposes libraries that are actually present. A flag / scenario reachable on one install can be silently absent on another even at the same DOCA version. The agent's rule: re-run the built-in query per TASKS.md ## configure step 2 before quoting which libraries are benchable.

  • Companion app version must match the bench version. Bench and the companion app are shipped together; mixing a bench binary from one DOCA version with a companion app from another is unsupported and falls into the partial-install layer of doca-version CAPABILITIES.md ## Version compatibility (doca-version/CAPABILITIES.md#version-compatibility).

  • Output format stability is not contractually frozen. The documented operating modes are stable; the exact textual layout of stdout, the CSV column order, and the screen-mode histogram rendering can shift across releases. Agents that need to consume bench output programmatically should prefer the structured helper per doca-structured-tools-contract/SKILL.md#schemas when present and re-verify the textual layout against the user's installed version when absent.

  • Per-platform support matrix per the public guide. The documented BlueField generation support varies per library (e.g. some library operations are documented for BlueField-3 but not BlueField-2). Do not copy a library-availability claim from one BlueField generation to another; re-read the public matrix per doca-public-knowledge-map ## DOCA tools (doca-public-knowledge-map/SKILL.md#doca-tools).

Error taxonomy

doca_bench's error surface is broader than doca_caps because the tool does configure devices, allocate buffers, drive hardware, and produce measured numbers — each of which has its own failure mode. The error layers the agent should distinguish, in escalating order:

  1. Config-syntax. The invocation itself does not parse: unknown flag, malformed value (e.g. a unit suffix bench does not accept), missing required argument for the chosen mode, conflicting flags. Cause: the operator wrote a flag string that does not exist in --help on the installed version (often a flag taken from prose / blog / older release). Routing: re-read --help on the installed binary, and the public DOCA Bench guide via doca-public-knowledge-map ## DOCA tools (doca-public-knowledge-map/SKILL.md#doca-tools); do not guess.

  2. Device-binding. Invocation parses; bench cannot bind the target device. Cause: device PCIe address / IB name / interface name does not exist on this host, NUMA placement of the chosen cores is wrong, or the underlying driver stack (mlx5_core, IB stack, etc.) is not loaded. Routing: first verify the device is visible to DOCA at all via doca-caps ## run (doca-caps/TASKS.md#run) and doca-setup ## test (doca-setup/TASKS.md#test); only re-attempt the bench invocation once the device is on the capability snapshot.

  3. Library-precondition. Device bound; bench refuses to exercise the requested DOCA library on this install. Cause: the granular-build setup did not include the library (its pkg-config module is missing, its samples are missing); the library is present but the device does not support the requested operation per its capability surface; the library is present but the BlueField generation is outside the public guide's per-platform support matrix. Routing: bench's own query system per TASKS.md ## configure step 2 + the per-library skill (e.g. doca-comch/SKILL.md, doca-compress/SKILL.md) for the library-internal capability rules.

  4. Workload-precondition. Library exercisable; the workload shape is invalid for the library. Cause: a data provider the library does not accept (e.g. random-data fed to a decompression scenario that needs structured input), a buffer / job sizing the device does not support, a remote- memory choice without the companion app on the far side, a pipeline-of-steps the library cannot chain. Routing: re-walk axis 2 (workload shape) of the three-axis model in ## Capabilities and modes; bench will not silently substitute a workload, and the agent must not either.

  5. Measurement-soundness. The run completes and reports numbers, but the numbers are unsound and must not be quoted as-is. Three sub-layers, all documented by the public guide:

    • Warm-up not applied / too short. Reported numbers include cold-cache / cold-pipeline iterations and are lower than steady-state. Fix: confirm the warm-up configuration matches the public guide's documented default and is appropriate for the chosen library / mode.

    • Steady-state not reached. Run duration / job count is too small for the pipeline to settle, and the reported number is in the transient region. Fix: lengthen the run via the documented duration / job-count limits and re-iterate per TASKS.md ## test.

    • Outliers / distribution unreported. A single throughput average hides a heavy tail; a precision- latency mean hides a 99.99-percentile spike that the consumer workload will actually feel. Fix: report the distribution (the bulk-latency histogram or the precision-latency percentile breakdown) alongside any single number.

  6. Version. Cross-cutting partial-install / mixed-version layer per doca-version CAPABILITIES.md ## Version compatibility (doca-version/CAPABILITIES.md#version-compatibility). Symptoms: bench binary version disagrees with doca_caps --version or pkg-config --modversion doca-common, companion-app version disagrees with the bench-host version, public guide version the operator is reading disagrees with the install. Routing: walk doca-version TASKS.md ## debug (doca-version/TASKS.md#debug) before any further investigation.

  7. Cross-cutting. The cause is below DOCA — driver / firmware / NUMA / hugepages / OS. Symptoms that do not fit layers 1-6 (e.g. throughput numbers that fall sharply only on one NUMA node, latency spikes correlated with kernel- thread scheduling, throughput tied to firmware version independent of DOCA version). Routing: hand off to doca-debug ## debug (doca-debug/SKILL.md) and doca-setup ## debug (doca-setup/TASKS.md#debug); the bench surface has reached its limit.

doca_bench does not itself participate in the cross-library DOCA_ERROR_* taxonomy that DOCA libraries return through their C API; bench is a CLI driving libraries, not a library call. For the cross-library DOCA_ERROR_* taxonomy and the program-side debug order, see doca-programming-guide CAPABILITIES.md ## Error taxonomy (doca-programming-guide/CAPABILITIES.md#error-taxonomy).

Observability

doca_bench's observability surface is the measurement output itself, plus the built-in query system. Specifically:

  • Stdout summary. Every run prints an aggregate summary on stdout per the public guide — the documented examples include duration, enqueued / dequeued job counts, throughput / ingress / egress rates for throughput mode, and a histogram + bucket breakdown for bulk-latency mode, and min / max / median / mean / percentile rows for precision-latency mode. The exact textual layout is install-specific; re-verify against the user's run.

  • CSV output. The public guide documents a CSV output path with options to append, separate dynamic values, and emit environment information alongside the numbers. CSV is the documented machine-readable surface — the agent's rule for any baseline that will be re-read by a later run: capture CSV, not just stdout.

  • Real-time stats interval. The public guide documents a real-time stats interval so the operator can see the run progress without waiting for completion. Useful when diagnosing whether a long run has reached steady state.

  • Query subsystem. The bench's Queries section in the public guide documents a built-in mechanism for reporting device capabilities and supported sweep attributes. This is the install-side ground truth for "can this run even attempt library X" before committing to a full run.

  • Reported invocation echo. Per the public guide, bench echoes the full set of configured values at the start of the run so a captured log self-documents the (command line + effective defaults) the numbers belong to. The agent must preserve this echo in any captured baseline; it is the "what command produced this number" leg of the four-tuple in ## Pattern overview pattern 6.

For the cross-cutting env-side observability primitives (representor enumeration, devlink dev show, mlxconfig) see doca-setup CAPABILITIES.md ## Observability (doca-setup/CAPABILITIES.md#observability). For the program-side observability surface (DOCA log levels, DOCA_LOG_LEVEL, --sdk-log-level) see doca-programming-guide CAPABILITIES.md ## Observability (doca-programming-guide/CAPABILITIES.md#observability).

Safety policy

Overlay on the bundle-wide hardware-safety meta-policy. The rules below are this skill's per-artifact overlay on the cross-cutting rules in doca-hardware-safety CAPABILITIES.md ## Safety policy (doca-hardware-safety/CAPABILITIES.md#safety-policy) (specifically ### Per-artifact overlay pattern (doca-hardware-safety/CAPABILITIES.md#per-artifact-overlay-pattern)). When the two layers disagree, the stricter wins; when either layer says STOP, the agent stops.

doca_bench is a measurement tool and a more powerful surface than doca_caps; it does allocate buffers, bind devices, and drive hardware, including remote-memory operations over an out-of-band channel. The safety rules:

  • Not for production deployments. The public guide carries an explicit warning that the bench is not intended for production deployment, and that the companion-app out-of-band channel can carry sensitive information. The agent must surface this warning whenever the user proposes running bench on a host that also serves production traffic, and must not recommend running the companion app over an untrusted network segment without the public guide's secure-channel guidance.

  • Smoke-before-bulk; never run a long sweep first. A swept run on the wrong device, wrong workload, or wrong mode consumes hours and produces unusable data. The agent's rule is the TASKS.md ## run smoke step (trivial workload, short duration) before any sweep or long run.

  • Quote the (command line + version + device + environment) four-tuple, not just the number. A bench number quoted without the four-tuple is unreplicable and unfalsifiable. This rule applies to every output of this skill — the most common downstream misuse of bench is quoting a screenshot from one platform as if it described another.

  • Predeclare tolerance; require two consecutive stable runs. The workload owner supplies an acceptable absolute or percentage delta before measurement. A stable result requires two consecutive runs within that tolerance. If the bounded re-run cannot meet it, report the variance and escalate; do not invent or relax a tolerance after seeing the numbers.

  • Do not invent flags, scenario names, attribute names, or metric names. The documented invocations and the installed --help are the authoritative surface. Prose-derived flags are the most common hallucination failure for this skill; see the cross-cutting rule in TASKS.md ## Command appendix.

  • Host vs BlueField Arm execution rule. Per the public guide the binary is the same on both sides; the measured numbers differ because the environment differs. An agent comparing a host-side number to a BlueField-Arm-side number without naming where each ran is making the cross-platform apples-to-oranges mistake.

Public-source pointer

The single canonical public source for doca_bench is the DOCA Bench page on docs.nvidia.com, reachable through doca-public-knowledge-map ## DOCA tools (doca-public-knowledge-map/SKILL.md#doca-tools). Do not invent flags, scenario names, attribute names, metric names, or supported library entries beyond what that page documents — and re-verify against --help on the user's installed binary, since granular-build support means the available surface is install-specific within the documented surface.

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

The author says: Requires DOCA SDK ≥ 2.7.0 installed at /opt/mellanox/doca on Linux (Ubuntu 22.04/24.04 or RHEL/SLES) with a BlueField DPU or ConnectX NIC attached and the `doca_bench` binary present at /opt/mellanox/doca/tools/doca_bench. Companion app must run on the far side for remote-memory / RDMA / Eth scenarios; host and BlueField-Arm execution both supported. The validation steps require a live DOCA install.

Security

What our scanner noticed· Medium risk

  • Large base64-encoded blobs

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
NVIDIA
Publisher
NVIDIA (Official)
Source
NVIDIA/skills · skills/doca-bench · commit fce3cca
Licence
Apache License 2.0 (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE-APACHE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by NVIDIA.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download doca-bench.zip