Generated banner for Doca Urom Svc
Generated logo for Doca Urom Svc

Doca Urom Svc

NVIDIAOfficialCreated by NVIDIA

  • Skill
  • Tool integration
  • Cloud and DevOps
  • Apache-2.0
  • Medium risk

From the author

Operate the DOCA UROM Service container on BlueField Arm for remote memory operations (puts, gets, atomics, collectives) enqueued by a paired host using `doca-urom`: pull the NGC image, choose the UCX component, size queues, configure Comch pairing, and align host and service versions. SECURITY: the service has no standalone access control; Comch pairing and RDMA permissions are the boundary. Pair only intended hosts, expose least-privilege memory regions, and verify both views before start. Trigger for slow UCX collectives, unexpected NOT_PERMITTED, or missing completions. Do not use for host application code, MPI/UCX integration design, or DOCA install.
— the description by NVIDIA

AutoGineer summary

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

The DOCA UROM Service is a DPU-side containerized service that executes remote memory operations (puts, gets, atomics, and collectives) offloaded by host applications using the doca-urom library. It operates as a paired executor, requiring strict version alignment between the host library and the DPU service. The service does not implement standalone access control; security is managed via DOCA Comch pairing and underlying RDMA permissions. This skill provides the operational framework for deploying, configuring, and debugging the service container on BlueField Arm, ensuring that HPC workloads can effectively offload communication tasks to the DPU.

What it does

  • Deploys and manages the DOCA UROM Service container on BlueField Arm.
  • Configures UCX components and collective exposure based on hardware capabilities.
  • Establishes and validates DOCA Comch pairing between the host and the DPU service.
  • Sizes enqueue queues to optimize offload performance.
  • Monitors service health and RDMA transport status to diagnose offload failures.
  • Enforces version compatibility between the host-side library and the DPU-side service.

When to use it

  • When deploying HPC clusters that utilize doca-urom for offloading collective communication.
  • When troubleshooting performance issues where offloaded collectives are slower than host-CPU baselines.
  • When diagnosing communication failures or NOT_PERMITTED errors between a host and the DPU.
  • When configuring the DPU-side service to expose specific collective families to the host.
  • When verifying the integrity of the paired-contract between the host library and the service container.

Advantages

  • Offloads compute-intensive communication tasks from host CPUs to the DPU.
  • Provides a structured approach to managing paired-contract services on BlueField.
  • Enables fine-grained control over UCX component exposure and queue depth.
  • Ensures secure operation through Comch pairing and least-privilege RDMA access.
  • Facilitates systematic debugging of complex offload-path failures.

Usage examples

“How do I configure the DOCA UROM Service to support all-reduce collectives?”
The agent will guide you to the configuration-axes section of the capabilities companion to identify the required UCX component flags and the corresponding config-authoring steps in the tasks companion.
“My host application receives DOCA_ERROR_NOT_PERMITTED when calling doca_ctx_start. Is the service blocking me?”
The agent will direct you to the layered ladder in the tasks companion to verify Comch pairing and RDMA permissions, clarifying that the error is a transport-level signal rather than a service-side authz block.

Install

  1. Download the skill as a ZIP:

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

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

Documentation by NVIDIA

DOCA UROM Service

Scope first. This skill operates the DPU-side service container. Writing the host-side application code that submits offloaded operations (from an MPI or UCX job, for example) is not this skill: route it to doca-urom/SKILL.md, the host library, and come back here only for the service it pairs with.

Examples

  • "Slow UCX collectives on a BlueField pair." — this is in scope for the DPU-side service container; host app code belongs to the doca-urom library skill.

  • "Unexpected NOT_PERMITTED after start." — verify Comch pairing and least-privilege memory regions before widening exposure.

Instructions

Follow Loading order below. Open the tasks companion for configure / pair / debug. Open the capabilities companion for queues and UCX components.

Where to start: This skill is for operating the DOCA UROM Service container on the BlueField Arm side. It is not for linking against a library, and it is not the host-side enqueue surface. If the user wants to deploy or run the service container, start at the tasks companion ## configure. If the question is what shape of service is DOCA UROM Service, what does it execute, and how does it pair with the host-side library, start at the capabilities companion. If DOCA is not installed on the BlueField yet, route to doca-setup/SKILL.md first. If the user's real question is about writing host-side code that enqueues remote memory operations through the paired API, the right skill is doca-urom/SKILL.md — the host-side library; this service is the DPU-side executor that library offloads to.

How to use this skill. Read this file, then search the companion file for the ## <name> heading the question needs and read that whole section. Answer completely from it, quoting only its symbols and commands. Do not browse docs; use the entry points in doca-public-knowledge-map. For out-of-scope requests, name the skill that owns them and stop.

