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://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

TASKS.md

DOCA Bench — Tasks

Where to start: The verbs that carry real workflow content are ## configure, ## run, ## test, and ## debug. The other two substantive verbs (build, modify) carry routing stubs because doca_bench is a shipped binary, not a source artifact the user compiles or patches. The ## test verb is an iterative loop, not a one-shot pass — see the eval-loop overlay in ## test below.

This file is loaded by SKILL.md after CAPABILITIES.md. It walks the agent through the six task verbs every artifact in this bundle exposes (configure / build / modify / run / test / debug), then explicitly defers task verbs that do not belong here.

For doca_bench, the verbs that carry real workflow content are configure, run, test, and debug. The other two verbs exist as anchors because the agent's task-verb contract is uniform across libraries, services, and tools — and each one carries a meaningful routing stub that names where the user's question really belongs.

configure

The bench's configuration is the invocation: there is no separate config file, no daemon, no env knob the public guide documents as required (DOCA-wide env vars like DOCA_LOG_LEVEL still apply, but they are owned by doca-programming-guide CAPABILITIES.md ## Observability (doca-programming-guide/CAPABILITIES.md#observability), not by bench). What the agent has to configure is the three-axis decision documented in CAPABILITIES.md ## Capabilities and modes.

Steps the agent should walk the user through, in order:

  1. Confirm DOCA ≥ 2.7.0 is installed and the binary is present at /opt/mellanox/doca/tools/doca_bench. If not, route to doca-version TASKS.md ## configure (doca-version/TASKS.md#configure) for the detection chain and doca-setup ## install (doca-setup/TASKS.md#configure) for the upgrade path. Do not propose alternative tools; on < 2.7.0 installs the bench is genuinely not there.

  2. Probe the install's granular build first. Use the bench's built-in query system (per CAPABILITIES.md ## Observability) to enumerate which DOCA libraries are actually exposed on this install before committing to a target. An empty enumeration for the user's target library means the granular build did not include it — route to doca-setup ## install (doca-setup/TASKS.md#configure) for the install profile, not to a bench invocation.

  3. Axis 1 — pick the target library. Per the cross-library table in CAPABILITIES.md ## Capabilities and modes, commit explicitly to which DOCA library is the unit under test (e.g. COMPRESS, RDMA, AES-GCM, SHA, DMA, EC, Eth, Comch, GPUNetIO). An answer that picks one without naming the alternatives has silently narrowed the bench to a single-library tool; surface that to the user. For GPUNetIO, confirm the GPU prerequisites first (DOCA Bench Extension package, GDRCopy with GDRCOPY_PATH_L, root, throughput only) per CAPABILITIES.md ## Capabilities and modes.

  4. Axis 2 — pick the workload shape. Direction (e.g. send vs receive, encrypt vs decrypt, compress vs decompress), data provider (file / file-set / random-data per the public guide), buffer / job sizing, batching, NUMA placement of the chosen cores, and whether remote-memory input / output is in play (which pulls in the companion app — see step 6). Re-cross-check against the per-platform support matrix in CAPABILITIES.md ## Version compatibility; not every workload shape is documented for every BlueField generation.

  5. Axis 3 — pick the measurement mode. Throughput vs bulk-latency vs precision-latency — the three modes the public guide documents; confirm the list with --help. Quote back to the user why you picked the mode — "throughput because the user asked about aggregate op-rate", "precision-latency because the user asked about per-job tail latency" — so the user can challenge the framing if it does not match intent. The modes are not interchangeable; see CAPABILITIES.md ## Capabilities and modes for the trade-off table.

  6. If the workload is remote (RDMA, Eth, remote-memory), plan the companion app deployment. The companion app is shipped with bench but runs on the far side, with the out-of-band channel between the two halves. Surface the public guide's "not for production" warning per CAPABILITIES.md ## Safety policy and confirm a non-production segment is available.

  7. Predeclare workload tolerance. Before the first measurement, record the metric being judged and the acceptable run-to-run absolute or percentage delta for this workload. The operator or workload owner supplies this tolerance; the agent must not invent X% after seeing the results. No declared tolerance means the run can be captured as exploratory evidence but cannot be called stable.

For the canonical DOCA universal lifecycle that underlies program-side configuration (which doca_bench itself runs internally per library), see doca-programming-guide TASKS.md ## configure (doca-programming-guide/TASKS.md#configure). This skill is concerned with the operator-side configuration of the bench invocation, not the program-side lifecycle of the library under test.

build

doca_bench and its companion app are shipped pre-built as part of every DOCA install since 2.7.0 (/opt/mellanox/doca/tools/doca_bench). There is no source tree the external user is expected to compile, no build flags, no meson or make workflow for the bench itself.

Routing for nearby "build" questions:

  • "The binary isn't there — do I need to build it?" → no. Route to doca-setup ## install (doca-setup/TASKS.md#configure). The fix is to install (or re-install) DOCA at ≥ 2.7.0, or use the public NGC DOCA container per doca-setup ## no-install (doca-setup/TASKS.md#no-install) at an equivalent version.

  • "I want to build my own benchmark program against DOCA library X." → not a doca_bench question. Route to doca-programming-guide ## build (doca-programming-guide/TASKS.md#build) for the cross-library build pattern and the matching libs/<library> skill (e.g. doca-comch ## build (doca-comch/TASKS.md#build), doca-compress/SKILL.md) for the library-specific build overlay. The bench is the shipped harness; the user's bespoke harness is a different artifact.

  • "I want to extend the bench with a new scenario." → out of scope here; this skill is for external operators consuming the shipped bench, not for contributors extending it.

The ## What this skill deliberately does not ship block in SKILL.md explicitly forbids adding a build recipe or wrappers for doca_bench; revisit that policy before changing this section.

modify

Do not modify the shipped doca_bench binary. It is an NVIDIA-shipped CLI; there is no documented public way to change its behavior, output format, scenario set, or attribute surface, and none should be invented.

What the agent does modify, every time, is the bench invocation — the flags, the chosen library, the workload shape, the mode, the core / thread layout. That is the configuration loop in ## configure above and the iteration loop in ## test below; treat modify the invocation, not the binary as the operating mode.

Routing for nearby "modify" questions:

  • "The output format is inconvenient — can I change it?" → the documented surfaces are stdout, CSV, and the real-time stats interval per CAPABILITIES.md ## Observability. If those are insufficient, the right answer is "write a parser against the documented CSV format on your installed version" — not a binary patch — and even that scripting is out of scope per SKILL.md ## What this skill deliberately does not ship.

  • "Can I patch doca_bench to add scenario X?" → out of scope for external users; this skill is for consumers of the shipped tool, not contributors to it.

  • "I need a different measurement than doca_bench reports." → re-examine axis 3 (measurement mode) in ## configure first; the three documented modes cover aggregate throughput, bulk-latency distribution, and per-job precision latency (confirm the full list with --help). If the question is genuinely outside bench's surface (e.g. application-level end-to-end timing), route to doca-programming-guide/SKILL.md and the matching libs/<library> skill — the user's own program is the right place to measure end-to-end.

run

The smoke-before-bulk flow — every bench session goes through it, no exceptions. The full invocation surface lives in the public DOCA Bench guide; this section names the shape of the flow, not the verbatim command lines (per CAPABILITIES.md ## Safety policy "do not invent flags").

Do-not-invent guard (specific flag names). The public DOCA 3.5 DOCA Bench guide documents flags including --mode, --device, --pipeline-steps, --csv-output-file, and --query (device-capabilities | sweep-properties). Near-miss spellings such as --pipeline or --csv-output are not the documented names. Other documented flags include --core-mask / --core-list / --core-count, --threads-per-core, the --run-limit-* family, --sweep, and the rest of the --csv-* family. Confirm every name and value with doca_bench --help on the installed bench and use only the names that appear there. Any example invocation written in this skill MUST keep tokens like <flag-from-help> or <chosen-mode-from-help> as placeholders for the per-install-variable inventory.

  1. Confirm the binary, version, and granular-build inventory. Per ## configure steps 1-2; without this the next four steps will burn the operator's time on a configuration that the install does not support.

  2. Smoke run — trivial workload, short duration. Pick the smallest defensible workload for the chosen target library and mode (e.g. a tiny job count, a short time limit, the minimum data provider that the library will accept). The goal is "bench can bind the device, start the pipeline, and emit numbers", not a usable measurement. The public guide documents the duration / job-count limit families (--run-limit-* per the user's installed --help); use the smallest defensible value of one of them.

  3. Read the echoed invocation. Per CAPABILITIES.md ## Observability the bench prints the full set of configured values at the start; this is the user's chance to catch a defaulted value that does not match intent (e.g. wrong NUMA node, wrong data provider, warm-up turned off) before the run completes.

  4. Inspect the summary and reject silently-bad runs. Exit 0 + a number is not enough — verify the number is in a defensible order of magnitude for the library / device, verify warm-up actually happened, verify the mode in the summary matches the requested mode. If anything looks off, loop back to ## debug before sinking time into a longer run.

  5. Plan the bulk / swept run only after the smoke is green and the workload tolerance from ## configure step 7 is recorded. The public guide documents the --sweep family for parameter sweeps; the agent's rule for sweep planning is enumerate the swept dimension explicitly, estimate the total run time, and confirm the operator is OK with the wall-clock cost before committing.

  6. For remote scenarios, start the companion app first. The companion app must be listening before the bench host tries to drive it; per CAPABILITIES.md ## Capabilities and modes the companion app is part of the install, not optional.

When recording the run for downstream consumers (the baseline pattern), write down: the DOCA version, the host platform (host vs BlueField Arm, OS, kernel, firmware), the exact command line used (the bench's own echo line covers this), the device target (PCIe address / IB name / interface name), and the full unredacted summary + CSV. The downstream ## test and ## debug workflows depend on those five fields.

test

doca_bench is a measurement tool, so its ## test verb is about testing the measurement — i.e. confirming the numbers are sound and reproducible — not unit-testing the bench itself.

## test is an iterative loop, not a one-shot pass. A bench run that completes is not the same as a bench run that produced a defensible number; each iteration tightens one axis of measurement soundness (warm-up, steady-state, outliers, NUMA placement, cross-run reproducibility, cross-version delta) and loops back to ## run.

The eval-loop overlay (rows apply to every bench run, not just one library × mode):

Iteration triggerWhat it looks likeWhat changes next iteration
Smoke completed; number is far below datasheet headlineCould be cold pipeline, wrong workload shape, wrong NUMA, or actually-right for this install. Do not assume datasheet first.Confirm warm-up applied per CAPABILITIES.md ## Error taxonomy layer 5; re-check axis 2 (workload shape) in ## configure step 4; only then question hardware.
Throughput-mode result exceeds the workload's predeclared tolerance across re-runsSteady-state not reached; outlier-dominated runLengthen the run via the documented duration / job-count limit and re-run. Do not substitute an after-the-fact tolerance.
Precision-latency mean looks good; 99.99th percentile is hugeTail-latency story is the actual answer; the mean is misleadingQuote the percentile breakdown, not the mean, per CAPABILITIES.md ## Observability the precision-latency mode's reported distribution.
Same invocation produces different numbers on two hosts at the same DOCA versionNUMA / firmware / driver delta below DOCAWalk axis 2 environment (cores / threads / NUMA) and the version layer per doca-version TASKS.md ## test (doca-version/TASKS.md#test) before blaming bench.
Same invocation produces different numbers on the same host across DOCA versionsThis is a regression signal — provided both four-tuples are capturedCross-link the two baselines, name the changed fields, route to doca-version TASKS.md ## debug (doca-version/TASKS.md#debug) for the version-delta diagnosis.
--sweep of a parameter shows a discontinuityCould be a real performance cliff (capacity / cache / queue depth) or a measurement artefact at the swept valueRe-run the boundary points without the sweep to confirm; if real, that is the answer the user came for.
Bench reports zero / hung after extended waitDevice-binding or library-precondition layer; not a measurement-soundness issueStop iterating on the workload shape; jump to ## debug layers 2-3.

The agent's rule: every change to the invocation re-opens the loop. Re-running with a tweaked flag and quoting the new number without re-checking warm-up / steady-state / outliers / distribution is exactly the failure mode this loop replaces.

Baseline-capture rule. When the goal of the bench session is a baseline (vs an ad-hoc question), the captured artifact must include the four-tuple per ## Pattern overview pattern 6 — command line + DOCA version + device target + as-deployed environment (firmware, kernel, NUMA, hugepages) — alongside the summary and CSV. Without all four, the baseline cannot be regression-tested later; quoting a number without the four-tuple is the cross-version regression-hunt failure mode.

Loop termination requires two consecutive runs within the predeclared workload tolerance for the selected metric. Record both values and the tolerance. If two consecutive stable runs cannot be obtained after the bounded re-run above, do not report a stable benchmark; escalate the captured four-tuples and variance to doca-debug ## debug (doca-debug/SKILL.md) or the workload owner. Escalate cross-version or cross-host comparisons to doca-version TASKS.md ## test (doca-version/TASKS.md#test) or doca-debug ## debug (doca-debug/SKILL.md) with the captured four-tuples as evidence.

This skill does not ship a "test fixture" or pre-recorded expected output. The expected output is install-, device-, firmware-, and tuning-specific; pinning one would mislead operators on a different platform / version. See SKILL.md ## What this skill deliberately does not ship.

debug

When doca_bench fails to start, fails to produce numbers, or produces numbers that do not look defensible, walk the CAPABILITIES.md ## Error taxonomy layers in order. The shape of the diagnosis:

  1. Config-syntax. Invocation does not parse. Confirm the flag exists in --help on the installed binary (not a blog or older release). Confirm units / values are in the documented form. Confirm the flag is not mutually exclusive with another in the same invocation. Route to the public DOCA Bench guide via doca-public-knowledge-map ## DOCA tools (doca-public-knowledge-map/SKILL.md#doca-tools); do not infer from generic CLI knowledge.

  2. Device-binding. Invocation parses; bench cannot bind the target device. Confirm the device is visible to DOCA at all via doca-caps ## run (doca-caps/TASKS.md#run); confirm the driver stack is loaded (doca-setup ## debug (doca-setup/TASKS.md#debug) layer Driver); confirm the chosen NUMA / core layout matches the device's actual NUMA node. Re-attempt the bench invocation only after the device is on the capability snapshot.

  3. Library-precondition. Device bound; bench refuses to exercise the requested DOCA library. Re-run the bench query system per ## configure step 2 to confirm the library is actually exposed; re-cross-check the per-platform support matrix per CAPABILITIES.md ## Version compatibility; walk the per-library skill for library-internal capability rules (e.g. doca-comch CAPABILITIES.md ## Capabilities and modes (doca-comch/CAPABILITIES.md#capabilities-and-modes), doca-compress/SKILL.md for compress-specific capability boundaries).

  4. Workload-precondition. Library exercisable; the workload shape is invalid. Re-walk axis 2 of the three-axis model per ## configure step 4; the most common failure here is feeding random-data to a structured workload (e.g. decompression / decryption) that needs valid input, or sizing buffers below / above what the library accepts.

  5. Measurement-soundness. The run completes and reports numbers, but the numbers are unsound. Walk the three sub-layers per CAPABILITIES.md ## Error taxonomy layer 5 — warm-up applied? steady-state reached? distribution reported alongside the single number? — before quoting any number.

  6. Version. Cross-cutting partial-install / mixed-version. Walk doca-version TASKS.md ## debug (doca-version/TASKS.md#debug) end-to-end; common bench-specific symptom is a companion-app version that does not match the bench host version.

  7. Cross-cutting. Cause is below DOCA. Hand off to doca-debug ## debug (doca-debug/SKILL.md) for the cross-cutting debug ladder and doca-setup ## debug (doca-setup/TASKS.md#debug) for the env-side layers (driver / firmware / hugepages / NUMA).

In every case: quote what the bench reported. Do not paraphrase the summary, do not reorder fields, do not "summarize" a histogram into a single number. The bench is in the loop precisely to break the agent out of the inference-from-datasheet trap.

Deferred task verbs

The four verbs below are not doca_bench work and should be routed out before the agent does any of them under this skill's name.

  • install ⇒ doca-setup ## install (doca-setup/TASKS.md#configure) (and ## no-install (doca-setup/TASKS.md#no-install) for the public NGC DOCA container path). The bench is shipped by the install at ≥ 2.7.0; this skill does not own the install workflow.

  • build a custom DOCA benchmark or application ⇒ doca-programming-guide ## build (doca-programming-guide/TASKS.md#build) for the cross-library pattern, plus the matching libs/<library> skill for the library-specific build details. doca_bench is the shipped harness; a bespoke harness is a different artifact.

  • library-internal benchmarking (e.g. an application-level end-to-end measurement, or a library-internal performance counter the bench does not expose) ⇒ the matching libs/<library> skill plus doca-programming-guide/SKILL.md. Bench is a uniform harness; library-internal performance questions go to the library.

  • streaming telemetry / live metrics from a production workload ⇒ not a bench feature, and bench is explicitly not for production per CAPABILITIES.md ## Safety policy. The DOCA Telemetry Service (DTS) is the documented telemetry surface; routing belongs in doca-public-knowledge-map ## DOCA services (doca-public-knowledge-map/SKILL.md#doca-services).

Command appendix

doca_bench-specific invocation classes the verbs above reach for. Every row is a CLASS — the agent must not invent flags beyond --help on the installed binary and the public DOCA Bench guide. The five-class symmetry below is the load-bearing piece; one worked example per class is shown.

Infra-aware preamble (every row below). Per the bundle's detect → prefer → fall back → report contract documented in doca-structured-tools-contract ## The agent behavior contract (doca-structured-tools-contract/SKILL.md#the-agent-behavior-contract), the agent should:

  1. Probe for the matching structured helper FIRST (doca-env --json for version + devices + libraries + drivers + hugepages in one shot; doca-capability-snapshot for per-device capability flags; version-matrix.json for "available since" lookups — all per doca-structured-tools-contract ## Relationship to helper executables (doca-structured-tools-contract/SKILL.md#relationship-to-helper-executables)).

  2. If the probe succeeds, the structured tool's output is the authoritative answer and the agent SHOULD NOT also run the manual command in the row below. Report "using structured <tool>".

  3. If the probe fails, fall back to the manual command in the row. Report "falling back to manual chain".

  4. The schemas the structured tools emit are defined in doca-structured-tools-contract ## Schemas (doca-structured-tools-contract/SKILL.md#schemas); the version-handling semantics (four-way match, NGC, headers-win) are owned by doca-version/SKILL.md.

Purpose (class)Invocation (shape)Owning stepReads as healthy when …
Discover the documented flag surfacedoca_bench --help (and the public DOCA Bench guide for the long-form documentation)## configure step 1; ## debug layer 1Prints the documented flag inventory the agent uses as the only source of truth for flag names; the public guide is the secondary source.
Probe the granular-build inventoryThe bench's built-in query family for installed libraries + supported sweep attributes per CAPABILITIES.md ## Observability## configure step 2Reports the libraries this install actually exposes; absence of the target library is the canonical "granular build does not include X" answer.
Drive a single-library micro-benchmarkThe documented bench invocation for the chosen (target library × workload shape × measurement mode) — flag names re-confirmed against --help on the installed binary## run steps 2-4; ## test eval loopThe bench echoes the invocation, applies the documented warm-up, completes in the requested duration / job count, and prints a summary in the chosen mode's documented format.
Capture a CSV baseline alongside stdoutThe documented CSV-output family per CAPABILITIES.md ## Observability — --csv-* family on the installed --help## test baseline-capture ruleA CSV file is written, the stdout summary matches the CSV aggregate, and the captured four-tuple (command line + version + device + environment) accompanies the CSV.
Sweep a parameter across a planned rangeThe documented sweep family (--sweep per the public guide); the agent estimates total wall-clock cost before committing## run step 5The smoke run for the boundary values passed first; the sweep completes; the resulting series has no implausible discontinuities that disappear when re-running the boundary point without the sweep.
Drive a remote scenario with the companion appThe bench invocation paired with the companion app on the far side, communicating over the documented out-of-band channel## configure step 6; ## run step 6The companion app is up and reachable, the channel comes up, the bench drives it without the "not for production" warning being triggered on a production segment.

Three cross-cutting rules for this appendix:

  • Never invent a doca_bench flag, scenario name, attribute name, or metric name. --help on the installed binary and the public DOCA Bench guide are the joint contract; prose-derived flag strings are the most common hallucination failure for this skill.

  • Smoke before bulk. Every row above presumes the smoke row succeeded first; running a sweep or a long single-library run without the smoke is the canonical operator-time-waste failure mode.

  • Cross-link instead of duplicate. Cross-cutting commands (pkg-config --modversion, doca_caps --list-devs, dmesg, mlxconfig -d <bdf> q, numactl --hardware) live in doca-debug ## debug (doca-debug/SKILL.md) and doca-setup TASKS.md ## debug (doca-setup/TASKS.md#debug); this appendix names only doca_bench-specific invocation classes.

Cross-cutting

A few rules that apply across every verb in this file, restated here so they are visible at the point of action and not buried in SKILL.md:

  • The public DOCA Bench guide plus the installed --help are the joint source of truth. When they disagree (e.g. a flag landed in a release this skill was not written against), the installed --help wins for the user's actual run.

  • doca_bench does drive hardware and does allocate resources; smoke-before-bulk is mandatory, and re-running a long sweep "to confirm" without the smoke step is exactly the failure mode this skill is here to prevent.

  • Quote the four-tuple, not just the number. Command line

    • DOCA version + device target + as-deployed environment is the minimum unit a bench number is meaningful in. The agent must surface all four whenever reporting a number to the user.

  • This skill assumes a healthy DOCA install at ≥ 2.7.0 (or the public NGC DOCA container at an equivalent version). If the install is in doubt, route to doca-version TASKS.md ## configure (doca-version/TASKS.md#configure) and doca-setup/SKILL.md before running anything else here.

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 or NVIDIA.

Download ZIP

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