cdi generate: a per-function spec for ConnectX network functions (nvidia.com/nic)
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 35/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- go, linux
- Domain
- infrastructure
Research direction
Start from the existing --mode mofed path in nvidia-ctk cdi generate, which the issue names as the closest existing mode, and add a nic mode beside it. Walk the sysfs paths listed in the issue (/sys/bus/pci/devices/<bdf>/infiniband, /sys/class/infiniband_verbs, /sys/class/infiniband_mad) to build the per-function devices, sorted by PCI address. Done when the generated spec for a host with several ConnectX functions matches the JSON example, including Ethernet-only functions with an env entry and no device nodes.
Written by the indexing model from the issue text.
Description
Why
Kata runtime-rs annotates every ConnectX function it passes through to a VM as
cdi.k8s.io/vfio<N>: nvidia.com/nic=<index>, indices in guest PCI order
(src/runtime-rs/crates/resource/src/cdi_devices/mod.rs, row 0x15b3-0x020).
kata-agent resolves those names against /var/run/cdi before it creates the
container and fails the container after 100 s without a match. Nothing in the
guest writes a spec of that kind today, so any pod with a ConnectX PF or VF,
and the HGX Service VM holding the four NVSwitch management PFs, cannot start
its container under runtime-rs.
The GPU side has this covered: the guest init runs nvidia-ctk cdi generate
and the agent resolves nvidia.com/gpu=<index>. The NIC side needs the same
producer. --mode mofed is not it: it emits kind nvidia.com/gpu, one device
named all, every /dev/infiniband/uverbs* plus rdma_cm, no per-function
devices and no indices.
Ask
A discovery mode nic (name open) that emits, for every PCI function with
vendor 0x15b3 and base class 0x02 (Ethernet 0x0200 and InfiniBand
0x0207 alike, PF or VF), sorted by PCI address:
{
"cdiVersion": "0.6.0",
"kind": "nvidia.com/nic",
"devices": [
{"name": "0", "containerEdits": {"env": ["NVIDIA_NIC_0=0000:04:00.0"],
"deviceNodes": [{"path": "/dev/infiniband/issm0"}, {"path": "/dev/infiniband/rdma_cm"},
{"path": "/dev/infiniband/umad0"}, {"path": "/dev/infiniband/uverbs0"}]}},
{"name": "1", "containerEdits": {"env": ["NVIDIA_NIC_1=0000:05:00.0"], "deviceNodes": ["..."]}}
]
}
- Device
<index>is the function's position in PCI-address order; that is the
order runtime-rs uses (sort_devices_by_guest_pcipath), and the same per-VM
index contract the GPU spec already relies on. - Nodes come from the function's InfiniBand devices:
/sys/bus/pci/devices/<bdf>/infiniband/<ibdev>, then every
/sys/class/infiniband_verbs/uverbs*/ibdevand/sys/class/infiniband_mad/{umad,issm}*/ibdev
equal to<ibdev>, plus/dev/infiniband/rdma_cmwhen present. A function
without an InfiniBand device (Ethernet with RDMA off) still gets its device
entry, so the index set stays complete; the env entry keeps the device valid
(CDI rejects a device with no edits) and tells the container which function
device<index>is. - No NVML requirement: the Service VM has no GPU.
--mode mofedalready runs
without a driver ("Could not determine driver version ... ignoring").
Verified shape
A guest-side generator producing exactly this document was run on an HGX B300
with kata runtime-rs's row in place: the agent resolved four devices, injected
all of them, the container was Running 49 s after apply, and PID 1 carried
NVIDIA_NIC_0..3 with the guest addresses in root-port order. The document
above is that output. The generator is a bridge in the guest init (NVIDIA/nvrc#245)
and should be replaced by this toolkit mode.
- Dominant language
- Go
- Stars
- 4.6k
- Forks
- 609
- Avg merge
- 3d 8h
- Merged PRs (30d)
- 36
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from NVIDIA/nvidia-container-toolkit
-
[Bug]: Containers with NVIDIA_VISIBLE_DEVICES=all fail to start in jit-cdi mode when every GPU is bound to vfio-pciPossibly taken @efegokdemir claimed this 8 days ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
NVIDIA/nvidia-container-toolkit#2163 ·
Maintainers usually reply within 1 day
-
Address TODO comments in internal/platform-support/dgpu/dgpu.goPossibly taken @truongbo17 claimed this 34 days ago. Opendsx-ws-0930 good-first-issue
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
NVIDIA/nvidia-container-toolkit#2114 · 1 comment ·
Maintainers usually reply within 1 day
-
[Bug]: Containerized installer removes the existing Toolkit installation before the replacement is complete and durablePossibly taken @henry118 claimed this 14 days ago. Openbug
Difficulty 4/5 3-5 days Newbie friendliness 48/100
NVIDIA/nvidia-container-toolkit#2153 · 2 comments · 1 assignee ·
Maintainers usually reply within 1 day
-
Difficulty 3/5 1-2 days Newbie friendliness 78/100
NVIDIA/nvidia-container-toolkit#2147 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 4/5 3-5 days Newbie friendliness 47/100
NVIDIA/nvidia-container-toolkit#2137 ·
Maintainers usually reply within 1 day
All issues in NVIDIA/nvidia-container-toolkit
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
SAP/crossplane-provider-btp#1175 ·
Maintainers usually reply within 1 day
-
adk: stream concatenation errors bypass retry and failoverPossibly taken @OUAO-FRANK claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
google/osv-scalibr#2586 ·
Maintainers usually reply within 2 days
-
needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
stacklok/toolhive-catalog#1890 ·
Maintainers usually reply within 1 day
-
heap: pushing an item that is already queued corrupts the indexPossibly taken @lbarrosby claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
kubernetes-sigs/kwok#1800 ·
Maintainers usually reply within 1 day