Generated banner for Doca Dpa
Generated logo for Doca Dpa

Doca Dpa

NVIDIAOfficialCreated by NVIDIA

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

From the author

Use this skill when the user is doing hands-on DOCA DPA host-side work on a BlueField — creating the `doca_dpa` Core context, loading a DPACC-compiled DPA app image (`doca_dpa_app`), creating DPA threads, launching kernels via `doca_dpa_kernel_launch_update_*`, draining `doca_dpa_completion`, running `doca_dpa_cap_*` discovery, choosing between the DPA comm component (inter-DPA messaging) and the DPA verbs component (in-kernel RDMA), or debugging `DOCA_ERROR_*` from `doca_dpa_*`. Trigger even without "DOCA DPA" or "Data-Path Accelerator": "run compute on the DPA from my host", "DPA kernel hangs, no completion", "DOCA_ERROR_DRIVER on launch", "DOCA/DPACC version skew", or "does this BlueField expose a DPA". Route elsewhere for DPA-side kernel programming itself, DPACC compiler internals, host↔DPU messaging (doca-comch), host-side RDMA (doca-rdma), and GPU-initiated networking (doca-gpunetio).
— the description by NVIDIA

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

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/nvidia/doca-dpa/download
  2. Unzip 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_completion and 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_dpa against a doca_dev that maps to a BlueField with a DPA processor visible to the host.

  • Loading a DPA application image (doca_dpa_app) that dpacc produced from the user's DPA-side source, into the doca_dpa context.

  • 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_completion to observe when async DPA work finishes, and draining it from the host side.

  • Checking which DPA features are supported on the active doca_devinfo via the doca_dpa_cap_* family — BlueField generations differ in DPA hardware support.

  • Debugging a DOCA_ERROR_* returned from a doca_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_completion is attached, and the host is driving doca_pe_progress in 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 (header doca_dpa_dev_comch_msgq.h) — for inter-DPA-thread messaging or coordination signals between DPA threads on the same doca_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 only doca_dpa_cap_is_supported / doca_dpa_cap_get_max_kernel_time_alive_supported), error overlay (_AGAIN → kernel must yield; _BAD_STATE disambiguation from the parent's host-side _BAD_STATE), and the configure / build / modify / run / test / debug overlay live in ## comms and

    comms under this same skill.

  • Writing DPA-side kernel code that calls the DPA device-side verbs component libdoca_dpa_dev_verbs.a (header doca_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 from doca_dpa_dev_verbs.h and the shipped sample), the IO_FAILED → CQE-inspection overlay, and the climb-back rule live in

    verbs 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_dpa context, the loaded doca_dpa_app image produced by dpacc, the doca_dpa_thread execution context, the host-initiated kernel launch surface (doca_dpa_kernel_launch_update_*), the doca_dpa_completion mechanism, the capability-query surface (doca_dpa_cap_*), the DPA error taxonomy mapped onto the cross-library DOCA_ERROR_* set, the observability surface (host-side completions plus the public DPA developer tools surface reachable via doca-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 a Deferred task verbs block 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 in doca-programming-guide/SKILL.md, layered with the DPA-specific overrides in

    modify.

  • 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, where pkg-config --modversion doca-dpa and the installed dpacc are the two sources of truth.

  • A samples/, bindings/, or reference/ 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 of doca-dpa (NOT separate pkg-config modules): their symbols are called from inside the DPA kernel and linked into the DPA image by dpacc, not from the host. Their public guides are reachable via doca-public-knowledge-map/SKILL.md. This skill names them and routes; it does not redefine them.

Loading order

  1. Read this skill first to confirm the user's question is in scope (host-side DPA work, not DPA-side kernel-writing).

  2. For the DPA capability matrix, the doca_dpa per-instance context, the loaded doca_dpa_app image, the doca_dpa_thread execution 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.

  3. 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".

  • 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 compatibility cross-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-library DOCA_ERROR_* patterns; this skill layers DPA specifics on top.

  • doca-debug/SKILL.md — the cross-cutting debug ladder; this skill's ## debug adds 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

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:

  1. 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_dev accessible); the signature and smoke rows are checked later, in ## build and ## test. Any failing environment row is an env / version / mode fix via doca-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.

  2. 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 calls doca_dpa_*, and a DPA-side program (the kernel function bodies) that dpacc compiles into a binary the host executable embeds as a doca_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 via doca-public-knowledge-map/SKILL.md to the public DOCA DPA / DPACC / DPA-Comms / DPA-Verbs guides; do not redefine those surfaces here.

  3. 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.

  4. Create the doca_dpa Core context against the chosen doca_dev. This is a standard DOCA Core context create — the universal lifecycle from doca-programming-guide TASKS.md ## configure (doca-programming-guide/TASKS.md#configure) applies. Choose the doca_dev deliberately: a multi-BlueField host needs one doca_dpa per BlueField, not a "global" one, per the per-instance rule in CAPABILITIES.md ## Capabilities and modes.

  5. Load the DPA application image and create DPA execution contexts. Load the doca_dpa_app produced by dpacc from the user's DPA-side source into the doca_dpa; then create one or more doca_dpa_thread execution contexts on top. Start the doca_dpa via doca_ctx_start(). Per the lifecycle ordering in CAPABILITIES.md ## Safety policy, record the order so teardown happens in reverse: stop / destroy doca_dpa_thread → release the loaded doca_dpa_app → destroy the doca_dpa → close the doca_dev.

  6. Attach a doca_dpa_completion before launching anything. Per the launch + completion section in CAPABILITIES.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.

  7. 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; which doca_dpa_thread each 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:

SlotValueWhy it matters
pkg-config module namedoca-dpaThe 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 toolchaindpacc (DPACC compiler), installed alongside DOCACompiles 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 flagspkg-config --cflags doca-dpa for the host side; the DPACC-prescribed include path for the DPA sideResolves 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 flagspkg-config --libs doca-dpa on the host side, plus the DPACC-prescribed embed step that bakes the DPA-side binary into the host executablePulls 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 libsdoca-argp for arg parsing in samples; the shipped samples include both host-side and DPA-side translation unitsThe 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 linelibdoca_dpa_dev_comm.a, libdoca_dpa_dev_verbs.aThese 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 versionQuery with pkg-config --modversion doca-dpa; never hardcodeCross-version build/runtime mixing breaks per CAPABILITIES.md ## Version compatibility
Minimum DPACC versionCross-check the installed dpacc version against the DOCA Compatibility Policy linked from CAPABILITIES.md ## Version compatibilityMismatched 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.

SlotWhat the agent asks the userDPA-specific consideration
1. Starting sampleWhich 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 bodyWhat 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 shapeWhat 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 contextsOne 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 topologyHow 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 kernelHow 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 sidesAfter any modify, rebuild the DPA-side image via dpacc AND rebuild the host executable that embeds itPer 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:

  1. 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 function dpacc did not compile in, that is a build-side bug, not a launch-side bug; route back to ## build.

  2. Submit the launch from the host via the matching doca_dpa_kernel_launch_update_* call against the chosen doca_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 in CAPABILITIES.md ## Capabilities and modes, the host must drain the attached doca_dpa_completion to know the kernel actually finished.

  3. Drive the host-side doca_pe_progress loop 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.

  4. Capture the structured log on first failure. Set DOCA_LOG_LEVEL=trace for the first run (see doca-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 in CAPABILITIES.md ## Observability and routed via doca-public-knowledge-map/SKILL.md to 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:

  1. 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 ## debug layer 5 and consult the DPA-side tooling. Per the safety-policy rule in CAPABILITIES.md ## Safety policy, DO NOT scale a broken smoke into a high-throughput design.

  2. 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_AGAIN from the host-side submit means the completion queue is full and the host must drain faster, OR the queue is undersized — per ## modify slot

  3. Multi-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 in CAPABILITIES.md ## Capabilities and modes, one thread per stream of launches is the right pattern.

  4. 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_VALUE cleanly — validates that the agent's earlier two-side-program signature check is real, not just notional. Then restore the matched signatures.

  5. 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 reported DOCA_ERROR_NOT_SUPPORTED matches the dual capability discovery from ## configure step 3 — validates the agent's capability-discovery itself is correct.

Eval-loop overlay — why this is a loop, not a one-shot pass:

Iteration triggerWhat it looks likeWhat changes next iteration
DOCA_ERROR_NOT_SUPPORTED on a BlueField the agent expected to workDOCA cap-query failed against the active doca_devinfoThe 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 launchDOCA + DPACC versions are skewed OR the DPA-side image was built against a different DOCA install than the host runtimeRe-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 hangsThe host is not draining the completion queue fast enough OR the completion queue is too smallRaise 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 silentThe 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 teardownA doca_dpa_thread still has an in-flight kernel that never exitedWalk 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_thread is full and being silently dropped at the host's failure to drain. Confirm the env-side preconditions per ## configure step 1 and the host-side progress per ## run step 3 before assuming the DPA itself is broken.

  • DOCA_ERROR_AGAIN from doca_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 ## modify slot 6.

Layer 6 (program) — DPA overlay.

  • Lifecycle ordering: the doca_dpa_thread objects must be destroyed BEFORE the loaded doca_dpa_app is released; the loaded doca_dpa_app must be released BEFORE the doca_dpa itself is destroyed. Out-of-order returns DOCA_ERROR_BAD_STATE per CAPABILITIES.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 via dpacc after re-aligning the signatures, then rebuild the host executable; do not patch only one side. See the do not partial-rebuild one side rule in CAPABILITIES.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_thread per launch, that is the bug. Refactor to persistent-thread + stream-of-launches per the anti-pattern note in CAPABILITIES.md ## Capabilities and modes.

Layer 7 (driver) — DPA overlay.

  • DOCA_ERROR_DRIVER from doca_dpa_* is most often the DPA driver layer reporting failure to DOCA, and most often because DOCA + DPACC are skewed. Capture pkg-config --modversion doca-dpa, the installed dpacc version, and doca_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_SUPPORTED at doca_dpa create time. Route to doca-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.

  1. Confirm DPA-side scope, not host-side. The user is writing the DPA-side translation unit dpacc compiles into the doca_dpa_app. If the user wanted host ↔ DPU messaging, that is doca-comch/SKILL.md; if they wanted host-to-remote RDMA, that is doca-rdma/SKILL.md. Route there before any DPA-Comms code per the routing rule in CAPABILITIES.md ## comms.

  2. 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 ## test step 1 — the parent smoke. A broken parent flow surfaces as a broken DPA-Comms launch later. Fix via ## configure first; do NOT start DPA-side comms code on a broken parent.

  3. Confirm the DPA is exposed and the install is matched. Per the capability rule in CAPABILITIES.md ## comms, there is NO doca_dpa_comms_cap_* host cap family — host-side DPA discovery is only doca_dpa_cap_is_supported / doca_dpa_cap_get_max_kernel_time_alive_supported. Run doca_dpa_cap_is_supported against the active doca_devinfo to confirm a DPA is exposed, then confirm the comm primitives the kernel will use exist on this BlueField generation + matched install by reading doca_dpa_dev_comch_msgq.h and the shipped sample. Cross-check the single pkg-config --modversion doca-dpa agrees with the installed dpacc (there is no separate doca-dpa-comms.pc); quote both back to the user.

  4. 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.

SlotValue
DPA-side archivelibdoca_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 lineDo 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 anchorsThe 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.h and the shipped sample that it exists on this BlueField generation + matched install (there is no host doca_dpa_comms_cap_* query to call); otherwise the first kernel launch surfaces DOCA_ERROR_NOT_SUPPORTED on the host completion.

  • Kernel-side cooperative back-off on DOCA_ERROR_AGAIN: the kernel must yield (return from the launch, let the host drain via doca_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 dpacc AND the host executable that embeds it.

run / test overlay. Per the safety matrix in CAPABILITIES.md ## comms:

  1. 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 through doca_dpa_completion with 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.

  2. 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.

  3. 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_SUPPORTED cleanly 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_AGAIN on a doca_dpa_completion for 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_SUPPORTED is always a hardware-generation / matched-install mismatch. Confirm the DPA is exposed via doca_dpa_cap_is_supported and re-check the primitive in doca_dpa_dev_comch_msgq.h / the shipped sample; there is no doca_dpa_comms_cap_* query to re-run.

  • DOCA_ERROR_BAD_STATE from a DPA-Comms call must be disambiguated from the parent's _BAD_STATE. The parent meaning is host-side doca_dpa lifecycle 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 ## modify slot 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.

  1. 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.

  2. 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 (or doca-verbs/SKILL.md for the host-side raw-verbs escape hatch when doca-rdma does not expose the verb the user needs).

  3. 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 via doca_dpa_cap_is_supported against the active doca_devinfo, then confirm the specific verb / opcode the kernel will post exists on this BlueField generation + matched DOCA/DPACC install by reading doca_dpa_dev_verbs.h and 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.

  4. 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.

  5. 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 header doca_dpa_dev_verbs.h (per the DPACC guide via doca-public-knowledge-map/SKILL.md) and to /opt/mellanox/doca/samples/doca_dpa/. Headers win over docs.

  6. Pick the completion topology. Host-side CQE inspection (default — the parent's doca_dpa_completion surfaces 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.

SlotValue
DPA-side archivelibdoca_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 lineDo 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 stepThe 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 anchorsThe 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 no doca_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 introduce DOCA_ERROR_DRIVER at launch or DOCA_ERROR_INVALID_VALUE at the first DPA-side WR post.

run / test overlay. Per CAPABILITIES.md ## verbs:

  1. 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.

  2. Re-confirm the specific verb is exposed on THIS device. Confirm via doca_dpa_cap_is_supported that the DPA is exposed and re-check doca_dpa_dev_verbs.h / the shipped sample for the specific verb / opcode the kernel posts (there is no doca_dpa_verbs_cap_* host query). If it is not exposed, climb back up.

  3. 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_VALUE is the result; fix the side that does not match and rebuild BOTH.

  4. 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.

  5. Streaming-launch loop ONLY after smoke is green, layering the parent's streaming-launch pattern from ## test step 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 ## run step 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_FAILED surfaced 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-verbs doca-verbs/SKILL.md IO_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-side doca-dpa setup 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-config wiring — defer to doca-setup/SKILL.md and to the install-tree layout in doca-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.md to 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 within doca-dpa (NOT separate pkg-config modules): their symbols are called from inside the DPA kernel and linked by dpacc, not from the host. Route via doca-public-knowledge-map/SKILL.md to 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:

  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).

  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.

Command (worked example)Owning stepClass of question it answersWhat healthy output looks like
pkg-config --modversion doca-dpa## configure step 1; ## build minimum-version slotWhat 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## buildWhat 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 slotIs 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 3Which 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 1Which 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 7What 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 4What 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 6What 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