Example questions this skill answers well

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

  • "Is DOCA UROM Service the right thing to deploy on my BlueField, or do I just need the host library?" — worked example: "my MPI cluster's host nodes link against doca-urom; what runs on the BlueField side and why must it also be there?". Answered by the publisher / executor paired-contract model in the capabilities companion

    • the deploy-this-when path-selection rule in the capabilities companion

    • the env-prep checklist in the tasks companion.

  • "Which library / service version pair am I supposed to run together?" — worked example: "the host fleet upgraded to a newer doca-urom; do I have to upgrade the service containers on every BlueField, or is the pairing flexible?". Answered by the version-contract overlay in the capabilities companion

    • the paired-version step in the tasks companion + doca-version/SKILL.md as the canonical body.

  • "What does the service configure — UCX components, collectives, queue depths, how the host pairs over Comch?" — worked example: "my upstream stack wants to offload all-reduce collectives; how do I tell the service to expose that collective family and how does the host pair to it over DOCA Comch?". Answered by the configuration-axes table in the capabilities companion

    • the config-authoring step in the tasks companion.

  • "Host's doca-urom calls fail with NOT_PERMITTED even though doca_dev access is fine — is this the service?" — worked example: "first enqueue from host returns DOCA_ERROR_NOT_PERMITTED after a clean doca_ctx_start()". Answered by the Comch-pairing / RDMA-permissions layer in the capabilities companion

    • the layered ladder in the tasks companion, which surfaces "is the DOCA Comch endpoint pair correctly established and is the underlying RDMA permission stack happy" BEFORE blaming a service-side authz layer (no such layer exists in the shipped binary — NOT_PERMITTED here is a Comch / RDMA signal, not a UROM-service authz signal).

  • "Operations enqueue but never complete — service or substrate?" — worked example: "host enqueue succeeds, the progress engine never sees the completion, what layer is hung". Answered by the service-vs-substrate split in the capabilities companion

    • the layered ladder in the tasks companion, which separates service queue full / handler stuck from underlying RDMA transport down before recommending a fix on either side.

  • "Performance with offload is worse than the host-CPU baseline — is the service the bottleneck?" — worked example: "we deployed the service, the workload runs, but collectives are slower than when the host CPU posted them itself". Answered by the offload-isn't-free rule in the capabilities companion

    • the smoke-before-scale step in the tasks companion, which surfaces the workload's pattern may not actually benefit from DPU offload as a legitimate diagnosis, not a service bug.

Audience

This skill serves external operators and platform teams who deploy and operate the DOCA UROM Service container on BlueField to receive and execute the remote memory operations HPC / UCX / MPI workloads on the host enqueue through doca-urom. Concretely: people running the service container on BlueField Arm, choosing which UCX components and collectives it exposes, sizing the enqueue queue depth, wiring the DOCA Comch endpoint pairing between host doca-urom and the service container (the shipped binary has NO standalone service-side "host-endpoint authorization list" — access is governed by Comch pairing + the underlying RDMA permissions), and validating the host-library + DPU-service paired contract end-to-end before scaling a real HPC workload on top.

It is not for NVIDIA developers contributing to the DOCA UROM Service itself, nor a programming guide for building on DOCA libraries (see doca-programming-guide/SKILL.md). DOCA UROM Service is a service, not a library: the operator deploys a container and configures it; there is no lib<uromservice>.so to link. The paired host-side library doca-urom/SKILL.md is a separate skill with its own audience (HPC application developers, not service operators); refuse to collapse the two.

Path selection up front. Deploy this service when the HPC cluster's host nodes use the doca-urom library and want host CPU freed for compute by offloading collective communication to the BlueField, when the team is building a custom HPC stack on top of doca-urom, or when an upstream MPI / UCX stack has been wired to use UROM as a transport. Do not deploy this service when the hosts are not using doca-urom, when the HPC stack is neither MPI nor UCX (this service won't help — it executes UROM-shaped offloads, not arbitrary networking), or when the BlueField hardware is too constrained for the intended offload (a cap-query at deploy time surfaces this upfront). Deploying speculatively where host workloads will not offload through doca-urom adds operational complexity with no benefit.

When to load this skill

Load this skill when the user is doing hands-on DOCA UROM Service deployment work on a BlueField where DOCA is already installed. Concretely:

  • Deciding whether DOCA UROM Service is the right answer for the user's HPC environment (vs. keeping the host CPU on the communication path with raw doca-rdma or with no DPU offload at all).

  • Deploying the service container on BlueField Arm — pulling the image per the public DOCA UROM Service Guide, setting the daemon's CLI flags / env (SERVICE_ARGS, UROM_PLUGIN_PATH) and mounting the plugins/ directory, starting / stopping the container under the BlueField container runtime per the public Container Deployment Guide.

  • Choosing the service's configuration axes — which UCX components / collectives the service exposes (cap-bound to what the BlueField generation supports), enqueue queue depths for the offload path, and how the host's doca-urom library pairs to the service over DOCA Comch (access is governed by that Comch pairing + the underlying RDMA permissions — there is no service-side authorization list). Pair only explicitly intended hosts and keep RDMA exports and permissions to the minimum the workload requires; pre-start verification through the documented Comch and RDMA read-only surfaces is mandatory.

  • Confirming the host-library + DPU-service version pair is one the DOCA Compatibility Policy supports — a mismatch is the canonical subtle-failure mode for the paired contract.

  • Reading the service container's logs, the service's observability surface, and the underlying RDMA substrate counters to confirm the service is actually executing the operations the host enqueued.

  • Debugging a deployment where the container is healthy but the host's doca-urom enqueues fail or never complete, or where the offload's performance is worse than the host-CPU baseline.

