Doca Dpa
NVIDIAOfficialCreated by NVIDIA
- Skill
- Tool integration
- Software development
- Apache-2.0
- Medium risk
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
The doca-dpa skill provides guidance for developers performing host-side interactions with the NVIDIA DOCA Data-Path Accelerator (DPA). It covers the lifecycle of DPA applications, including context creation, loading DPACC-compiled images, thread management, kernel launching, and completion handling. This skill is intended for host-side C/C++ applications that interface with the DPA processor on a BlueField DPU, ensuring proper configuration, capability discovery, and error handling while maintaining a clear separation from DPA-side kernel development.
What it does
- Initializes the doca_dpa core context on host-side applications.
- Manages the loading of DPACC-compiled DPA application images.
- Handles DPA thread creation and kernel launch operations.
- Provides mechanisms for draining doca_dpa_completion queues.
- Facilitates DPA capability discovery via doca_dpa_cap_* APIs.
- Assists in debugging DOCA_ERROR_* codes related to DPA host-side operations.
When to use it
- When developing host-side code to control and offload compute to the DPA.
- When troubleshooting DPA kernel hangs or completion issues from the host.
- When verifying DPA feature support for a specific BlueField generation.
- When resolving version skew between DOCA and the DPACC compiler.
- When designing host-side bindings that interact with DPA application images.
Advantages
- Provides a structured approach to host-side DPA lifecycle management.
- Clarifies the boundary between host-side control and DPA-side kernel execution.
- Offers specific guidance for debugging common DPA integration errors.
- Ensures consistent handling of DPA capability and version requirements.
Usage examples
- “Run compute on the DPA from my host.”
- The agent will guide the user through initializing the doca_dpa context, loading the DPACC-compiled image, and launching the kernel.
- “DPA kernel hangs, no completion.”
- The agent will help verify that the host is correctly driving doca_pe_progress and that the completion queue is properly attached.
- “Does this BlueField expose a DPA?”
- The agent will instruct on using the doca_dpa_cap_* discovery family to query the hardware capabilities.
- “DOCA_ERROR_DRIVER on launch.”
- The agent will assist in diagnosing the error, checking for version mismatches or invalid kernel launch parameters.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/nvidia/doca-dpa/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip doca-dpa.zip -d .agents/skills
Documentation by NVIDIA
DOCA DPA
Examples
"Run compute on the DPA from my host." — this is in scope. Stay on
doca_dpa+ a DPACC-built image; do not rewrite it as host-CPU or GPUNetIO."DPA kernel hangs, no completion." — drain
doca_dpa_completionand check DOCA/DPACC version skew before changing the kernel.
Instructions
Follow Loading order below. Open the tasks companion for configure / launch / debug. Open the capabilities companion for threads vs kernels and the DPA cap query. Do not open every companion file.
Where to start: This skill assumes DOCA is already installed,
the user's BlueField has a DPA processor and the host can see it
through DOCA, and the user is doing hands-on DPA work from the
host side — i.e. using doca-dpa to load a DPA application
image, launch DPA kernels, and exchange data with the DPA
processor. Open the tasks companion if the user wants to do
something (configure / build / modify / run / test / debug); open
the capabilities companion when the question is what
can the host-side DPA API express on this version + this
BlueField generation. If the user has not installed DOCA yet,
route to doca-setup/SKILL.md first; if the
user is asking how to write the DPA-side kernel itself (the
code that runs on the DPA processor, compiled by dpacc), that
is a different scope — route via
doca-public-knowledge-map/SKILL.md
to the public DOCA DPA / DPACC / DPA-Comms / DPA-Verbs guides
(this skill does not redefine those DPA-side surfaces).
Audience
This skill serves external developers building applications
that consume the DOCA DPA library from the host side — i.e.,
users whose code calls doca_dpa_* from host C / C++ to stand
up the per-DPA-instance context, load a DPA application image
that dpacc produced from their DPA-side source, create one or
more DPA threads, launch DPA kernels with arguments, and drain
completions. It is not for NVIDIA developers contributing to
DOCA DPA itself, nor is it the place to learn how to write
the DPA-side kernel code (that path goes through the public
DOCA DPA, DPACC, DPA-Comms, and DPA-Verbs guides via
doca-public-knowledge-map/SKILL.md).
Language scope. DOCA DPA ships as a host-side C library
with pkg-config module name doca-dpa. The host-side API is
C; the DPA-side kernel is a separate translation unit written
in the language the DPACC compiler accepts and compiled by
dpacc into a binary that the host packages into the
executable as the DPA application image. The shipped samples
under /opt/mellanox/doca/samples/doca_dpa/ are written in C
plus DPA-side source (NVIDIA's choice). Other-language
consumers are limited in practice — the DPA-side kernel has no
FFI escape hatch because it must be a translation unit dpacc
accepts — but a Rust / Go / Python host-side wrapper that drives
doca_dpa_* setup and launches a DPA kernel image built
separately is still useful, and the skill keeps the lifecycle,
capability-discovery, env-precondition, and error-taxonomy
guidance language-neutral.
When to load this skill
Load this skill when the user is doing hands-on DOCA DPA work
from the host side, in any host language plus a DPA-side
translation unit built by dpacc. Concretely:
Initializing a
doca_dpaagainst adoca_devthat maps to a BlueField with a DPA processor visible to the host.Loading a DPA application image (
doca_dpa_app) thatdpaccproduced from the user's DPA-side source, into thedoca_dpacontext.Creating one or more DPA execution contexts (
doca_dpa_thread) so DPA kernels have somewhere to run on the DPA processor.Launching a DPA kernel function with arguments from the host via the
doca_dpa_kernel_launch_update_*family, and reasoning about which argument shape is supported on this install.Attaching a
doca_dpa_completionto observe when async DPA work finishes, and draining it from the host side.Checking which DPA features are supported on the active
doca_devinfovia thedoca_dpa_cap_*family — BlueField generations differ in DPA hardware support.Debugging a
DOCA_ERROR_*returned from adoca_dpa_*call — in particular disambiguating DPA not present on this BlueField from DPA feature too new for this hardware generation from DPACC-produced image mismatched against the host-side DOCA install from DPA driver layer reporting failure.Designing host-side bindings in a non-C language that drive a DPA application image they built separately with
dpacc— the env-precondition and capability-discovery rules in this skill still apply.
"My DPA kernel hangs and I never get a completion" is a host-side question first. Launch calls are asynchronous, so a successful return means submitted, not finished. Before reading a line of kernel code, establish that the host is actually in a position to observe completion: a
doca_dpa_completionis attached, and the host is drivingdoca_pe_progressin parallel with the outstanding launches. A host that submits and then blocks without progressing the PE sees no completions and concludes "the DPA is hung" incorrectly — the kernel may have finished already. Only once that is excluded is a non-terminating kernel body the suspect. Both steps and the ordering are in ## run steps 2-3.
Writing DPA-side kernel code that calls the DPA device-side comm component
libdoca_dpa_dev_comm.a(headerdoca_dpa_dev_comch_msgq.h) — for inter-DPA-thread messaging or coordination signals between DPA threads on the samedoca_dpa_app. The DPA-Comms routing rule, primitive families, capability rule (there is no per-primitive host cap-query family — host-side DPA discovery is onlydoca_dpa_cap_is_supported/doca_dpa_cap_get_max_kernel_time_alive_supported), error overlay (_AGAIN→ kernel must yield;_BAD_STATEdisambiguation from the parent's host-side_BAD_STATE), and the configure / build / modify / run / test / debug overlay live in ## comms andcomms under this same skill.
Writing DPA-side kernel code that calls the DPA device-side verbs component
libdoca_dpa_dev_verbs.a(headerdoca_dpa_dev_verbs.h) — for RDMA from inside the DPA kernel to a remote peer when the host round-trip is the measured latency bottleneck. The 4-way RDMA matrix, the host-configures-QP / DPA-uses-QP coupling rule, the capability rule (no per-verb host cap-query family exists; verb availability follows the BlueField generation + matched DOCA/DPACC install, read fromdoca_dpa_dev_verbs.hand the shipped sample), the IO_FAILED → CQE-inspection overlay, and the climb-back rule live inverbs and
verbs under this same skill.
Do not load this skill for general DOCA orientation,
install of DOCA or the DPACC compiler, the DPA-side
programming model itself (how to write a DPA kernel; the
DPA device-side comm and verbs components
(libdoca_dpa_dev_comm.a / libdoca_dpa_dev_verbs.a) that
run inside the DPA kernel), or non-DPA library questions.
For those, route through
doca-public-knowledge-map/SKILL.md
to the matching upstream guide.
What this skill provides
This is a thin loader. The body keeps only the orientation needed to pick the right next file. The substantive DPA-specific material lives in two companion files:
the capabilities companion — what the host-side DPA API can express on this version + this BlueField generation: the per-DPA-instance
doca_dpacontext, the loadeddoca_dpa_appimage produced bydpacc, thedoca_dpa_threadexecution context, the host-initiated kernel launch surface (doca_dpa_kernel_launch_update_*), thedoca_dpa_completionmechanism, the capability-query surface (doca_dpa_cap_*), the DPA error taxonomy mapped onto the cross-libraryDOCA_ERROR_*set, the observability surface (host-side completions plus the public DPA developer tools surface reachable viadoca-public-knowledge-map), and the safety policy that gates env preconditions (DPA-capable BlueField, matched DOCA + DPACC versions, DPA-side image and host-side expected entry points agree).the tasks companion — step-by-step workflows for the six in-scope DPA verbs:
configure,build,modify,run,test,debug. Plus aDeferred task verbsblock that points out-of-scope questions at the right next skill.
The skill assumes a host where DOCA is already installed at
the standard location, a BlueField with a DPA processor is
physically present and visible to the host, the DPACC compiler
is installed at a version matched to the DOCA install per the
DOCA Compatibility Policy, and the user already knows how (at
least at a sketch level) to write the DPA-side kernel that
dpacc will compile. It does not cover installing DOCA or the
DPACC compiler — that path goes through
doca-setup/SKILL.md.
What this skill deliberately does not ship
This skill is agent guidance, not a samples or templates bundle. To keep the boundary clean, it deliberately does not contain — and pull requests should not add:
Pre-written DOCA DPA application source code or DPA-side kernel source, in any language. The verified DPA source is the shipped C + DPA-side samples at
/opt/mellanox/doca/samples/doca_dpa/. The agent's job is to route the user to those files and prescribe a minimum-diff modification on them via the universal modify-a-sample workflow indoca-programming-guide/SKILL.md, layered with the DPA-specific overrides inmodify.
Standalone build manifests (
meson.build,CMakeLists.txt, …) parked inside the skill. The agent constructs the build manifest in the user's project directory against the user's installed DOCA + DPACC compiler, wherepkg-config --modversion doca-dpaand the installeddpaccare the two sources of truth.A
samples/,bindings/, orreference/subtree of any kind. A mock or incomplete artifact in this skill's tree, even one labeled "reference", is misleading: users will read it as buildable.DPA device-side content for the comm / verbs components (
libdoca_dpa_dev_comm.a/libdoca_dpa_dev_verbs.a). These are DPA-side archives shipped as part ofdoca-dpa(NOT separate pkg-config modules): their symbols are called from inside the DPA kernel and linked into the DPA image bydpacc, not from the host. Their public guides are reachable viadoca-public-knowledge-map/SKILL.md. This skill names them and routes; it does not redefine them.
Loading order
Read this skill first to confirm the user's question is in scope (host-side DPA work, not DPA-side kernel-writing).
For the DPA capability matrix, the
doca_dpaper-instance context, the loadeddoca_dpa_appimage, thedoca_dpa_threadexecution context, the kernel-launch + completion model, the dual capability query, the env-precondition policy, the error taxonomy, the observability surface, and the safety policy, see the capabilities companion.For step-by-step workflows — configure, build, modify, run, test, debug — see the tasks companion.
Both companion files cross-link to each other,
doca-version/SKILL.md for the canonical
DOCA version-handling rules (with the DPA overlay that DOCA
must match the DPACC compiler), and
doca-public-knowledge-map/SKILL.md
whenever the right answer is "look it up in the public DOCA
DPA, DPACC, DPA-Comms, or DPA-Verbs guide, or in the on-disk
install layout" rather than "DPA host-side-specific guidance".
Related skills
doca-public-knowledge-map/SKILL.md— the routing table for every public DOCA documentation source and the on-disk layout of an installed DOCA package. The DPA public guide is at https://docs.nvidia.com/doca/sdk/DOCA-DPA/index.html; the DPACC compiler guide, the DPA-Comms guide (DPA-side communications), the DPA-Verbs guide (DPA-side verbs), and the DPA Tools umbrella (developer / admin CLIs for DPA) live in the same routing table and are companion surfaces to this skill rather than redefined by it.doca-setup/SKILL.md— env preparation, install verification, DPACC compiler install / verification, and the I have no install yet path with the public NGC DOCA container. This skill assumes its preconditions are satisfied AND that DPACC is installed at a version that matches DOCA.doca-version/SKILL.md— canonical DOCA version-handling rules. This skill's## Version compatibilitycross-links the four-way match rule and adds the DPA-specific DOCA-and-DPACC must match overlay per the DOCA Compatibility Policy.doca-structured-tools-contract/SKILL.md— the bundle's structured-tools precedence rule (detect / prefer / fall back / report). The Command appendix in the tasks companion honors this contract.doca-programming-guide/SKILL.md— shared build, first-app, Core-lifecycle and cross-libraryDOCA_ERROR_*patterns; this skill layers DPA specifics on top.doca-debug/SKILL.md— the cross-cutting debug ladder; this skill's## debugadds the DPA overlay (DOCA + DPACC skew, no DPA on this BlueField, kernel hangs with no host-side completion, launch-argument / signature mismatch).
DPA device-side components
DOCA DPA's DPA device-side components — the comm archive
libdoca_dpa_dev_comm.a (communication primitives the DPA
kernel itself calls, header doca_dpa_dev_comch_msgq.h) and
the verbs archive libdoca_dpa_dev_verbs.a (ibverbs-like RDMA
verbs the DPA kernel itself calls, header
doca_dpa_dev_verbs.h) — are DPA-side archives shipped
within doca-dpa, not separate pkg-config modules, and each
has its own public guide. This skill covers them in its
## comms / ## verbs sections; for per-symbol detail, route via
doca-public-knowledge-map/SKILL.md
to the public DOCA DPA Comms and DOCA DPA Verbs guides
and to the shipped /opt/mellanox/doca/samples/doca_dpa/
samples (which include both host-side and DPA-side
translation units). Conflating them with doca-dpa is the
single most common DPA first-app design error.
Files
- ATTRIBUTION.mdAdded by AutoGineer882 B
- BENCHMARK.md10.0 KiB
- CAPABILITIES.md40.9 KiB
- LICENSELicence file added by AutoGineer11.2 KiB
- SKILL.md15.5 KiB
- SKILLCARD.yaml2.8 KiB
- TASKS.md45.5 KiB
- evals/evals.json3.0 KiB
- skill-card.md5.1 KiB
- skill.oms.sig5.1 KiB
TASKS.md
DOCA DPA workflows
Where to start: The verbs run configure → build → modify → run → test → debug. Skip ahead only when the user is already
past a verb. The ## test verb is an iterative loop
(single-kernel-launch smoke → multi-launch streaming → multi-thread
scale-out → loop back if a precondition changes), not a one-shot
pass — see the eval-loop overlay in ## test below.
Read this file when the loader sent you here from
SKILL.md. For the DPA capability surface, the
two-side-program model, the doca_dpa per-instance context, the
loaded DPA application image, the DPA execution context, the
host-initiated launch + completion model, the dual capability-query
rule, the env-precondition matrix, the error taxonomy, the
observability surface, and the safety policy, see
CAPABILITIES.md. For the cross-library DOCA
patterns layered under everything below (the universal Core
lifecycle, the cross-library DOCA_ERROR_* taxonomy, the
modify-a-shipped-sample workflow), see
doca-programming-guide/SKILL.md.
Each verb below describes the shape of the workflow, not a copy-paste recipe. The agent's job is to walk the user through the steps in order, verifying preconditions before recommending the next call.
configure
Goal: stand up a doca_dpa context against a BlueField with a
DPA processor, load the user's DPA application image (compiled
by dpacc from their DPA-side source) onto it, create at least
one DPA execution context (doca_dpa_thread), and confirm both
the host side and the DPA side are in a state where a host-side
kernel launch can succeed.
Steps the agent should walk the user through:
Confirm the env preconditions. Walk the three environment rows of the env-precondition matrix in
CAPABILITIES.md ## Safety policy(DPA exposed to the host, DOCA + DPACC compatible,doca_devaccessible); the signature and smoke rows are checked later, in## buildand## test. Any failing environment row is an env / version / mode fix viadoca-setup TASKS.md ## configure(doca-setup/TASKS.md#configure)doca-version TASKS.md ## configure(doca-version/TASKS.md#configure), NOT a code change in the host-side DPA program.
Walk the two-side-program model BEFORE writing any host code. Per the two-side-program rule in
CAPABILITIES.md ## Capabilities and modes, the user is writing TWO translation units: a host-side program that callsdoca_dpa_*, and a DPA-side program (the kernel function bodies) thatdpacccompiles into a binary the host executable embeds as adoca_dpa_app. The agent must surface this model EXPLICITLY before any host-side launch call is drafted. If the user is asking "how do I write the DPA-side kernel itself", that is the DPACC + DPA-side libraries surface — route viadoca-public-knowledge-map/SKILL.mdto the public DOCA DPA / DPACC / DPA-Comms / DPA-Verbs guides; do not redefine those surfaces here.Run dual capability discovery against the target BlueField per the dual-axis rule in
CAPABILITIES.md ## Capabilities and modes, and quote BOTH results back to the user. If either says not supported, that axis is the answer — do not proceed.Create the
doca_dpaCore context against the chosendoca_dev. This is a standard DOCA Core context create — the universal lifecycle fromdoca-programming-guide TASKS.md ## configure(doca-programming-guide/TASKS.md#configure) applies. Choose thedoca_devdeliberately: a multi-BlueField host needs onedoca_dpaper BlueField, not a "global" one, per the per-instance rule inCAPABILITIES.md ## Capabilities and modes.Load the DPA application image and create DPA execution contexts. Load the
doca_dpa_appproduced bydpaccfrom the user's DPA-side source into thedoca_dpa; then create one or moredoca_dpa_threadexecution contexts on top. Start thedoca_dpaviadoca_ctx_start(). Per the lifecycle ordering inCAPABILITIES.md ## Safety policy, record the order so teardown happens in reverse: stop / destroydoca_dpa_thread→ release the loadeddoca_dpa_app→ destroy thedoca_dpa→ close thedoca_dev.Attach a
doca_dpa_completionbefore launching anything. Per the launch + completion section inCAPABILITIES.md ## Capabilities and modes,doca_dpa_kernel_launch_update_*is asynchronous from the host's point of view — without a completion attached, the host has no portable way to know the DPA kernel actually finished. Set this up at configure time, not at first-failure time.Sanity check before the first launch. Confirm with the user: which BlueField (which
doca_dev) the launches will target; which DPA application image (doca_dpa_app) is loaded and which kernel function entry points it exposes; whichdoca_dpa_threadeach launch will run on; how the host launch arguments map to the DPA-side function signature; how the kernel will terminate (a DPA kernel that never exits will eventually pin the DPA processor and the host will see no completion). If any of those are unclear, stop and ask — do not invent.
For the canonical DOCA universal lifecycle that underlies
steps 4-5, see
doca-programming-guide TASKS.md ## configure (doca-programming-guide/TASKS.md#configure).
This skill adds the DPA overlay; do not re-explain the
lifecycle here.
build
Goal: compile a DPA-using consumer (host-side C / C++ + at
least one DPA-side translation unit) against the user's
installed DOCA + DPACC compiler, with pkg-config + dpacc
as the joint sources of truth for include + link flags + DPA
binary embedding.
The build pattern for any DOCA C / C++ consumer is fully
documented in
doca-programming-guide TASKS.md ## build (doca-programming-guide/TASKS.md#build).
DPA adds a DPACC layer on top: the DPA-side translation units
are compiled by dpacc into a binary embedded into the host
executable, and the link line on the host side pulls in the
DOCA DPA library. This skill carries only the DPA-specific
overlay:
| Slot | Value | Why it matters |
|---|---|---|
pkg-config module name | doca-dpa | The library's .pc file installed by the DOCA host packages; gives the host-side include + link flags for the DOCA DPA host API |
| DPA-side toolchain | dpacc (DPACC compiler), installed alongside DOCA | Compiles DPA-side translation units into the binary that the host executable embeds as the doca_dpa_app. The host system compiler is NOT a substitute |
| Include flags | pkg-config --cflags doca-dpa for the host side; the DPACC-prescribed include path for the DPA side | Resolves DOCA headers under whichever include directory pkg-config --cflags reports on this install (do not hardcode the include path — it can move across DOCA install profiles) for the host side; the DPA-side include path comes from the DPACC install layout via doca-public-knowledge-map/SKILL.md |
| Link flags | pkg-config --libs doca-dpa on the host side, plus the DPACC-prescribed embed step that bakes the DPA-side binary into the host executable | Pulls in whatever pkg-config --libs resolves on this install (do not predict the -l<name> form by hand — .so basenames use underscores, .pc names use hyphens, and pkg-config is the only correct translator) on the host side. The DPACC embed step is the load-bearing build action — without it the host has no DPA application image to load at runtime |
| Companion DOCA libs | doca-argp for arg parsing in samples; the shipped samples include both host-side and DPA-side translation units | The shipped samples are the verified two-side-program build template; do not invent a one-side-only manifest |
| DPA device-side archives NOT to add to the host link line | libdoca_dpa_dev_comm.a, libdoca_dpa_dev_verbs.a | These are DPA-SIDE archives shipped within doca-dpa (NOT separate pkg-config modules): their symbols are linked into the DPA image from inside the DPA kernel by dpacc, NOT from the host link line. Adding them to the host link line is a common first-build error |
| Minimum DOCA version | Query with pkg-config --modversion doca-dpa; never hardcode | Cross-version build/runtime mixing breaks per CAPABILITIES.md ## Version compatibility |
| Minimum DPACC version | Cross-check the installed dpacc version against the DOCA Compatibility Policy linked from CAPABILITIES.md ## Version compatibility | Mismatched DOCA + DPACC combos fail at link time or at launch time with DOCA_ERROR_DRIVER |
For non-C host-side consumers (Rust, Go, Python) that drive
host-side DPA setup and embed a DPA application image built
separately by dpacc, the host-side link line and version
rules above still apply; the DPA-side build is a separate
compilation unit and is out of scope for this skill, but the
dpacc version check is the load-bearing input the wrapper
still needs.
modify
Goal: take the closest-fitting shipped DOCA DPA sample as the verified starting point and apply a minimum diff to make it match the user's intent, without rewriting from scratch.
The universal modify-a-shipped-sample workflow is in
doca-programming-guide TASKS.md ## modify (doca-programming-guide/TASKS.md#modify);
this skill provides the DPA-specific slot fill.
| Slot | What the agent asks the user | DPA-specific consideration |
|---|---|---|
| 1. Starting sample | Which sample under /opt/mellanox/doca/samples/doca_dpa/? | Pick a sample whose shape matches the user's intent: same kernel-launch-style (single launch vs streaming), same use of doca_dpa_completion, same DPA device-side component set (vanilla, or comm via libdoca_dpa_dev_comm.a, or verbs via libdoca_dpa_dev_verbs.a). DPA samples are two-side programs; the sample's DPA-side translation unit is the second half of the verified base |
| 2. DPA-side kernel function body | What is the DPA kernel function actually computing? | The DPA-side translation unit is the in-place edit point for the kernel body. The agent's anti-pattern alert: do NOT propose moving the kernel logic to the host side to "simplify" — that defeats the entire reason to use DPA. Keep the kernel on the DPA |
| 3. Host launch-argument shape | What arguments does the kernel take, what shapes / sizes? | Per the two-side-program rule in CAPABILITIES.md ## Capabilities and modes, the host launch call and the DPA-side kernel signature MUST agree on count, size, and type. Any change to one side requires updating the other; track this as a single edit, not two |
4. Number of doca_dpa_thread execution contexts | One DPA thread or many? Persistent or per-launch? | Per the anti-pattern note in CAPABILITIES.md ## Capabilities and modes, fresh-thread-per-launch defeats the DPA. Persistent threads processing a stream of launches are the right shape; multi-thread is a re-architecture, not a tweak |
| 5. Completion topology | How does the host observe each launch completing? | The doca_dpa_completion attached at configure time is the host-side observability surface. Resizing or restructuring the completion queue means re-running step 6 of ## configure; a missing or undersized completion queue surfaces as DOCA_ERROR_AGAIN at launch submit time |
| 6. Termination signal for the DPA kernel | How does the kernel know when to exit? | A DPA kernel that runs forever pins the DPA processor and the host sees no completion. The agent must surface the kernel-exit condition on every modify pass — a host-side flag in DPA-visible memory, a per-launch one-shot, or whatever the sample's pattern is |
| 7. Rebuild BOTH sides | After any modify, rebuild the DPA-side image via dpacc AND rebuild the host executable that embeds it | Per the do not partial-rebuild one side rule in CAPABILITIES.md ## Safety policy, rebuilding only one side is the canonical way to introduce DOCA_ERROR_DRIVER at launch time |
The agent emits an intent description + the seven filled slots; the actual unified diff against the sample source is produced the way every other library skill in this bundle handles modify — the agent walks the user through the diff line-by-line against the sample source they read on disk, and has the user paste back the result for validation. The agent's anti-pattern alert: a "clean rewrite" from scratch is almost always slower to first green than a minimum-diff modify on a shipped DPA sample, and removes the user's ability to bisect against a known-good baseline.
run
Goal: actually launch a DPA kernel from the host against the loaded DPA application image and confirm the launch completes.
Steps the agent should walk the user through:
Confirm the loaded image exposes the kernel function the host will launch. The host's view of "which kernels exist" is exactly the entry-point set in the loaded
doca_dpa_app. If the user's host launch call names a functiondpaccdid not compile in, that is a build-side bug, not a launch-side bug; route back to## build.Submit the launch from the host via the matching
doca_dpa_kernel_launch_update_*call against the chosendoca_dpa_thread. Remember: the call is asynchronous; a successful return means the launch was submitted, not that the kernel finished. Per the launch + completion section inCAPABILITIES.md ## Capabilities and modes, the host must drain the attacheddoca_dpa_completionto know the kernel actually finished.Drive the host-side
doca_pe_progressloop in parallel with any outstanding DPA launches. Completions arrive through the progress engine; a host that submits launches and then blocks without progressing the PE will see no completions and conclude "the DPA is hung" incorrectly. This is the cross-library "PE not progressed" failure mode applied to DPA.Capture the structured log on first failure. Set
DOCA_LOG_LEVEL=tracefor the first run (seedoca-debug CAPABILITIES.md ## Observability(doca-debug/CAPABILITIES.md#observability)); if the host-side log is silent but the launch never completes, the DPA kernel is running but stuck — that is the moment to reach for the DPA-side developer tools (the DPA debugger and the DPA process-state inspector named inCAPABILITIES.md ## Observabilityand routed viadoca-public-knowledge-map/SKILL.mdto the public DPA Tools umbrella).
For the runtime version + LD_LIBRARY_PATH cross-checks that
underlie "the program built but does nothing", see
doca-version TASKS.md ## run (doca-version/TASKS.md#run).
test
Goal: prove the configured DPA setup actually launches a kernel on the DPA processor and reports a completion to the host on the user's hardware, and that the env-precondition + capability set was sized right.
This is a loop, not a one-shot pass. Each iteration narrows either the env-precondition set, the capability set, the two-side-program signature, or the completion-queue sizing. The loop terminates when either (a) the host launches a kernel at the user's intended rate with the expected completions, or (b) the agent has narrowed the failure cause to a layer outside DPA itself (DPA-side kernel hang / DPACC build / BlueField mode / DOCA install) and escalated to the matching skill.
Iteration shape:
Single-kernel-launch smoke. Launch ONE invocation of a trivial DPA kernel (no-op, or a counter increment) and confirm the host observes one completion. If yes, advance. If no — and the host-side log shows no error — the DPA kernel is running but stuck or the completion queue is not wired up; route to
## debuglayer 5 and consult the DPA-side tooling. Per the safety-policy rule inCAPABILITIES.md ## Safety policy, DO NOT scale a broken smoke into a high-throughput design.Streaming-launch loop. Submit 100 launches in a tight loop and confirm the host observes all 100 completions without losing any. Catches completion-queue-sizing bugs:
DOCA_ERROR_AGAINfrom the host-side submit means the completion queue is full and the host must drain faster, OR the queue is undersized — per## modifyslotMulti-thread scale-out (if used). Re-run steps 1-2 on each additional
doca_dpa_thread— each thread is its own execution context and can fail differently (e.g. different completion-queue topology, different per-thread state). Per the persistent-thread rule inCAPABILITIES.md ## Capabilities and modes, one thread per stream of launches is the right pattern.Two-side-program signature negative test. Intentionally pass mismatched arguments from the host launch call versus the DPA-side kernel signature and confirm the host gets
DOCA_ERROR_INVALID_VALUEcleanly — validates that the agent's earlier two-side-program signature check is real, not just notional. Then restore the matched signatures.Cap-query negative test. Intentionally call a
doca_dpa_cap_*axis the agent expects to be not supported on this BlueField + DOCA combo and confirm the reportedDOCA_ERROR_NOT_SUPPORTEDmatches the dual capability discovery from## configurestep 3 — validates the agent's capability-discovery itself is correct.
Eval-loop overlay — why this is a loop, not a one-shot pass:
| Iteration trigger | What it looks like | What changes next iteration |
|---|---|---|
DOCA_ERROR_NOT_SUPPORTED on a BlueField the agent expected to work | DOCA cap-query failed against the active doca_devinfo | The BlueField generation / mode axis was missed; re-run the env-side BlueField mode check; if the BlueField truly does not expose the DPA, the answer is the hardware, not a code or DOCA upgrade |
DOCA_ERROR_DRIVER on first kernel launch | DOCA + DPACC versions are skewed OR the DPA-side image was built against a different DOCA install than the host runtime | Re-run the version chain per doca-version TASKS.md ## test (doca-version/TASKS.md#test); rebuild BOTH sides via dpacc + the host build against the matched versions; cross-check against the DOCA Compatibility Policy |
| Single-kernel-launch smoke passed; streaming loop hangs | The host is not draining the completion queue fast enough OR the completion queue is too small | Raise the completion queue size in ## modify slot 5; or restructure the host loop to drain completions per batch |
| Host submitted N launches; received fewer than N completions; host log is silent | The DPA-side kernel is stuck mid-execution (most often a missing termination condition in the kernel body) | Walk the kernel-exit condition per ## modify slot 6; reach for the DPA-side debugger / process-state inspector named in CAPABILITIES.md ## Observability |
doca_ctx_stop blocks on teardown | A doca_dpa_thread still has an in-flight kernel that never exited | Walk the host-side flag (or other termination signal) the DPA kernel polls per ## modify slot 6; the host cannot force-kill the DPA kernel from the doca-dpa API |
Loop termination: stop iterating once two consecutive
iterations of the same kind don't change anything — that means
the cause is below DPA (BlueField mode, DPA-side kernel logic
bug, DPACC bug, NIC firmware). Escalate to
doca-debug TASKS.md ## debug (doca-debug/TASKS.md#debug)
with the captured layer-1-through-5 evidence including BOTH
the host-side DOCA log and the DPA-side tooling output.
debug
Goal: when a doca_dpa_* call (or a DPA kernel launch) returns
a DOCA_ERROR_* or does not make forward progress, narrow the
cause to a specific layer and act on it.
The cross-library debug ladder lives in
doca-debug TASKS.md ## debug (doca-debug/TASKS.md#debug).
Walk through it in order — install → version → build → link →
runtime → program → driver — before recommending DPA-specific
fixes. This skill's overlay names the DPA-specific
manifestation at layers 5 (runtime), 6 (program), and 7
(driver):
Layer 5 (runtime) — DPA overlay.
A submitted DPA kernel launch that never produces a host-side completion is almost always one of three things: the host is not progressing the PE; the DPA kernel is in an infinite loop with no termination condition; or the completion queue attached to the launch's
doca_dpa_threadis full and being silently dropped at the host's failure to drain. Confirm the env-side preconditions per## configurestep 1 and the host-side progress per## runstep 3 before assuming the DPA itself is broken.DOCA_ERROR_AGAINfromdoca_dpa_kernel_launch_update_*is always a queue-full / drain-rate problem. Do not recommend a tight retry loop; recommend a drain-then-retry pattern via the host PE.A "DPA kernel hung; cannot stop the program" pattern is almost always a missing termination signal in the DPA-side kernel per
## modifyslot 6.
Layer 6 (program) — DPA overlay.
Lifecycle ordering: the
doca_dpa_threadobjects must be destroyed BEFORE the loadeddoca_dpa_appis released; the loadeddoca_dpa_appmust be released BEFORE thedoca_dpaitself is destroyed. Out-of-order returnsDOCA_ERROR_BAD_STATEperCAPABILITIES.md ## Safety policy.Two-side-program signature mismatch: a host launch call whose argument shape does not match the DPA-side kernel function signature returns
DOCA_ERROR_INVALID_VALUE. The fix is to rebuild the DPA-side image viadpaccafter re-aligning the signatures, then rebuild the host executable; do not patch only one side. See the do not partial-rebuild one side rule inCAPABILITIES.md ## Safety policy.Fresh-thread-per-launch anti-pattern: if the user reports "throughput is much lower than expected" and the host code creates a new
doca_dpa_threadper launch, that is the bug. Refactor to persistent-thread + stream-of-launches per the anti-pattern note inCAPABILITIES.md ## Capabilities and modes.
Layer 7 (driver) — DPA overlay.
DOCA_ERROR_DRIVERfromdoca_dpa_*is most often the DPA driver layer reporting failure to DOCA, and most often because DOCA + DPACC are skewed. Capturepkg-config --modversion doca-dpa, the installeddpaccversion, anddoca_caps --version; cross-check against the DOCA Compatibility Policy at https://docs.nvidia.com/doca/sdk/doca-compatibility-policy/index.html.A BlueField in the wrong mode that does NOT expose the DPA surfaces as
DOCA_ERROR_NOT_SUPPORTEDatdoca_dpacreate time. Route todoca-setup TASKS.md ## debug(doca-setup/TASKS.md#debug) layer 5 (driver) for the env-side BlueField mode fix; this is NOT a code change in the program.
Once the layer is identified, route to the matching debug verb
on the matching skill: install / build / link / driver to
doca-setup ## debug (doca-setup/TASKS.md#debug); version
to doca-version TASKS.md ## debug (doca-version/TASKS.md#debug);
cross-cutting runtime to
doca-debug ## debug (doca-debug/TASKS.md#debug);
program-layer Core-context patterns to
doca-programming-guide TASKS.md ## debug (doca-programming-guide/TASKS.md#debug).
comms
The DPA-Comms-specific overlay on the parent verbs. Use AFTER the
parent's ## configure → ## debug
sequence has been walked for the host-side doca-dpa flow; this
section adds only what the DPA-side comms layer changes. For the
capability surface, routing rule, error overlay, and safety
matrix, see CAPABILITIES.md ## comms.
configure overlay.
Confirm DPA-side scope, not host-side. The user is writing the DPA-side translation unit
dpacccompiles into thedoca_dpa_app. If the user wanted host ↔ DPU messaging, that isdoca-comch/SKILL.md; if they wanted host-to-remote RDMA, that isdoca-rdma/SKILL.md. Route there before any DPA-Comms code per the routing rule inCAPABILITIES.md ## comms.Parent host-side flow must be green first. A trivial DPA kernel (no DPA-Comms calls) must already launch and complete on this host + image per
## teststep 1 — the parent smoke. A broken parent flow surfaces as a broken DPA-Comms launch later. Fix via## configurefirst; do NOT start DPA-side comms code on a broken parent.Confirm the DPA is exposed and the install is matched. Per the capability rule in
CAPABILITIES.md ## comms, there is NOdoca_dpa_comms_cap_*host cap family — host-side DPA discovery is onlydoca_dpa_cap_is_supported/doca_dpa_cap_get_max_kernel_time_alive_supported. Rundoca_dpa_cap_is_supportedagainst the activedoca_devinfoto confirm a DPA is exposed, then confirm the comm primitives the kernel will use exist on this BlueField generation + matched install by readingdoca_dpa_dev_comch_msgq.hand the shipped sample. Cross-check the singlepkg-config --modversion doca-dpaagrees with the installeddpacc(there is no separatedoca-dpa-comms.pc); quote both back to the user.Read the matching shipped sample first. The verified two-side-program baseline lives under
/opt/mellanox/doca/samples/doca_dpa/. Read it on disk BEFORE writing any DPA-side comms code; do NOT re-derive the kernel-side initialization order from memory.
build overlay.
| Slot | Value |
|---|---|
| DPA-side archive | libdoca_dpa_dev_comm.a (header doca_dpa_dev_comch_msgq.h) — part of doca-dpa, linked into the DPA image by dpacc; NOT a separate pkg-config module |
| Host link line | Do NOT add libdoca_dpa_dev_comm.a. The host link line stays as the parent ## build prescribes (-ldoca-dpa -ldoca-common). There is no host-side DPA-Comms cap call to include a header for; the substantive send / receive / signal calls live DPA-side |
| Version anchors | The single pkg-config --modversion doca-dpa MUST agree with the installed dpacc per the DOCA Compatibility Policy (there is no separate doca-dpa-comms.pc) |
modify overlay. Take the closest-fitting sample under
/opt/mellanox/doca/samples/doca_dpa/ and apply a minimum
diff. Slot fill on top of the parent's ## modify:
Pick the DPA-Comms primitive family the kernel uses (send / receive vs signal / event — separate setups; do NOT mix without re-reading the sample's setup).
The host-side launch argument shape carries the DPA-Comms endpoint handles; the host launch call and the DPA-side kernel signature MUST agree per the parent's two-side-program coupling rule.
If the modify introduces a new comm primitive, re-check
doca_dpa_dev_comch_msgq.hand the shipped sample that it exists on this BlueField generation + matched install (there is no hostdoca_dpa_comms_cap_*query to call); otherwise the first kernel launch surfacesDOCA_ERROR_NOT_SUPPORTEDon the host completion.Kernel-side cooperative back-off on
DOCA_ERROR_AGAIN: the kernel must yield (return from the launch, let the host drain viadoca_pe_progress, re-submit on the next launch) OR cooperatively back off if the kernel is persistent. A tight in-kernel retry loop pins the DPA processor and starves the host drain.Rebuild BOTH sides: DPA-side image via
dpaccAND the host executable that embeds it.
run / test overlay. Per the safety matrix in
CAPABILITIES.md ## comms:
One-send-one-receive smoke between two DPA threads in the same loaded
doca_dpa_app. Thread A issues ONE DPA-Comms send on an endpoint handle, thread B issues a matching receive on the same handle, the host observes the launch's completion throughdoca_dpa_completionwith no error. The parent smoke (a trivial kernel with NO DPA-Comms calls) MUST already pass first — if it does not, fix the parent skill, not the DPA-Comms code.Multi-message loop once the smoke is green: 100 sends, confirm the host sees all matching completions without losing any. Catches
_AGAIN-handling bugs — if the kernel does not yield correctly on a full DPA-side comms queue, throughput collapses or the host completion stream stalls.Unsupported-primitive negative test: write a kernel that calls a comm primitive the device header / sample shows is NOT on this BlueField generation + matched install, confirm
DOCA_ERROR_NOT_SUPPORTEDcleanly on the launch's completion — validates the agent read the supported-primitive surface correctly (there is no host cap-query to commit a budget).
debug overlay. Layered on the parent's ## debug
ladder:
DOCA_ERROR_AGAINon adoca_dpa_completionfor a DPA-Comms-calling kernel is always the DPA-side comms queue full. Recommend the cooperative back-off per the modify overlay above; confirm the host is draining the parent's progress engine. Do NOT recommend a tight in-kernel retry.DOCA_ERROR_NOT_SUPPORTEDis always a hardware-generation / matched-install mismatch. Confirm the DPA is exposed viadoca_dpa_cap_is_supportedand re-check the primitive indoca_dpa_dev_comch_msgq.h/ the shipped sample; there is nodoca_dpa_comms_cap_*query to re-run.DOCA_ERROR_BAD_STATEfrom a DPA-Comms call must be disambiguated from the parent's_BAD_STATE. The parent meaning is host-sidedoca_dpalifecycle violated; the DPA-Comms meaning is the DPA kernel called a comms primitive before its in-kernel comms surface was usable, or after kernel-side teardown. Walk the kernel-side initialization order in the shipped sample first.A DPA-Comms receive with no matching sender — or a signal-wait with no signaler — pins the kernel and the host sees no completion. Same shape as the parent's missing- kernel-exit case in
## modifyslot 6, layered with DPA-Comms semantics.
verbs
The DPA-Verbs-specific overlay on the parent verbs. EVERY workflow
below begins by re-confirming two things from
CAPABILITIES.md ## verbs: (a) the
4-way-matrix decision places the user in this corner (DPA-side,
raw verbs, latency-bound) AND (b) the parent host-side doca-dpa
flow is in scope. If either fails, stop and route back — do not
walk these overlays.
configure overlay.
Re-confirm the 4-way-matrix decision. Ask the user to name the specific RDMA op (RDMA read of a remote buffer, send to a peer, atomic CmpSwap, …) the DPA kernel will issue. This is the cheapest place to catch the "recommended DPA-side verbs unnecessarily" failure mode. If the user has not walked the matrix in
CAPABILITIES.md ## verbs, route back there before continuing.Confirm the host round-trip is the measured bottleneck. Ask for the latency data (profile, histogram, or per-op cost). If the user cannot point at a measurement, ask them to take one BEFORE writing any DPA-side code. A guess does not count. If the bottleneck is NOT the host round-trip, climb back up to
doca-rdma/SKILL.md(ordoca-verbs/SKILL.mdfor the host-side raw-verbs escape hatch whendoca-rdmadoes not expose the verb the user needs).Confirm the SPECIFIC verb is exposed on this device. There is NO
doca_dpa_verbs_cap_*host cap family. From host code, confirm a DPA is exposed viadoca_dpa_cap_is_supportedagainst the activedoca_devinfo, then confirm the specific verb / opcode the kernel will post exists on this BlueField generation + matched DOCA/DPACC install by readingdoca_dpa_dev_verbs.hand the shipped sample. The DPA-side translation unit cannot cap-query from inside the kernel, and there is no host-side per-verb query to substitute. If the verb is not exposed, that is the answer — the hardware does not expose it. Climb back up if a host-side alternative covers the case.Bring up the parent flow AND configure the RDMA QP(s) on the host. Per the host-configures-QP / DPA-uses-QP rule in
CAPABILITIES.md ## verbs, the QPs the DPA kernel posts against are created and configured by host code through## configure. Layer the QP create + configure on top per the transport the user picked (IB / RoCE). The DPA kernel receives QP handles as launch arguments or via DPA-visible memory; the agent must name the mechanism explicitly per the parent's two-side-program rule.Read the DPA-side verbs symbols from the user's install.
doca_dpa_dev_verbs_*symbols are install-bound on the DPA side; the agent must NOT quote them from memory. Direct the user to the DPA-side headerdoca_dpa_dev_verbs.h(per the DPACC guide viadoca-public-knowledge-map/SKILL.md) and to/opt/mellanox/doca/samples/doca_dpa/. Headers win over docs.Pick the completion topology. Host-side CQE inspection (default — the parent's
doca_dpa_completionsurfaces it) OR in-kernel completion polling on the DPA side (when the kernel must react to its own completions before exiting). Pick one per use case explicitly; do NOT mix them on the same CQ.
build overlay.
| Slot | Value |
|---|---|
| DPA-side archive | libdoca_dpa_dev_verbs.a (header doca_dpa_dev_verbs.h) — part of doca-dpa, linked into the DPA image by dpacc; NOT a separate pkg-config module |
| Host link line | Do NOT add libdoca_dpa_dev_verbs.a. The host link line stays as the parent ## build prescribes (-ldoca-dpa -ldoca-common). Adding the DPA-side verbs archive to the host link line is the "link line built, but my host program does not call any DPA-Verbs function" dead weight |
| DPACC step | The DPA-side translation unit calling the doca_dpa_dev_verbs_* primitives is compiled by dpacc into the binary embedded as the doca_dpa_app. The host system compiler is NOT a substitute |
| Version anchors | The single pkg-config --modversion doca-dpa MUST agree with doca_caps --version and the installed dpacc per the DOCA Compatibility Policy (there is no separate doca-dpa-verbs.pc) |
modify overlay. Pick a sample under
/opt/mellanox/doca/samples/doca_dpa/ whose shape matches
the user's intent (same DPA-side WR opcode pattern; same
completion topology; same host-configured QP transport). Slot
fill on top of the parent's ## modify:
Host-side QP configuration changes live in the host-side translation unit. For each added opcode / WR flag, confirm it is exposed on this device by reading
doca_dpa_dev_verbs.h/ the shipped sample BEFORE the kernel is rebuilt (there is nodoca_dpa_verbs_cap_*host query to call).DPA-side WR construction changes (opcode, target QP handle, memory region, flags, payload size) live in the DPA-side translation unit. Do NOT propose moving the WR construction to the host to "simplify" — that defeats the entire reason to use DPA-side verbs. Keep the post in the kernel.
The host launch call and the DPA-side kernel signature MUST agree on count, size, and type of QP handles / buffer addresses / peer info. Track any change as a single edit across both sides, not two.
Rebuild BOTH sides via
dpacc+ host build per the parent's do not partial-rebuild one side rule. Rebuilding only one side is the canonical way to introduceDOCA_ERROR_DRIVERat launch orDOCA_ERROR_INVALID_VALUEat the first DPA-side WR post.
run / test overlay. Per
CAPABILITIES.md ## verbs:
One DPA kernel launch, one DPA-side WR post, one completion. Host configures ONE QP, launches the kernel ONCE, the kernel posts exactly ONE WR (e.g. an RDMA read of a small buffer; matched on the peer when two-sided), the host drains exactly ONE completion through the chosen completion surface. If this fails, do NOT scale — narrow.
Re-confirm the specific verb is exposed on THIS device. Confirm via
doca_dpa_cap_is_supportedthat the DPA is exposed and re-checkdoca_dpa_dev_verbs.h/ the shipped sample for the specific verb / opcode the kernel posts (there is nodoca_dpa_verbs_cap_*host query). If it is not exposed, climb back up.Verify host-configures-QP / DPA-uses-QP coupling. If the kernel constructs a WR whose opcode / flag / payload size the host-configured QP cannot honor,
DOCA_ERROR_INVALID_VALUEis the result; fix the side that does not match and rebuild BOTH.On
DOCA_ERROR_IO_FAILED, inspect the CQE. The DPA-side post return value is NOT the answer; the CQE error field on the chosen completion surface IS.Streaming-launch loop ONLY after smoke is green, layering the parent's streaming-launch pattern from
## teststep 2 with the DPA-side WR repetition.
debug overlay. Layered on the parent's ## debug
ladder:
A DPA kernel launched, the kernel posts a
doca_dpa_verbs_*WR, and no completion ever surfaces: (a) the host is not progressing the PE / draining the completion (parent's## runstep 3); (b) the kernel is stuck mid-post or mid-poll with no termination condition; (c) the host-configured QP silently dropped the WR. Confirm the preconditions BEFORE assuming the DPA-side verbs surface itself is broken.On
DOCA_ERROR_IO_FAILEDsurfaced through the completion, the DPA-side post return value is not the answer. Direct the user to the CQE error field — same shape as the host-side raw-verbsdoca-verbs/SKILL.mdIO_FAILED.Two-side-program signature mismatch is the single highest-frequency DPA-Verbs program bug. The host configured a QP that cannot honor the WR the kernel posts (opcode not in the QP feature set, payload past the QP's max message size, flag not supported by the transport). Walk both sides together; rebuild BOTH.
DPA-side post against an unready QP returns
_BAD_STATE. The host-sidedoca-dpasetup created the QP but has not transitioned it through the state machine required to accept WRs. The DPA side cannot manufacture readiness — fix on the host.Climb-back check. Before exhausting a layer-6 debug session, ask: did the latency-bottleneck premise actually hold? Sometimes the cheapest fix is to retire the DPA-side RDMA path entirely for the affected subset and route the work back to host-side
doca-rdma/SKILL.md.
Deferred task verbs
The following verbs are out of scope for this skill but are commonly asked in the same conversations. Route them as follows so the agent does not invent guidance:
install. Installing DOCA, installing the DPACC compiler, choosing matched versions, post-install verification,
pkg-configwiring — defer todoca-setup/SKILL.mdand to the install-tree layout indoca-public-knowledge-map ## Layout of an installed DOCA package(doca-public-knowledge-map/SKILL.md#layout-of-an-installed-doca-package). This skill assumes DOCA + DPACC are already installed and matched.deploy. Deploying DPA-using applications at scale (multi-BlueField clusters, Kubernetes operator workflows for DPU workloads, multi-tenant DPA sharing) — out of scope for this skill. For single-host first-run testing, the right verb in this skill is
## run; do not invent a "deploy" workflow.DPA-side kernel programming and DPACC usage. Writing the kernel function body itself, DPA-side memory layout, DPACC compile flags, DPA-side debugging from inside the kernel — out of scope. Route via
doca-public-knowledge-map/SKILL.mdto the public DOCA DPA, DOCA DPACC Compiler, DOCA DPA Comms, and DOCA DPA Verbs guides plus the DPA Tools umbrella. This skill prescribes how to use the DPACC-produced image from the host; it does not redefine how to produce it.DPA device-side comm / verbs component surfaces (
libdoca_dpa_dev_comm.a/libdoca_dpa_dev_verbs.a). These are DPA-side archives shipped withindoca-dpa(NOT separate pkg-config modules): their symbols are called from inside the DPA kernel and linked bydpacc, not from the host. Route viadoca-public-knowledge-map/SKILL.mdto the public DOCA DPA Comms and DOCA DPA Verbs guides.
Command appendix
Every command below is cross-cutting on DOCA DPA — it answers a recurring class of question that comes up in the verbs above. The agent should treat the class as load-bearing; the worked example is a single instance. Run-as user is the unprivileged user unless noted. Rows that need elevated privileges call that out explicitly.
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:
Probe for the matching structured helper FIRST (
doca-env --jsonfor version + devices + libraries + drivers + hugepages in one shot;doca-capability-snapshotfor per-device capability flags;version-matrix.jsonfor "available since" lookups).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>".If the probe fails, fall back to the manual command in the row. Report "falling back to manual chain".
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 bydoca-version/SKILL.md.
| Command (worked example) | Owning step | Class of question it answers | What healthy output looks like |
|---|---|---|---|
pkg-config --modversion doca-dpa | ## configure step 1; ## build minimum-version slot | What is the build-time DOCA DPA host-side library version? | A semver string matching doca_caps --version. Disagreement = partial install (route to doca-version TASKS.md ## debug (doca-version/TASKS.md#debug) layer 2) |
pkg-config --cflags --libs doca-dpa | ## build | What include + link flags does the host-side linker need? | Trust whatever pkg-config --cflags --libs produces on this install. Do not hardcode either the -I include path or the -l<name> flag form — both can drift between DOCA install profiles and DOCA majors; the on-disk .so basenames use underscores, while the .pc package names use hyphens, and pkg-config is the only thing that resolves both correctly. Hand-crafted -l lines silently break when DOCA upgrades. |
which dpacc && dpacc --version (or the install-tree path) | ## configure step 1; ## build minimum-DPACC slot | Is the DPACC compiler installed and at what version? | A version string the agent compares against the DOCA Compatibility Policy linked from CAPABILITIES.md ## Version compatibility. Missing dpacc = the DPA-side translation unit cannot be built; route to doca-setup/SKILL.md |
doca_caps --list-devs | ## configure step 1; ## configure step 3 | Which DOCA devices does the host see, and which expose a DPA processor? | One entry per doca_dev with the BlueField identity and the per-library capability flags including the DPA support axis. No DPA-capable entry = the BlueField is not present, not in the right mode, or not on a generation that exposes the DPA; route to doca-setup/SKILL.md |
ls /opt/mellanox/doca/samples/doca_dpa/ | ## modify slot 1 | Which DPA samples ship in this install (both host-side AND DPA-side translation units), and which is the closest starting point? | A list of sample directories that each contain BOTH host-side and DPA-side source plus a meson.build that wires dpacc and pkg-config doca-dpa together |
dmesg | tail -n 40 (sudo) | ## debug layer 7 | What did the kernel / driver log around the last DPA call? | Empty or recent benign messages. Repeated mlx5 / DPA-driver errors → driver-layer bug; route to doca-setup ## debug (doca-setup/TASKS.md#debug) |
DOCA_LOG_LEVEL=trace ./<binary> | ## run step 4 | What did the structured DOCA logger emit for the first failing host-side DPA call? | A trace-level line on every host-side lifecycle transition and every launch submit. Silence after a launch submit = either host PE not progressed OR DPA kernel running but stuck — reach for the DPA-side tooling next |
(route via doca-public-knowledge-map/SKILL.md) DPA-side developer tools — DPA debugger, DPA process-state inspector, DPA statistics tool | ## debug layer 5; ## debug layer 6 | What is the DPA processor itself doing right now, from the DPA side? | The public DPA Tools umbrella documents the per-tool output; the agent's job is to NAME the existence of these tools and route the user there, not to redefine their surface |
For commands shared across libraries (pkg-config --modversion,
doca_caps, cat /opt/mellanox/doca/applications/VERSION,
DOCA_LOG_LEVEL) the cross-library overlay is in
doca-debug TASKS.md ## Command appendix (doca-debug/TASKS.md#command-appendix);
this table adds the DPA-specific rows on top.
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 installed at /opt/mellanox/doca on Linux (Ubuntu 22.04/24.04 or RHEL/SLES) with a BlueField DPU whose generation exposes the DPA processor to the host, plus the matching DPACC compiler at a version listed compatible by the DOCA Compatibility Policy. Reads `pkg-config --modversion doca-dpa` and the installed `dpacc` version, and inspects /opt/mellanox/doca/{lib,include,samples/doca_dpa,applications}. 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-dpa · 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-dpa.zip