DOCA Bench Extension
Where to start: This is a tool skill for the extension /
plug-in framework that augments
doca-bench — NOT a workload-shape
skill on its own. Open TASKS.md and start at
## configure to commit to the three-axis
decision (workload class is genuinely outside doca-bench's
built-in modes × extension API surface fits × parent-tool
co-load is acceptable), then ## build for
how a custom extension is compiled and laid out, then
## run for how doca-bench discovers and
invokes the extension, then ## test for the
smoke-before-bulk loop the agent applies to every new
extension. Open CAPABILITIES.md when the
question is what an extension can do that built-in
doca-bench modes cannot, what the extension API surface
looks like in broad strokes (the DOCA_EXPERIMENTAL C entry
points the shipped reference exposes), how the
build / registration / discovery flow works, or how the
extension's lifetime is bounded by the parent doca-bench
invocation. If doca-bench itself is the question, route to
doca-bench. If the question is
"which built-in doca-bench mode do I pick?", that is also
doca-bench — extensions are the
exit ramp for workloads built-in modes do not cover.
Example questions this skill answers well
- "My workload class is
<X> — does doca-bench measure it
natively, or do I need an extension?" — the
extension-vs-built-in decision question. The agent walks
the user back to doca-bench's
built-in mode inventory FIRST and only routes to the
extension framework when no built-in mode applies.
- "I want to benchmark a CUDA / GPU-side workload that
drives DOCA GPUNetIO RX and TX queues. Where do I start?
Is there a reference extension I can copy?" — the agent
surfaces the shipped
doca_bench_cuda extension under
/opt/mellanox/doca/tools/bench_extension/doca_bench_cuda/ as the
reference exemplar and walks the operator through its
API surface and build shape.
- "How does
doca-bench actually discover and load my
custom extension at runtime? Is it a versioned shared
library? What does my entry-point need to look like?" —
the build / registration / discovery flow question. The
agent walks the Meson-built shared library shape, the
versioning, and the parent-tool's runtime discovery path
(which the agent does NOT invent from memory — the
shipped extension's meson.build and the public DOCA Bench
documentation on docs.nvidia.com are the source of
truth).
- "The API headers I have are marked
DOCA_EXPERIMENTAL.
What does that mean for my extension's stability across
DOCA releases? Am I going to have to rebuild it every
release?" — the experimental-surface and version
compatibility question.
- "Once I build my extension, what is the cheapest possible
smoke I can run before pointing my real workload at it?
How do I know
doca-bench actually loaded it, called
into it, and that the call returned the data the parent
tool expected?" — the smoke-before-bulk question.
- "My custom extension builds, but
doca-bench says it
cannot find / load / call it. Where do I look first?" —
the layered-debug question that distinguishes
build-failures, load-failures, registration-mismatches,
and runtime-call-failures.
Audience
Experienced AI agents and platform / performance engineers
who already use doca-bench for
the built-in workload modes and now have a workload class
that the built-in modes do not cover. Readers are expected
to be comfortable with native build systems (Meson, in this
codebase), shared-library packaging on Linux, and the
DOCA_EXPERIMENTAL API stability contract. If the user
asks about GPU-side benchmarking via the shipped
doca_bench_cuda reference extension, the reader is also
expected to be familiar with DOCA GPUNetIO and CUDA toolchain
basics — those domains live in their own skills, not here.
This skill is NOT for:
- operators who can express their workload with one of
doca-bench's built-in modes — that is
doca-bench;
- operators who want to benchmark a different DOCA primitive
(Flow, Comch, RMAX) via that primitive's own
measurement tool — route to that tool;
- contributors authoring or modifying the in-tree extensions
themselves (this skill is for external operators consuming
the framework, not for internal DOCA contributors).
Language scope
A doca-bench extension surfaces as:
- A versioned shared library on Linux (
.so with
soversion matching the DOCA release), built via the
doca-bench-extension Meson rules in the shipped
/opt/mellanox/doca/tools/bench_extension/meson.build and the
per-extension subdirectory (the reference exemplar is
doca_bench_cuda/).
- A small set of
DOCA_EXPERIMENTAL-marked C entry
points that the parent doca-bench invokes — i.e. the
API surface declared in the extension's header file.
The shipped doca_bench_cuda/doca_bench_cuda.h is the
reference for what that surface shape looks like in
practice (*_init, *_device_query,
*_device_synchronize, and per-workload kernel-start
entry points such as *_start_nop_kernel,
*_start_eth_recv_kernel, *_start_eth_send_kernel,
*_start_eth_bidir_kernel).
- A set of per-workload settings structs that the
parent passes through (e.g. the reference exemplar's
doca_bench_cuda_kernel_settings,
doca_bench_cuda_eth_rx_kernel_settings,
doca_bench_cuda_eth_tx_kernel_settings,
doca_bench_cuda_eth_bidir_kernel_settings carry block
counts, threads-per-block, RX / TX queues, buffer
address / mkey / size, a stop flag, and a stats
pointer).
The skill itself is Markdown. The user's extension source
is whatever language the workload requires (C / C++ / CUDA
in the reference case). The agent does NOT prescribe a
language beyond what the shipped reference demonstrates.
When to load this skill
Load doca-bench-extension when ANY of the following is
true:
- the user explicitly mentions
doca-bench-extension, the
doca_bench_cuda reference extension, the
doca_bench_cuda_impl shared library, or any of the
DOCA_EXPERIMENTAL extension entry points;
- the user has confirmed (via
doca-bench TASKS.md ## configure)
that none of doca-bench's built-in workload modes
measures the class they want, and an extension is the
exit ramp;
- the user wants to copy / extend the shipped
doca_bench_cuda reference into a custom GPU-side
workload extension;
- the user is debugging why
doca-bench cannot find / load
/ call a custom extension they built.
Co-load this skill with:
doca-bench (the parent tool —
ALWAYS co-loaded; extensions only have value as
plug-ins into doca-bench);
doca-version (the
DOCA_EXPERIMENTAL surface is versioned with DOCA; the
extension's soversion is the DOCA soversion; the
four-way version match applies);
doca-gpunetio when
the extension is GPU-side and uses GPUNetIO RX / TX
queues like the reference exemplar (route the GPUNetIO
semantics there, not here);
doca-debug and
doca-setup for the
env-side debug ladder (driver, firmware, CUDA toolkit,
dynamic linker).
Do NOT load this skill when the user's workload fits a
doca-bench built-in mode — extensions add cost (build
toolchain, version churn, the experimental-surface
contract); the built-in modes are always the first answer to
try.
What this skill provides
Three companion files in this directory, each owning a
different question shape:
SKILL.md — this file. Audience, scope,
loading order, related skills. Routes everything else.
CAPABILITIES.md — what an extension
can do that the built-in modes cannot, what the API
surface looks like in broad strokes, how the
build / registration / discovery flow works, what
versions it ships in (including the
DOCA_EXPERIMENTAL-stability overlay on top of
doca-version), the layered error taxonomy,
observability, and the safety policy overlay.
TASKS.md — the procedural verbs
(configure, build, run, test, debug, etc.) plus
a doca-bench-extension-specific command appendix and
the agent-side use workflow that consumes the captured
extension run.
The combined skill teaches an AI agent to drive the
extension-author-and-wire-in class of doca-bench
questions: confirm an extension is needed at all; locate
the shipped reference exemplar
(/opt/mellanox/doca/tools/bench_extension/doca_bench_cuda/); copy
its build + API surface shape; build a versioned shared
library that matches the DOCA release; smoke that the
parent doca-bench actually loads it; diagnose layered
failures when it does not.
What this skill deliberately does not ship
- Inventory of
doca-bench's built-in workload modes.
That belongs to doca-bench.
This skill is the exit ramp for what the built-in modes
do not cover; it does not duplicate the parent's mode
inventory.
- Invented
DOCA_EXPERIMENTAL entry-point names beyond
what the shipped reference declares. The shipped
doca_bench_cuda/doca_bench_cuda.h on the user's
install is the reference for what the surface shape
looks like; the agent does not assert other extensions
exist with specific signatures.
- A canonical "right" extension layout. The shipped
doca_bench_cuda reference IS the canonical layout;
rewriting it here would drift from the source of truth.
The agent points the operator at the shipped tree and
walks the operator through adapting it.
- A documented runtime discovery mechanism the agent
invents. The exact mechanism
doca-bench uses to
locate and load extensions (search path, naming
convention, registration call) lives in the public DOCA
Bench documentation on docs.nvidia.com and the
installed doca-bench binary. The agent points the
operator there rather than asserting a mechanism from
memory.
- DOCA GPUNetIO programming details. When the
extension is GPU-side (as the reference exemplar is),
the GPUNetIO RX / TX queue semantics live in
doca-gpunetio;
this skill cross-links rather than duplicates.
- CUDA toolchain installation guidance. Route to the
public NVIDIA CUDA Toolkit documentation on
docs.nvidia.com; this skill does not duplicate it.
- Library-internal
doca-bench invocation details
unrelated to extensions. The parent's CLI flags,
pipeline shapes, and built-in workload classes belong
to doca-bench.
Loading order
When a doca-bench-extension question arrives:
- Confirm DOCA is installed AND
doca-bench is reachable
on the user's install — if not, route to
doca-setup;
- Confirm none of
doca-bench's built-in modes covers
the workload class — if any of them does, route back
to doca-bench TASKS.md ## configure
and stop. Extensions are the exit ramp, not the first
answer;
- Read
CAPABILITIES.md to commit to
the three-axis decision and walk the reference
exemplar's API surface shape;
- Read
TASKS.md and walk
## configure → ## build → ## run → ## test → ## debug
in that order; do NOT start with ## run without the
build precondition step.
Related skills
Cross-link conventions follow the bundle's relative path
contract from tools/<X>/:
doca-bench — the parent tool.
ALWAYS co-loaded. Extensions are plug-ins into
doca-bench; they do not replace it, they do not have a
standalone CLI, they do not measure anything without the
parent invoking them. Every question on this skill
presupposes the parent.
doca-version — the
DOCA_EXPERIMENTAL surface is versioned with DOCA; the
extension's soversion matches the DOCA release per
the shipped meson.build. The four-way version match
applies; rebuilding the extension across DOCA upgrades
is the rule, not the exception.
doca-gpunetio —
when the extension is GPU-side and uses GPUNetIO RX /
TX queues like the reference doca_bench_cuda. Route
the GPUNetIO semantics there.
doca-setup — DOCA install
posture (does doca-bench exist? does the
doca_bench_cuda_impl reference library exist? is the
CUDA toolchain installed when needed?).
doca-debug — the
cross-cutting debug ladder for env-side issues (dynamic
linker, library search path, CUDA driver / toolkit,
firmware).
doca-public-knowledge-map
— routing to the public DOCA Bench / DOCA GPUNetIO pages
on docs.nvidia.com and the release notes for the
documented extension lifecycle / discovery mechanism.
doca-structured-tools-contract
— the agent's detect → prefer → fall back → report
contract for the structured helpers
(doca-env --json, doca-capability-snapshot,
version-matrix.json) the build / load preconditions
rely on.
doca-hardware-safety
— the canonical hardware-safety meta-policy that
CAPABILITIES.md ## Safety policy
overlays. Extensions are external code loaded into
doca-bench; the safety implications of loading
experimental code into a benchmark that touches the
dataplane / device are real.
This skill assumes the user has built shared libraries on
Linux before and knows what a Meson build is. Background
material on those topics belongs in the toolchain docs, not
in this skill.
1---2name: doca-bench-extension3description: Use this skill when the operator is authoring, building, loading, or debugging a custom doca-bench plug-in — a versioned shared library with DOCA_EXPERIMENTAL-marked C entry points that doca-bench loads to measure a workload class its built-in modes do not cover, with doca_bench_cuda as the shipped reference exemplar. Trigger even when the user does not say "doca-bench-extension" or "doca_bench_cuda" — typical implicit phrasings include "no built-in doca-bench mode fits my workload", "how do I benchmark a CUDA GPUNetIO RX/TX kernel", "doca-bench cannot find or load my custom .so", "extension exported symbols do not match what the parent expects", "soversion mismatch after a DOCA upgrade", or "my GPU kernel hangs because stop_flag was never set". Refuse and route elsewhere for questions about which built-in doca-bench mode to pick, DOCA GPUNetIO programming semantics, CUDA toolkit installation, or contributor work on in-tree extensions — those belong to other skills.4license: Apache-2.05---67# DOCA Bench Extension89**Where to start:** This is a tool skill for the **extension /10plug-in framework** that augments11[`doca-bench`](../doca-bench/SKILL.md) — NOT a workload-shape12skill on its own. Open [`TASKS.md`](TASKS.md) and start at13[`## configure`](TASKS.md#configure) to commit to the three-axis14decision (workload class is genuinely outside doca-bench's15built-in modes × extension API surface fits × parent-tool16co-load is acceptable), then [`## build`](TASKS.md#build) for17how a custom extension is compiled and laid out, then18[`## run`](TASKS.md#run) for how `doca-bench` discovers and19invokes the extension, then [`## test`](TASKS.md#test) for the20smoke-before-bulk loop the agent applies to every new21extension. Open [`CAPABILITIES.md`](CAPABILITIES.md) when the22question is *what an extension can do that built-in23`doca-bench` modes cannot*, *what the extension API surface24looks like in broad strokes (the `DOCA_EXPERIMENTAL` C entry25points the shipped reference exposes)*, *how the26build / registration / discovery flow works*, or *how the27extension's lifetime is bounded by the parent `doca-bench`28invocation*. If `doca-bench` itself is the question, route to29[`doca-bench`](../doca-bench/SKILL.md). If the question is30"which built-in `doca-bench` mode do I pick?", that is also31[`doca-bench`](../doca-bench/SKILL.md) — extensions are the32*exit ramp* for workloads built-in modes do not cover.3334## Example questions this skill answers well3536- *"My workload class is `<X>` — does `doca-bench` measure it37 natively, or do I need an extension?"* — the38 extension-vs-built-in decision question. The agent walks39 the user back to [`doca-bench`](../doca-bench/SKILL.md)'s40 built-in mode inventory FIRST and only routes to the41 extension framework when no built-in mode applies.42- *"I want to benchmark a CUDA / GPU-side workload that43 drives DOCA GPUNetIO RX and TX queues. Where do I start?44 Is there a reference extension I can copy?"* — the agent45 surfaces the shipped `doca_bench_cuda` extension under46 `/opt/mellanox/doca/tools/bench_extension/doca_bench_cuda/` as the47 reference exemplar and walks the operator through its48 API surface and build shape.49- *"How does `doca-bench` actually discover and load my50 custom extension at runtime? Is it a versioned shared51 library? What does my entry-point need to look like?"* —52 the build / registration / discovery flow question. The53 agent walks the Meson-built shared library shape, the54 versioning, and the parent-tool's runtime discovery path55 (which the agent does NOT invent from memory — the56 shipped extension's `meson.build` and the public DOCA Bench57 documentation on `docs.nvidia.com` are the source of58 truth).59- *"The API headers I have are marked `DOCA_EXPERIMENTAL`.60 What does that mean for my extension's stability across61 DOCA releases? Am I going to have to rebuild it every62 release?"* — the experimental-surface and version63 compatibility question.64- *"Once I build my extension, what is the cheapest possible65 smoke I can run before pointing my real workload at it?66 How do I know `doca-bench` actually loaded it, called67 into it, and that the call returned the data the parent68 tool expected?"* — the smoke-before-bulk question.69- *"My custom extension builds, but `doca-bench` says it70 cannot find / load / call it. Where do I look first?"* —71 the layered-debug question that distinguishes72 build-failures, load-failures, registration-mismatches,73 and runtime-call-failures.7475## Audience7677Experienced AI agents and platform / performance engineers78who already use [`doca-bench`](../doca-bench/SKILL.md) for79the built-in workload modes and now have a workload class80that the built-in modes do not cover. Readers are expected81to be comfortable with native build systems (Meson, in this82codebase), shared-library packaging on Linux, and the83`DOCA_EXPERIMENTAL` API stability contract. If the user84asks about GPU-side benchmarking via the shipped85`doca_bench_cuda` reference extension, the reader is also86expected to be familiar with DOCA GPUNetIO and CUDA toolchain87basics — those domains live in their own skills, not here.8889This skill is NOT for:9091- operators who can express their workload with one of92 `doca-bench`'s built-in modes — that is93 [`doca-bench`](../doca-bench/SKILL.md);94- operators who want to benchmark a different DOCA primitive95 (Flow, Comch, RMAX) via that primitive's own96 measurement tool — route to that tool;97- contributors authoring or modifying the in-tree extensions98 themselves (this skill is for external operators consuming99 the framework, not for internal DOCA contributors).100101## Language scope102103A `doca-bench` extension surfaces as:1041051. A **versioned shared library** on Linux (`.so` with106 `soversion` matching the DOCA release), built via the107 `doca-bench-extension` Meson rules in the shipped108 `/opt/mellanox/doca/tools/bench_extension/meson.build` and the109 per-extension subdirectory (the reference exemplar is110 `doca_bench_cuda/`).1112. A small set of **`DOCA_EXPERIMENTAL`-marked C entry112 points** that the parent `doca-bench` invokes — i.e. the113 API surface declared in the extension's header file.114 The shipped `doca_bench_cuda/doca_bench_cuda.h` is the115 reference for what that surface shape looks like in116 practice (`*_init`, `*_device_query`,117 `*_device_synchronize`, and per-workload kernel-start118 entry points such as `*_start_nop_kernel`,119 `*_start_eth_recv_kernel`, `*_start_eth_send_kernel`,120 `*_start_eth_bidir_kernel`).1213. A set of **per-workload settings structs** that the122 parent passes through (e.g. the reference exemplar's123 `doca_bench_cuda_kernel_settings`,124 `doca_bench_cuda_eth_rx_kernel_settings`,125 `doca_bench_cuda_eth_tx_kernel_settings`,126 `doca_bench_cuda_eth_bidir_kernel_settings` carry block127 counts, threads-per-block, RX / TX queues, buffer128 address / mkey / size, a stop flag, and a stats129 pointer).130131The skill itself is Markdown. The user's extension source132is whatever language the workload requires (C / C++ / CUDA133in the reference case). The agent does NOT prescribe a134language beyond what the shipped reference demonstrates.135136## When to load this skill137138Load `doca-bench-extension` when ANY of the following is139true:140141- the user explicitly mentions `doca-bench-extension`, the142 `doca_bench_cuda` reference extension, the143 `doca_bench_cuda_impl` shared library, or any of the144 `DOCA_EXPERIMENTAL` extension entry points;145- the user has confirmed (via146 [`doca-bench TASKS.md ## configure`](../doca-bench/TASKS.md#configure))147 that none of `doca-bench`'s built-in workload modes148 measures the class they want, and an extension is the149 exit ramp;150- the user wants to copy / extend the shipped151 `doca_bench_cuda` reference into a custom GPU-side152 workload extension;153- the user is debugging why `doca-bench` cannot find / load154 / call a custom extension they built.155156Co-load this skill with:157158- [`doca-bench`](../doca-bench/SKILL.md) (the parent tool —159 ALWAYS co-loaded; extensions only have value as160 plug-ins into `doca-bench`);161- [`doca-version`](../../doca-version/SKILL.md) (the162 `DOCA_EXPERIMENTAL` surface is versioned with DOCA; the163 extension's `soversion` is the DOCA `soversion`; the164 four-way version match applies);165- [`doca-gpunetio`](../../libs/doca-gpunetio/SKILL.md) when166 the extension is GPU-side and uses GPUNetIO RX / TX167 queues like the reference exemplar (route the GPUNetIO168 semantics there, not here);169- [`doca-debug`](../../doca-debug/SKILL.md) and170 [`doca-setup`](../../doca-setup/SKILL.md) for the171 env-side debug ladder (driver, firmware, CUDA toolkit,172 dynamic linker).173174Do NOT load this skill when the user's workload fits a175`doca-bench` built-in mode — extensions add cost (build176toolchain, version churn, the experimental-surface177contract); the built-in modes are always the first answer to178try.179180## What this skill provides181182Three companion files in this directory, each owning a183different question shape:184185- [`SKILL.md`](SKILL.md) — this file. Audience, scope,186 loading order, related skills. Routes everything else.187- [`CAPABILITIES.md`](CAPABILITIES.md) — *what an extension188 can do that the built-in modes cannot*, *what the API189 surface looks like in broad strokes*, *how the190 build / registration / discovery flow works*, *what191 versions it ships in (including the192 `DOCA_EXPERIMENTAL`-stability overlay on top of193 `doca-version`)*, *the layered error taxonomy*,194 observability, and the safety policy overlay.195- [`TASKS.md`](TASKS.md) — the procedural verbs196 (`configure`, `build`, `run`, `test`, `debug`, etc.) plus197 a `doca-bench-extension`-specific command appendix and198 the agent-side `use` workflow that consumes the captured199 extension run.200201The combined skill teaches an AI agent to drive the202*extension-author-and-wire-in class* of `doca-bench`203questions: confirm an extension is needed at all; locate204the shipped reference exemplar205(`/opt/mellanox/doca/tools/bench_extension/doca_bench_cuda/`); copy206its build + API surface shape; build a versioned shared207library that matches the DOCA release; smoke that the208parent `doca-bench` actually loads it; diagnose layered209failures when it does not.210211## What this skill deliberately does not ship212213- **Inventory of `doca-bench`'s built-in workload modes.**214 That belongs to [`doca-bench`](../doca-bench/SKILL.md).215 This skill is the exit ramp for what the built-in modes216 do not cover; it does not duplicate the parent's mode217 inventory.218- **Invented `DOCA_EXPERIMENTAL` entry-point names beyond219 what the shipped reference declares.** The shipped220 `doca_bench_cuda/doca_bench_cuda.h` on the user's221 install is the reference for what the surface shape222 looks like; the agent does not assert other extensions223 exist with specific signatures.224- **A canonical "right" extension layout.** The shipped225 `doca_bench_cuda` reference IS the canonical layout;226 rewriting it here would drift from the source of truth.227 The agent points the operator at the shipped tree and228 walks the operator through *adapting* it.229- **A documented runtime discovery mechanism the agent230 invents.** The exact mechanism `doca-bench` uses to231 locate and load extensions (search path, naming232 convention, registration call) lives in the public DOCA233 Bench documentation on `docs.nvidia.com` and the234 installed `doca-bench` binary. The agent points the235 operator there rather than asserting a mechanism from236 memory.237- **DOCA GPUNetIO programming details.** When the238 extension is GPU-side (as the reference exemplar is),239 the GPUNetIO RX / TX queue semantics live in240 [`doca-gpunetio`](../../libs/doca-gpunetio/SKILL.md);241 this skill cross-links rather than duplicates.242- **CUDA toolchain installation guidance.** Route to the243 public NVIDIA CUDA Toolkit documentation on244 `docs.nvidia.com`; this skill does not duplicate it.245- **Library-internal `doca-bench` invocation details246 unrelated to extensions.** The parent's CLI flags,247 pipeline shapes, and built-in workload classes belong248 to [`doca-bench`](../doca-bench/SKILL.md).249250## Loading order251252When a `doca-bench-extension` question arrives:2532541. Confirm DOCA is installed AND `doca-bench` is reachable255 on the user's install — if not, route to256 [`doca-setup`](../../doca-setup/SKILL.md);2572. **Confirm none of `doca-bench`'s built-in modes covers258 the workload class** — if any of them does, route back259 to [`doca-bench TASKS.md ## configure`](../doca-bench/TASKS.md#configure)260 and stop. Extensions are the exit ramp, not the first261 answer;2623. Read [`CAPABILITIES.md`](CAPABILITIES.md) to commit to263 the three-axis decision and walk the reference264 exemplar's API surface shape;2654. Read [`TASKS.md`](TASKS.md) and walk266 `## configure → ## build → ## run → ## test → ## debug`267 in that order; do NOT start with `## run` without the268 build precondition step.269270## Related skills271272Cross-link conventions follow the bundle's relative path273contract from `tools/<X>/`:274275- [`doca-bench`](../doca-bench/SKILL.md) — the parent tool.276 **ALWAYS co-loaded.** Extensions are plug-ins into277 `doca-bench`; they do not replace it, they do not have a278 standalone CLI, they do not measure anything without the279 parent invoking them. Every question on this skill280 presupposes the parent.281- [`doca-version`](../../doca-version/SKILL.md) — the282 `DOCA_EXPERIMENTAL` surface is versioned with DOCA; the283 extension's `soversion` matches the DOCA release per284 the shipped `meson.build`. The four-way version match285 applies; rebuilding the extension across DOCA upgrades286 is the rule, not the exception.287- [`doca-gpunetio`](../../libs/doca-gpunetio/SKILL.md) —288 when the extension is GPU-side and uses GPUNetIO RX /289 TX queues like the reference `doca_bench_cuda`. Route290 the GPUNetIO semantics there.291- [`doca-setup`](../../doca-setup/SKILL.md) — DOCA install292 posture (does `doca-bench` exist? does the293 `doca_bench_cuda_impl` reference library exist? is the294 CUDA toolchain installed when needed?).295- [`doca-debug`](../../doca-debug/SKILL.md) — the296 cross-cutting debug ladder for env-side issues (dynamic297 linker, library search path, CUDA driver / toolkit,298 firmware).299- [`doca-public-knowledge-map`](../../doca-public-knowledge-map/SKILL.md)300 — routing to the public DOCA Bench / DOCA GPUNetIO pages301 on `docs.nvidia.com` and the release notes for the302 documented extension lifecycle / discovery mechanism.303- [`doca-structured-tools-contract`](../../doca-structured-tools-contract/SKILL.md)304 — the agent's detect → prefer → fall back → report305 contract for the structured helpers306 (`doca-env --json`, `doca-capability-snapshot`,307 `version-matrix.json`) the build / load preconditions308 rely on.309- [`doca-hardware-safety`](../../doca-hardware-safety/SKILL.md)310 — the canonical hardware-safety meta-policy that311 [`CAPABILITIES.md ## Safety policy`](CAPABILITIES.md#safety-policy)312 overlays. Extensions are external code loaded into313 `doca-bench`; the safety implications of loading314 experimental code into a benchmark that touches the315 dataplane / device are real.316317This skill assumes the user has built shared libraries on318Linux before and knows what a Meson build is. Background319material on those topics belongs in the toolchain docs, not320in this skill.