Do not load this skill for general DOCA orientation, install of DOCA itself, host-side doca-urom library API questions, or non-UROM HPC stack topics. For those, route via doca-public-knowledge-map/SKILL.md, doca-setup/SKILL.md, or the matching host-side library skill doca-urom/SKILL.md.

What this skill provides

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

  • the capabilities companion — the service's architecture (long-running container on BlueField Arm that executes UROM offloads from paired hosts), the publisher / executor paired-contract model and its load-bearing version-coupling rule, the configuration axes (UCX-component / collective surface, enqueue queue sizing, DOCA Comch endpoint pairing), the deployment shape (container on BlueField Arm per the public Container Deployment Guide), the pairing surface (host doca-urom library + underlying doca-rdma transport substrate), the observability surface (container state + service logs + RDMA counters), the error taxonomy (container-runtime vs service-side-resource vs transport-substrate vs paired-version-mismatch), and the safety policy (path-selection rule, version-contract rule, smoke-before-scale).

  • the tasks companion — step-by-step workflows for the in-scope service verbs: configure, build, modify, run, test, debug, plus a Deferred task verbs block routing out-of-scope questions and a Command appendix of recurring commands.

The skill assumes a BlueField where DOCA is already installed and the operator has the privileges the public DOCA UROM Service Guide expects to pull, run, and configure containers on BlueField Arm. It does not cover installing DOCA — that path goes through doca-setup/SKILL.md. It does not cover the host-side doca-urom library API — that is doca-urom/SKILL.md.

What this skill deliberately does not ship

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

  • Pre-baked DOCA UROM Service flag / env bundles (full UCX-component / collective exposure manifests, ready-to-run queue-depth SERVICE_ARGS strings) intended to be copy-pasted into production. Service configuration is deployment-specific (per the BlueField generation's capability cap, per the workload's collective pattern); the safe answer for an external operator is to derive the daemon's flags / env from the public DOCA UROM Service Guide against their own deployment. The agent's job is to prescribe the procedure and the configuration-axes decision, not to ship a config the user might run unmodified.

  • Container image names, tags, or registry paths. The authoritative image source is the public DOCA UROM Service Guide reachable through doca-public-knowledge-map ## DOCA services (doca-public-knowledge-map/SKILL.md#doca-services); the service's image tag is version-bound and changes between DOCA releases AND must match the host-side library version per the paired-contract rule. Inventing or memorizing a tag is the canonical hallucination failure mode for a service skill, and for this service in particular it can silently produce a host-library / service version mismatch.

  • Host-side doca-urom application source code, build manifests, or MPI / UCX integration glue. Those live on the host and belong to doca-urom/SKILL.md (host library API) or to upstream MPI / UCX documentation (stack-side integration). This skill names that the host side must be wired through doca-urom and that the version must pair with the service; the host-side bodies are out of scope.

  • A samples/, templates/, or reference/ subtree of any kind. A mock artifact labeled "reference" reads as production-ready, and for a paired-contract service that implicitly claims a host-library version pairing the skill cannot guarantee.

