All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- DCGM / dcgm-exporter support for the mock GPU stack.
nvmlDeviceGetFieldValuesnow backs theDCGM_FI_DEV_*field surface (ECC, remapped rows, memory temperature, and the NVLink field set), and a mock GPM implementation servesDCGM_FI_PROF_*profiling metrics on Hopper+ profiles — architecture-gated like real NVML, withgpm.supported/ PCIe-rate config overrides; pre-Hopper reports GPM unsupported. E2E coverage runs real dcgm-exporter under the GPU Operator via the Go harness (gpu-operatorscenario,dcgm/xidlabels): it asserts DEV + PROF and time-varying telemetry, plusDCGM_FI_DEV_XID_ERRORSunder failure injection.spike-dcgm.shprovides a container-level recipe. (#370)
- ComputeDomain simulation now runs the REAL
nvidia-imexdaemon in NO GPU mode (--nogpu) instead of the fake marker-file binaries: the newimex-nogpu-shiminjects the flag around upstream's hard-coded argv,Dockerfile.compute-domain-daemoninstalls the 595-branch package from Ubuntu jammy multiverse at LOCAL build time (never published), and the compute-domain demo asserts real gRPC domain readiness over the pod network, including peer-death detection. (#304) The chart's ibping NetworkPolicy now also admits the IMEX peer and command ports between nvml-mock pods (kind's kindnetd enforces NetworkPolicy on current releases, so the allow-list is load-bearing on Kind).
- Go pins bumped 1.26.4 -> 1.26.5 across the build (deployment and test
Dockerfiles, mocknvml/mockcuda Makefiles, e2e dispatch default, helper
scripts) to resolve
GO-2026-5856(Encrypted Client Hello privacy leak incrypto/tls), which was failing thegovulncheckCI check.
- The fake
nvidia-imex/nvidia-imex-ctlbinaries,pkg/imexcoord, and the chart'simex.enabledhostPath coordination — superseded by the real daemon's NO GPU mode; removal in a follow-up release. Both fakes print a deprecation notice (the ctl only on non-READY paths, to preserve the upstreamCombinedOutput == "READY\n"probe contract). (#304)
0.2.1 - 2026-06-12
- Release machinery: chart pushes to ghcr retry through the registry's tag
read-after-write lag (#390); image publishing now triggers on
v*tag pushes (apaths:filter silently suppressed every tag-triggered run) and supportsworkflow_dispatch(#391). - Stale Go pins bumped to 1.26.4 across the build (deployment and test
Dockerfiles, mocknvml/mockcuda Makefiles, e2e dispatch default, helper
scripts), unbreaking the documented
make docker-build; bundledkubectlbumped v1.32.0 -> v1.36.1, cutting the image's CRITICAL/HIGH CVE findings from that binary from 17 to 8. (#394) - mocknvml:
nvmlDeviceGetHandleByUUIDreturnsNOT_FOUNDfor unknown UUIDs; the legacy default UUID scheme no longer assigns device 0 the canonical nil UUID; thetests/mocknvmlharness builds again (broken since #269). (#395) - mockib hardening from review: peer-registration I/O carries deadlines
(one wedged peer no longer halts re-registration),
recvwaits are bounded and honor daemon shutdown, peer discovery and registration sweeps respect context cancellation, missing sysfsnode_guidno longer renders an all-zero NodeGUID, and steady-state re-register logging only fires on change. (#396)
0.2.0 - 2026-06-12
- New GPU profile
gb300modeling the NVIDIA GB300 NVL (Grace-Blackwell Ultra Superchip): 8 GPUs/node arranged as 4 Grace+2×B300 trays, 288 GiB HBM3e per GPU, 1.4 kW default TDP / 1.6 kW boost, PCIe Gen6, NVLink v5 with NVLink-C2C to Grace, FP4/FP6/FP8 + Transformer Engine, MIG-capable, and the Blackwell Ultra driver line (570.124.06). Ships with a canonical 4-digit-BDF layout and apcie_topology:block describing 4 PCI root complexes (one per Grace pair, 2 B300 GPUs each), so therender-pci-sysfsstep lights up an NVL72-shaped/sys/bus/pci/devicestree out of the box. Driver-version derivation, NOTES.txt profile list, fake-gpu-operator ConfigMap fanout, the e2e workflow profile matrix, and Helm unittests / Go profile-consistency tests were all extended to covergb300in lockstep with the existing profiles. - nvml-mock library-size padding: the built
libnvidia-ml.sois now padded in a dedicated.data.nvml_mock_paddingsection to land within ~10% of the real driver-shipped library (≈14 MiB for driver 550.x), so detection / security tools that sanity-check the NVML file size accept the mock. Configurable viaTARGET_LIB_SIZE(auto two-pass build, default), an explicitPADDING_BYTES, or fully disabled withNO_PADDING=1/BUILD_TAGS=nopaddingfor minimal images. No functional impact on the NVML API surface. (#247) - nvml-mock PCIe topology: profiles now carry a
pcie_topology:block describing PCI root complexes, NUMA nodes, and device-to-root mapping. A newrender-pci-sysfsbinary (built fromcmd/render-pci-sysfs/, schema and renderer inpkg/system/mockpcisysfs/) materializes a fake/sys/bus/pci/devices+/sys/devices/pciDDDD:BBtree under/var/lib/nvml-mock/sys/from the init container, so topology-aware consumers (NVIDIA DRA driver'sdra.k8s.io/pcieRoot, device-plugin NUMA hints) can resolve PCIe root complex viareadlink()+ path parse. Defaults populated for every profile:a100/b200/h100/l40s-> 2 root complexes (dual-socket),gb200-> 4 root complexes (one per Grace pair),t4-> 1 root complex. (#263) - Dynamic per-query metric sampling: utilization, temperature, power, and clocks vary plausibly across calls instead of returning static values. (#323)
- GPU failure injection: profiles can trip
ecc_uncorrectable,lost, andfallen_off_busmodes at runtime, including Xid 79 propagation. (#328) - ComputeDomain / NVLink fabric simulation:
nvmlDeviceGetGpuFabricInfo(+InfoV) driven by a cluster-level topology ConfigMap, plus fakenvidia-imex/nvidia-imex-ctlbinaries coordinating peer readiness through marker files on a shared volume. (#337, #342) - Toolkit-ready marker file for GPU Operator validator compatibility. (#346)
- nvml-mock profile
bus_idfields now use the canonical Linux sysfs 4-digit-domain form (0000:07:00.0) instead of the NVML 8-digitbusIdLegacyform (00000000:07:00.0). The bridge already returned the same string verbatim innvmlPciInfo.busId; the new format aligns the mock with what real Linux PCI sysfs exposes and is a hard prerequisite for the PCIe sysfs renderer above. (#263) - InfiniBand mock: real
ibstat,ibstatus,iblinkinfo, and otherinfiniband-diags/rdma-coretools now work inside the nvml-mock DaemonSet without IB hardware. Implementation:LD_PRELOADshim (libibmocksys.so) redirects libc filesystem accesses against/sys/class/infiniband*and/dev/infinibandto a fake tree rendered at startup bymock-ibfrom each profile's newinfiniband:block. Defaults:a100-> ConnectX-6 HDR;h100/b200/gb200-> ConnectX-7 NDR;l40s/t4-> disabled. - Cross-node
ibping,iblinkinfo, andibv_devinfoviamock-ib,libibmockumad.so, andlibibmockverbs.so. The chart preloads the shims, starts the in-pod daemon, and relays MAD traffic between nvml-mock pods over the Kubernetes pod network; the daemon and its Service are only created for profiles whoseinfiniband:block is enabled. E2E:tests/e2e/validate-ibping.shplus a multi-node ibping CI job. (#367) - Test suite standardized on
testify/requireacross all packages; softt.Errorfchecks upgraded to hard failures, expect-error assertions made explicit withrequire.Error. No test functions were added or removed. (#386)
docs/demo/standalone/demo.shno longer uses the bash 4mapfilebuiltin and runs on macOS's stock bash 3.2. (#385)- Helm chart OCI publishing: the cosign signing step now authenticates to GHCR via the Docker config and signs the chart by digest; chart signing had failed with UNAUTHORIZED on every publish since 2026-05-25. (#388)
0.1.0 - 2026-04-07
- Mock NVML library (
libnvidia-ml.so) with 400 C API exports (111 hand-written, 289 auto-generated stubs) - Mock CUDA library (
libcuda.so.1) with 15 functions - Real
nvidia-smibinary with RPATH patch backed by mock NVML - YAML-configurable GPU profiles: A100, H100, B200, GB200, L40S, T4
- Helm chart for DaemonSet deployment on Kubernetes
- CDI (Container Device Interface) spec generation for GPU Operator
- E2E test suites: Device Plugin, DRA Driver, GPU Operator, Multi-Node Fleet
- fake-gpu-operator integration (FGO-style labels and ConfigMaps)
- Standalone and with-fgo demo scripts
- Comprehensive documentation: quickstart, architecture, configuration, development guide, troubleshooting
- Rebranded from gpu-mock to nvml-mock (PRs #273, #274, #275, #281, #282)