2.3 KiB
2.3 KiB
nvbandwidth: single all-GPU pass in Validate, per-NUMA-node matrix only in the deep tier
Date: 2026-08-31 Status: active Amends: 2026-07-27-nvbandwidth-per-socket-split.md
Context
2026-07-27 made RunNvidiaBandwidthPack split dcgmi diag -r nvbandwidth
using Linux PCI numa_node locality, followed by an all-GPU pass. A NUMA node
is not assumed to be identical to a physical CPU socket.
Two problems showed up on an 8x H200 NVL / dual-socket EPYC box
(210619KUGGXGS2000008):
SATEstimatedNvidiaBandwidthSecassigns 2700 seconds to one all-GPU pass. Three such invocations are assigned 8100 seconds, which is outside the intended Validate duration.- The split silently never engaged anyway:
normalizeNvidiaBDFreturned nvidia-smi's upper-case PCI BDF (0000:CB:00.0) while/sys/bus/pci/devicesentries are lower-case, soreadPCINumaNodefailed for every GPU on a bus with a hex letter andgpuBandwidthSocketGroupsfell back to one group.
Decision
normalizeNvidiaBDFnow lower-cases (and trims) the BDF, so sysfsnuma_node/ link-speed reads actually resolve.RunNvidiaBandwidthPacktakes afullMatrix bool. The only thing it changes is which GPU set eachnvbandwidthinvocation gets via-i- the command itself is untouched (no extra flags, no testcase filtering).- Validate (
stress_mode=false) ->fullMatrix=false: one pass,-i <all selected GPUs>. No NUMA-locality split. - Stress / deep (
stress_mode=true) ->fullMatrix=true: the2026-07-27behaviour - one pass per resolved NUMA-node group, then one all-GPU pass. If any selected GPU has no resolved NUMA node, the code does not guess a group and falls back to the single all-GPU pass.
- Validate (
task_runnerpassest.params.StressModethrough.
Consequences
- Validate schedules exactly one nvbandwidth invocation regardless of NUMA-node count.
- The NUMA-locality isolation from
2026-07-27is preserved, just moved to the tier where a 2-3x runtime is acceptable. DO NOT re-add the split to the Validate path. SATEstimatedNvidiaBandwidthSecstill reflects a single pass; the deep tier's multi-pass duration is not modelled - revisit once real multi-node deep-run logs exist (same open item as2026-07-27).