Loading order

  1. Read this skill first to confirm the user's question is in scope and that the DOCA UROM Service is the right answer at all (vs. routing entirely to the host-side library skill, or away from UROM if the workload doesn't actually benefit from offload).

  2. For the service's deployment shape, the publisher / executor paired-contract model, the configuration axes, the host-library + RDMA-substrate pairing surface, the error taxonomy, the observability surface, the version-coupling rule, and the path-selection safety policy, see the capabilities companion.

  3. For step-by-step workflows — configure, build, modify, run, test, debug — see the tasks companion.

  • doca-urom/SKILL.md — the paired host-side library. Hosts link doca-urom to ENQUEUE remote memory operations; this service EXECUTES them. The two skills load together for any HPC offload deployment and they do NOT collapse into one another: the library never executes on its own; this service is never enqueued through by itself. Mismatches between the library and the service are the dominant subtle-failure mode for the paired contract.

  • doca-rdma/SKILL.md — the underlying RDMA transport substrate this service uses to actually move bytes once a host enqueue lands on the DPU. The service does NOT replace RDMA; it sits on top of it. A failing RDMA fabric surfaces at the service as operations enqueued but never complete and at the host as DOCA_ERROR_IO_FAILED; the fix is on the substrate side, not in this service's config.

  • doca-public-knowledge-map/SKILL.md — the routing table to the public DOCA UROM Service Guide and the rest of the public DOCA documentation set. The service URL is listed under ## DOCA services (doca-public-knowledge-map/SKILL.md#doca-services).

  • doca-setup/SKILL.md — env preparation and install verification on the BlueField where the service container will run, including the I have no install yet path via the public NGC DOCA container. This skill assumes its preconditions are satisfied on BlueField Arm.

  • doca-version/SKILL.md — canonical DOCA version-handling rules. This service's container tag is version-bound AND its host-library pairing is version-bound; this skill's ## Version compatibility cross-links the four-way match rule and adds the host-library + DPU-service paired-version overlay that is load-bearing for UROM.

  • 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 — general DOCA patterns. The DOCA UROM Service is service-shaped not library-shaped, so the build / modify / first-app pattern there does not apply directly, but the cross-library debug discipline (env-before-program, layer-before-config) remains useful when the service reports an error that originated in the container runtime or in a DOCA library it called.

  • doca-debug/SKILL.md — the cross-cutting debug ladder (install / version / build / link / runtime / program / driver). Service-specific debug (container not running, host-library / service version mismatch, transport substrate down, offload not actually helping) overlays on top of that ladder.

  • doca-dms/SKILL.md and doca-firefly/SKILL.md — sibling service skills. The agent reading these skills should see the same service-skill shape (container on BlueField Arm, public Container Deployment Guide as the canonical recipe, env preconditions checked first, configured via the documented per-service surface — for UROM that is the daemon's CLI flags / env, not a mounted config file — smoke-before-scale) layered on top of a different per-service problem domain (DMS = device management via gNMI / gNOI; Firefly = time synchronization via PTP; UROM Service = HPC remote memory operation execution via the paired doca-urom library).

Files

CAPABILITIES.md

DOCA UROM Service — Capabilities

Where to start: The pattern overview below names the recurring DOCA-UROM-Service-class operational patterns. Pick the pattern first, then drill into the H2 that owns the substance. For the how of executing each pattern, jump to TASKS.md.

This file enumerates the DOCA UROM Service's documented capabilities, deployment shape, configuration axes, and operational behaviors as described in the public DOCA UROM Service Guide. Treat it as a map of what is documented, not a substitute for reading the live page when configuring a real deployment. For the public URL itself, route through doca-public-knowledge-map ## DOCA services (doca-public-knowledge-map/SKILL.md#doca-services) — this skill does not duplicate the URL routing.

Pattern overview

Every DOCA-UROM-Service-class question this skill teaches resolves into one of SIX patterns. The patterns are CLASSES — they apply across every service deployment, not just one BlueField generation or one MPI / UCX consumer.

Service patternClass shapeWhere the substance lives
1. Walk the publisher / executor paired-contract model firstEvery UROM deployment has TWO components: host-side doca-urom library (publisher) and DPU-side service (executor); both must be present at versions the DOCA Compatibility Policy supports, before the first host enqueue can land## Capabilities and modes paired-contract table + ## Version compatibility paired-version overlay
2. Decide whether to deploy this service at allDeploy when host nodes use doca-urom and want CPU freed for compute; do NOT deploy when hosts don't use the library, when the stack isn't MPI / UCX, or when the BlueField generation is too constrained for the intended offload## Safety policy path-selection rule + ## Capabilities and modes deployment shape
3. Pick the service's configuration axesUCX-component / collective surface (cap-bound to the BlueField generation) + enqueue queue depth + DOCA Comch endpoint pairing with the host doca-urom library — three axes the operator commits to BEFORE starting the container. Note: there is NO standalone service-side "host-endpoint authorization list" in the shipped binary (allowed_host / allowed_users / auth_token / whitelist / access_list / NOT_PERMITTED); access is governed by Comch pairing and the underlying RDMA permissions, not a UROM-service authz surface## Capabilities and modes configuration-axes table
4. Honor the underlying RDMA transport substrateThe service uses doca-rdma (the underlying RDMA / RoCE / IB substrate) to actually move bytes; the service does NOT replace RDMA; substrate failures surface inside the service as stalled operations and at the host as DOCA_ERROR_IO_FAILED## Capabilities and modes substrate row + ## Error taxonomy transport layer
5. Map a service symptom back to its layerContainer-runtime vs service-side resource (queue / handler stuck) vs underlying RDMA substrate vs paired-version mismatch — four independent layers, each with its own owner## Error taxonomy layered split
6. Read the service's observability before changing configContainer state + service-side logs + DPU-side RDMA counters answer "is the service actually executing what the host enqueues" before any config knob is turned## Observability

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

  • The host-library + DPU-service paired contract is load-bearing. The DOCA UROM Service does nothing on its own — its inputs are operations enqueued by the paired host-side doca-urom library. An agent that walks a user through this service in isolation, without naming the paired host library and the version-coupling rule, has the model wrong for every deployment. The corollary: a perfectly healthy service container that does not pair with any host's doca-urom version is operationally indistinguishable from a misconfigured one.

  • Operate the documented path; do not invent one. The service's CLI-flag / env surface, container image source, supported UCX components / collectives, and queue-sizing knobs are all documented in the public DOCA UROM Service Guide. Quoting daemon flags, image tags, UCX component names, or container-runtime flags not in the public guide is the most common hallucination failure mode for this skill.

Capabilities and modes

Service shape

DOCA UROM Service is a long-running container that ships from NGC and runs on the BlueField Arm cores. The container is the daemon: it owns the service-side execution state for UROM offloads, receives enqueued operations from paired host processes through the DOCA contract, and dispatches them onto the underlying RDMA substrate. There is no host-side service binary the user installs — the service is the container; the host's relationship to the service is to enqueue operations through the doca-urom library.

Three architectural properties the operator must hold throughout:

  • The service is the EXECUTOR; the library is the PUBLISHER. Per the paired-contract model below, the service's purpose is to execute remote memory operations that host processes have enqueued through doca-urom. The service does NOT execute operations the library didn't enqueue, does NOT discover work on its own, and does NOT drive the host's progress engine. Conflating the two is the single most common UROM-deployment design error.

  • The container is the unit of deployment. Operators do not start the service as a host binary; they start the service container per the public Container Deployment Guide pattern (same shape as every other DOCA service container — see the sibling doca-dms/SKILL.md and doca-firefly/SKILL.md for the same shape on different per-service domains).

  • Service behavior is configured by CLI flags and env, not by a mounted config file. The daemon binary (doca_urom_daemon) parses its options through DOCA's doca_argp (e.g. --max-msg-size / -m, and the log level -l / --sdk-log-level, passed via the container's SERVICE_ARGS), and reads the plugin search path from the UROM_PLUGIN_PATH environment variable. doca_urom.yaml mounts only the plugins/ directory and the log directory — there is no mounted service config file. The agent should quote the daemon's actual flags from the public guide / --help, NOT invent config-file keys.

Publisher / executor paired-contract model

DOCA UROM Service is one half of a TWO-component contract. The host-side doca-urom library publishes operations; this service executes them. Both halves must be present at versions the DOCA Compatibility Policy supports, before any operation can flow.

SideWhat runs thereArtifactWhat this skill covers
Host side (publisher)C / C++ (or any language that can FFI a C library) using doca-urom to enqueue remote memory operations, integrated into the user's HPC / UCX / MPI stack on the hostdoca-urom library — covered by doca-urom/SKILL.md; pkg-config doca-urom is the build-time anchor on the hostThis skill NAMES the library and routes to its skill; it does NOT redefine the library surface. A service running on a BlueField with no host paired through doca-urom is operationally idle, not "ready"
DPU side (executor)A long-running container on the BlueField Arm side that receives the host's enqueued operations and EXECUTES them against the remote-side memory and RDMA fabric, freeing the host CPU for computeDOCA UROM Service container — this skillAll of ## Capabilities and modes / ## Error taxonomy / ## Observability / ## Safety policy below

The agent's rule: when the user asks "how do I write host-side code that enqueues UROM operations / how do I size the per-context queue on the host / how do I drive doca_pe_progress for completions", that is the host-library question and the right artifact is doca-urom/SKILL.md. When the user asks "how do I deploy / start / stop / scale the service on the BlueField / how do I configure which UCX components it exposes / how does the host pair over DOCA Comch", that is this skill's scope. Two distinct artifacts; two distinct surfaces.

Deployment shape

The public DOCA UROM Service Guide documents the container deployment on BlueField Arm. The shape lines up with every other DOCA service container — pull from NGC, set the daemon's CLI flags / env (SERVICE_ARGS, UROM_PLUGIN_PATH) and mount the plugins/ directory, start under the documented runtime (the BlueField OS's container manager per the public Container Deployment Guide). For the canonical container-deployment recipe shared with the other DOCA service containers, route through doca-public-knowledge-map ## DOCA services (doca-public-knowledge-map/SKILL.md#doca-services).

Two deployment-shape rules:

  • BlueField Arm only. The DOCA UROM Service is a BlueField-side service; it does not run on the host. The host's relationship to the service is via the DOCA contract carried over doca-urom and the underlying RDMA fabric.

  • One service per BlueField. The service drives the BlueField's UROM execution state for the BlueField as a whole. The daemon reaches the host over DOCA Comch and moves bytes over the underlying doca-rdma substrate; there is no service listen-port the operator chooses — the control transport is the Comch endpoint pair, and the daemon allocates its internal worker ports automatically. Running two service containers competing for the same execution state on the same BlueField is a configuration error, not a redundancy strategy.

Configuration axes

Every DOCA UROM Service deployment must commit to three configuration axes before starting the container. Get any one wrong and the service either rejects host enqueues, stalls them silently, or accepts them but cannot actually execute the operation family the host intended. The axes are jointly documented in the public DOCA UROM Service Guide; quote the exact valid values from there rather than from memory.

AxisClass shapeMismatch symptomWhere to look
UCX-component / collective surfaceWhich UCX components and collective primitives this service instance exposes for host offload — cap-bound to what the underlying BlueField generation supports, NOT freely selectableHost's doca_urom_cap_* claims the collective is supported (host library + device say yes), but runtime enqueue returns DOCA_ERROR_NOT_SUPPORTED because the service was not configured to expose that collective on this deploymentPublic DOCA UROM Service Guide's component / collective configuration section
Enqueue queue depthThe depth of the service-side queue that receives host enqueues; sized to the cluster's intended in-flight depth per hostHost enqueues start succeeding, then return DOCA_ERROR_AGAIN after N submits; OR, on the service side, the queue backs up and the host's progress engine sees a stallPublic DOCA UROM Service Guide's queue / sizing section
DOCA Comch endpoint pairingHow the host's doca-urom library reaches this service — over a DOCA Comch endpoint pair (the daemon defaults to the BlueField's Comch device/representor). Because there is no service-side authorization list, pair only the explicitly intended host endpoint(s); a broad or ambiguous pairing expands who can drive remote memory operationsHost's doca_ctx_start cannot establish, the daemon never logs the intended connection, or an unintended host can pair — a Comch-pairing / device-mapping problem, not a service authz decisionPublic DOCA UROM Service Guide's connection / Comch section; doca-comch/SKILL.md for pairing verification
Underlying RDMA substrate (fourth, configured outside this service)The service does NOT stand up the RDMA fabric; it consumes it. The BlueField's doca-rdma substrate must be healthy on the ports this service will useOperations enqueued, never complete; or completions surface as DOCA_ERROR_IO_FAILED at the host APIRoute to doca-rdma/SKILL.md for the substrate-layer configure / debug

The RDMA side follows least privilege: export only the memory regions the intended UROM operation requires, with only the documented access permissions needed for that operation. Do not broaden an export or grant read/write/atomic permissions merely to make bring-up easier.

The agent's rule: the configuration-axes decision precedes container start. A deployment that starts the container before the operator can name which UCX components / collectives the service exposes, what queue depth supports the intended in-flight load, and how the host pairs over DOCA Comch is going to debug the wrong axis first. Force the decision up front.

Pairing surface — host library plus RDMA substrate

The DOCA UROM Service sits in the middle of two paired surfaces; neither is optional and the agent must surface both:

Paired surfaceWhy this service depends on itPairing shape
Host-side doca-urom libraryThis service has no inputs except what the paired host library enqueues; a service running with no host paired through doca-urom is operationally idle. See doca-urom/SKILL.mdHost links doca-urom and creates a doca_urom Core context against the doca_dev mapping to the BlueField running this service; the host enqueues operations, this service receives and executes them, the host's progress engine harvests completions
Underlying RDMA transport substrate (doca-rdma)The service moves bytes through the underlying RDMA fabric; the service does NOT replace RDMA. A failing RDMA fabric surfaces inside the service as stalled execution and at the host as DOCA_ERROR_IO_FAILED. See doca-rdma/SKILL.mdThe service uses the BlueField's doca-rdma substrate on the ports the operator configures; substrate health is the operator's joint responsibility with the network team — the service won't paper over a broken fabric

The agent's rule: when the user mentions the host doca-urom library or the RDMA fabric in the same breath as this service, name BOTH paired surfaces in the same response. Naming only one is how the deployment's actual failure layer gets misattributed — host symptoms blamed on the service, service symptoms blamed on the substrate, substrate symptoms blamed on the library.

Version compatibility

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

The DOCA-UROM-Service-specific overlay is the load-bearing version-coupling rule:

  • The host-side library version and the DPU-side service version must agree per the DOCA Compatibility Policy. This is the single most consequential version axis the agent must surface for any UROM deployment: a host-side doca-urom upgraded without the DPU-side service being upgraded (or vice versa) does NOT fail loudly — it fails subtly, often as DOCA_ERROR_NOT_SUPPORTED for an operation family that DOES exist on one side but not the other, or as silent stalls on collectives that one side believes the pair supports. Surface BOTH pkg-config --modversion doca-urom on the host AND the service container tag on the BlueField; cross-check them against the DOCA Compatibility Policy. This pairing is what the cross-cutting overlay in doca-urom CAPABILITIES.md ## Version compatibility (doca-urom/CAPABILITIES.md#version-compatibility) documents on the host side; this skill documents the same pairing from the service side.

  • The service container tag is the runtime version anchor. Same pattern as doca-dms/SKILL.md and doca-firefly/SKILL.md: the service container ships from NGC with its own tag that may lag the BlueField host's DOCA package version, and the relevant version anchor for an as-deployed service is the container tag pulled, not pkg-config --modversion on the BlueField. Always quote both versions when the user reports a service behavior; if they diverge, route to doca-version TASKS.md ## debug (doca-version/TASKS.md#debug) layer 2 before diagnosing the service behavior itself.

  • The exposed UCX-component / collective surface is version-bound. Which collective primitives the service can expose (all-to-all, all-reduce, broadcast, …) is jointly conditional on the service container version, the BlueField generation, and the underlying DOCA install. When the user asks "does this collective work on my deployment?", the authoritative answer is the public DOCA UROM Service Guide page whose version matches the container tag pulled — NOT agent memory and NOT a guess from a different DOCA release.

  • Read the public DOCA UROM Service Guide version header. The guide is versioned; the on-page version must match the container tag the operator is using. A mismatch between the docs version and the container tag is the canonical "my config doesn't match what the docs say" failure mode and often masquerades as a paired-version mismatch with the host library.

Error taxonomy

DOCA UROM Service errors fall into four layers, each with its own owner. The agent's rule: walk the layers in order; do NOT skip down without clearing the layer above. Notably, the host-visible DOCA_ERROR_* for a service-side cause is documented on the host side in doca-urom CAPABILITIES.md ## Error taxonomy (doca-urom/CAPABILITIES.md#error-taxonomy); this table maps each host-visible symptom back to the service-side layer the operator must touch.

LayerSymptom (host-visible)Root cause classWhere to fix
1. Container runtimeContainer fails to start, restart-loops, exits immediately, image pull fails. Host symptom: doca_urom create or doca_ctx_start fails because there is no reachable serviceImage tag wrong, registry credentials missing, BlueField container runtime not configured for this container, plugins/ mount path wrong or UROM_PLUGIN_PATH unsetBlueField container runtime + the public Container Deployment Guide via doca-public-knowledge-map/SKILL.md
2. Service-side resource exhaustionHost enqueues succeed; completions never fire; OR after N successful enqueues every further enqueue returns DOCA_ERROR_AGAIN indefinitelyService-side queue is undersized for the in-flight depth the host workload generates, OR the service is processing operations one at a time when it could batch, OR a service-side handler is stuck on a single in-flight operationService config — the queue-depth row in ## Capabilities and modes; service logs (this skill's ## Observability) to identify a stuck handler
3. Underlying RDMA substrateHost sees DOCA_ERROR_IO_FAILED from enqueue or completion; or enqueue succeeds but completions never fire and the substrate counters show errorsThe underlying RDMA fabric has reported failure (link down, RoCE / IB config skew between BlueFields, routing issue inter-node). The service is NOT the source of truth for the substrate; it is the surface that exposes the failureRoute to doca-rdma TASKS.md ## debug (doca-rdma/TASKS.md#debug) for the substrate-layer diagnosis; do NOT mask substrate failures inside the service config
4. Paired-version mismatchHost's doca_urom_cap_* claims an operation family / collective is supported, but runtime enqueue returns DOCA_ERROR_NOT_SUPPORTED (despite a healthy container)Host library and service container are at versions the DOCA Compatibility Policy does not support pairing — the cap query answered for the host's library + device axis, but the running service is at a different version that does not actually execute that variantCross-check both versions against the DOCA Compatibility Policy and the four-way-match rule in doca-version/SKILL.md. The fix is either upgrading the service container or downgrading the host library; do NOT paper over with a retry

The agent's rule: never recommend a service config change without first identifying which of the four layers is the cause. The most common debug failure for this skill is misreading a layer-4 symptom (host-library / service version mismatch) as a layer-2 (queue / handler) problem and chasing config knobs that cannot fix it. A second trap: a host-visible DOCA_ERROR_NOT_PERMITTED is a DOCA Comch-pairing / RDMA-permission signal (or a host-side doca_dev access problem), NOT a service-side authorization rejection — there is no such authz layer in the shipped binary.

Observability

Documented observability surfaces the agent should reach for, in order of how cheaply they answer the "is the service actually executing what the host enqueued" question:

  1. Container state. First — is the service container actually running on the BlueField? The BlueField container manager reports container status, restart count, and the container's stdout / stderr log stream. A restart loop is a layer-1 (container runtime) symptom per ## Error taxonomy; diagnose it before touching any service config. A non-running container makes every host-side doca-urom call meaningless.

  2. Service-side logs. The container's stdout (and any documented log destination the public DOCA UROM Service Guide specifies) is the primary service observability surface. Look for: (a) queue-saturation or handler-stuck lines (layer 2); (b) underlying-substrate-error lines (layer 3); (c) paired-version-mismatch lines if the service detects an incompatible host (layer 4). The agent should NOT invent log line formats; quote what the live container is emitting.

  3. Host-side completion surface. The host's doca-urom library reports operation completions through the DOCA progress engine. The host-side observability is documented in doca-urom CAPABILITIES.md ## Observability (doca-urom/CAPABILITIES.md#observability); the service-side reading of "how many operations did we actually execute" is read from the service's own logs and from the substrate counters below. When the host says "submitted N, completed M" and the service says it executed K, the differences between N / M / K identify which layer is dropping work.

  4. Underlying RDMA substrate counters. When the service-side surface shows operations being received but the user reports the remote-side memory does not have the expected bytes, the right diagnostic is the substrate counters per doca-rdma CAPABILITIES.md ## Observability (doca-rdma/CAPABILITIES.md#observability) on each BlueField in the path. The agent must NAME the existence of this surface and route the user there; the per-counter details belong in the substrate skill.

  5. Version snapshot at deploy time. The service container tag, pkg-config --modversion doca-urom on the paired host(s), and the BlueField's doca_caps --version are the baseline of "which paired-version pair the operator deployed". Save them; if a runtime failure later looks like a layer-4 paired-version mismatch, the diff against this baseline (one side upgraded, the other didn't) is the bug.

For the cross-library debug-time observability (DOCA_LOG_LEVEL, --sdk-log-level, the trace build flavor — relevant when the service calls into a DOCA library that emits structured logs), see doca-debug CAPABILITIES.md ## Observability (doca-debug/CAPABILITIES.md#observability).

Safety policy

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

The DOCA UROM Service's safety surface is path-selection first, then the version-contract rule, then the smoke-before-scale rule, then the operational disciplines around the container itself.

  • Path-selection rule (load-bearing). Deploy this service ONLY when the HPC environment actually benefits from DPU offload of remote memory operations. Concretely:

    • Deploy when the host fleet uses the doca-urom library AND the workload pattern (MPI / UCX collectives, dense remote-memory traffic) is one where host-CPU cost of posting RDMA work is the bottleneck AND the BlueField generation in use can support the intended UCX components / collectives.

    • Do NOT deploy when the host fleet is not using doca-urom, when the HPC stack is neither MPI nor UCX (this service won't help — it executes UROM-shaped offloads, not arbitrary networking), or when the BlueField generation is too constrained to expose the intended offload surface. In those cases the right answer is to keep the host's existing communication path and explicitly tell the user "this service is the wrong tool here; here's why" — not to deploy it speculatively and end up debugging an offload that was never going to help.

  • Version-contract rule (load-bearing). The host-side doca-urom library version and this service's container tag are a paired contract — see ## Version compatibility. A service deployment that does not name the paired-host library version, OR that proceeds against a pair the DOCA Compatibility Policy doesn't support, will fail subtly: not with a loud refusal at deploy time, but with DOCA_ERROR_NOT_SUPPORTED on operations one side believed the pair supports, or with silent stalls on collectives. The agent must always surface BOTH versions and the policy check up front.

  • Cap-query at deploy time. Before declaring the service ready, the operator must confirm that the BlueField generation in use, the DOCA install on the BlueField, and this service version actually expose the UCX components / collectives the host workload intends to offload. The device-side cap surface is the authoritative answer for "can this BlueField even host this offload" — see the device-axis row of the cap query the host runs via doca-urom CAPABILITIES.md ## Capabilities and modes (doca-urom/CAPABILITIES.md#capabilities-and-modes); the answer must agree with the service's exposed surface or the deployment is misconfigured before any host enqueue.

  • Smoke before scale. Before pointing the full HPC workload at the service, the operator must walk a smoke: service container running on the BlueField; ONE paired host's doca-urom doca_ctx_start succeeds against this BlueField; ONE host enqueue (a simple put or get) is observed at the service (in logs) AND ONE completion fires on the host's progress engine. Only then layer the collective patterns on top. A workload that comes up before the smoke passes does not isolate which of the four layers in ## Error taxonomy is wrong, and bisection across container / queue / substrate / version becomes much harder.

  • One service per BlueField. Two service containers on the same BlueField competing for the same UROM execution state is a configuration error; the agent must NOT recommend it as a redundancy strategy. UROM redundancy is a cluster-side concern (multiple BlueFields, multiple service instances each owning their own BlueField) that does not require multiple service containers on one DPU.

  • Don't paper over a transport-substrate problem from the service. When the symptom is "operations enqueued, never complete" and the layer is "underlying RDMA substrate down" per ## Error taxonomy, the honest answer is "the RDMA fabric isn't carrying the traffic; the fix is at the substrate, not in this service's config". Silently masking a substrate failure inside the service — by, e.g., shortening timeouts to make the host see the failure faster — is a user-visible regression dressed up as helpfulness.

  • There is no service-side authorization model to invent. Access to the service is governed by the DOCA Comch endpoint pairing and the underlying RDMA permissions, not by any service-side authorization list, credential, or per-host allow-list in the shipped binary. The agent must NOT propose authentication / authorization schemes the service does not implement; a host-visible DOCA_ERROR_NOT_PERMITTED is a Comch / RDMA / doca_dev signal, not a UROM-service authz decision.

  • Intended-host-only pairing is the access boundary. Before start, identify the exact host endpoint(s) permitted to pair, verify that mapping through the documented read-only doca-comch/SKILL.md surface, and refuse startup when the pairing is broad, ambiguous, or shows an unintended peer.

  • RDMA exports are least privilege. Export only the memory regions needed by the intended workload and grant only its required read, write, or atomic permissions. Verify the documented doca-rdma capability, connection, and permission state through doca-rdma TASKS.md ## test (doca-rdma/TASKS.md#test) before service start; never use a wider export as a diagnostic shortcut.

  • Pre-start substrate gate. Container start is blocked until both checks are green: the Comch view identifies only the intended host pairing, and the RDMA view confirms the intended peer, narrowly scoped exports, required permissions, and healthy transport. Capture both read-only outputs as the pre-start evidence.

Public-source pointer

The single canonical public source for the DOCA UROM Service is the DOCA UROM Service Guide, reachable through doca-public-knowledge-map ## DOCA services (doca-public-knowledge-map/SKILL.md#doca-services). Verify that the version of the guide matches the service container tag pulled on the BlueField AND that the host-side doca-urom library version pairs with that container tag per the DOCA Compatibility Policy — the service's config surface, supported UCX components / collectives, queue knobs, and observability output are documented to evolve, so config keys and exposed surfaces can change between releases.

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: BlueField-Arm-only DOCA service container; pulled from NVIDIA NGC and started under the BlueField OS container runtime. Host-side install is irrelevant — the host's relationship to this service is via the paired `doca-urom` library over a `doca-rdma` substrate. 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-urom-svc · commit fce3cca
Licence
Apache License 2.0 (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE-APACHE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by NVIDIA.

Download ZIP

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