Vera Rubin, and reading any new machine
Each NVIDIA generation changes the numbers: link speeds, memory sizes, domain size. The OS model mostly stays the same. This module lines up every machine you have or will meet, from your 4090 to Vera Rubin NVL72, on the same axes: how the GPU reaches CPU memory, who manages GPU memory, how big the NVLink domain is, and how slow the way out is. Then it works through what Vera Rubin's numbers change for offload, MoE and inference serving.
1Six machines, one model
What it is. Four questions place any GPU machine for the OS. (1) How does the GPU reach CPU memory? Through PCIe and pinned buffers, or coherently with ATS. (2) Who manages GPU memory? The driver alone, or the kernel too (NUMA mode). (3) How big is the NVLink domain? That's the set of GPUs that can load and store into each other's memory. (4) What is the way out? The NIC bandwidth per GPU, and whether it can DMA to GPU memory. Step through the machines below and watch which answers change.
2Side by side
| RTX 4090 box | DGX Spark | HGX H100 | GB200 NVL72 | GB300 NVL72 | Vera Rubin NVL72 | |
|---|---|---|---|---|---|---|
| CPU | x86 (i9-13900K) | GB10 Arm, 10 X925 + 10 A725 | 2 × x86 (e.g. Xeon 8480C) | Grace, 72 × Neoverse V2 | Grace | Vera, 88 Olympus cores / 176 threads |
| CPU memory | 64 GB DDR5 | 128 GB LPDDR5x, shared with GPU, 273 GB/s | up to 2 TB DDR5 | ≤480 GB LPDDR5X, ≤512 GB/s per Grace | same | ≤1.5 TB LPDDR5X (SOCAMM), ≤1.2 TB/s per Vera |
| CPU↔GPU | PCIe Gen4 x16 | on-package C2C; one physical memory | PCIe Gen5 x16 | NVLink-C2C 900 GB/s bidir, Grace ↔ 2 GPUs | same | NVLink-C2C 1.8 TB/s, Vera ↔ 2 GPUs |
| Coherent / ATS | no | yes (integrated) | no | yes | yes | yes |
| GPU memory | 24 GB GDDR6X, ~1 TB/s | (the same 128 GB) | 80 GB HBM3, 3.35 TB/s | 186 GB HBM3e, ~8 TB/s | 288 GB HBM3e (20 TB per rack), ~8 TB/s | 288 GB HBM4, ~22 TB/s |
| NVLink domain | none | none | 8 GPUs, 900 GB/s each (NVLink 4) | 72 GPUs, 1.8 TB/s each (NVLink 5) | 72, 1.8 TB/s | 72, 3.6 TB/s each (NVLink 6); 260 TB/s rack |
| Scale-out per GPU | — | ConnectX-7, 200 Gb/s per box | ConnectX-7 400 Gb/s | ConnectX-7 400 Gb/s | ConnectX-8 800 Gb/s | ConnectX-9 1.6 Tb/s |
| NVLink ÷ NIC (per GPU) | — | — | 18× | 36× | 18× | 18× |
| GPUDirect RDMA | no (GeForce) | no (use cudaHostAlloc) | yes | yes | yes | expected yes |
| OS hosts per domain | 1 | 1 | 1 | 18 | 18 | 18 (expected) |
The NVLink ÷ NIC row uses bidirectional NVLink against unidirectional NIC line rate, i.e. 1.8 TB/s ÷ 50 GB/s = 36 for GB200. That's the ratio that sets how much it's worth keeping traffic inside the domain. (Module 5 §7 used per-direction NVLink, 18×. Pick one convention and stick to it.)
3Vera: 88 cores, 176 threads, "spatial" multithreading
What it is. Vera is NVIDIA's first custom Arm core design (Olympus, Armv9.2), replacing Grace's licensed Neoverse V2. Each Vera has 88 cores, 2 MB L2 per core, a large shared L3, up to 1.5 TB of LPDDR5X on replaceable SOCAMM modules at up to 1.2 TB/s, PCIe Gen6 and CXL 3.1. The OS-relevant novelty is Spatial Multithreading: two hardware threads per core, so Linux sees 176 CPUs. NVIDIA describes it as physically partitioning core resources between the two threads rather than time-slicing them, the way x86 Hyper-Threading does.
lscpu -e and /sys/devices/system/cpu/cpu*/topology/thread_siblings_list tell you which logical CPUs share a core, the same as on x86. Expect torchrun's default OMP_NUM_THREADS=1 and NUMA binding (--numa-binding in recent PyTorch, or numactl) to matter even more with 176 logical CPUs per socket. drills/m3_cpu.sh jitter is the experiment to run on a Vera node: pinned with the sibling idle vs pinned with the sibling noisy.4NVLink-C2C at 1.8 TB/s: when does offload pay?
What it is. A Vera Rubin superchip is 1 Vera + 2 Rubin GPUs: 1.5 TB of LPDDR5X plus 2 × 288 GB of HBM4. NVIDIA markets that as "2 TB of fast memory" because C2C makes the LPDDR coherent and GPU-addressable at 1.8 TB/s. Offload means keeping optimizer states, KV cache or cold weights in CPU memory and moving them over that link. It is limited by the link and by CPU memory bandwidth, which both GPUs on the superchip share.
CPUOffloadPolicy and DeepSpeed ZeRO-Offload implement the CPU-side scenario. Inference engines' KV-cache offload (CPU swap space, LMCache-style tiers) implements the third. On coherent machines, check whether these libraries use pinned cudaHostAlloc buffers and copy engines (they work everywhere), or can take advantage of direct SM access to LPDDR (coherent only). Also check where the CPU-side buffers land. In NUMA mode an unbound offload buffer can end up in HBM (M5 §3), which defeats the purpose.5NVLink 6 and MoE all-to-all
What it is. NVLink 6 doubles per-GPU NVLink bandwidth to 3.6 TB/s and keeps the 72-GPU domain. A Vera Rubin switch tray has four NVLink 6 switch chips (28.8 TB/s) with in-network compute for SHARP reductions, and the rack totals 260 TB/s. NVIDIA's headline claim is up to 2× all-to-all throughput for MoE. All-to-all is the collective where domain size matters most: with uniform routing, a token's expert is outside your NVLink domain with probability (EP − d)/EP.
6NICs, DPUs and the KV-cache memory tiers
What it is. Vera Rubin pairs each GPU with 1.6 Tb/s of ConnectX-9 (800 Gb/s ports) and adds BlueField-4: a DPU that packages a 64-core Grace with a ConnectX-9, 128 GB of its own memory, NVMe-oF offload (NVIDIA claims 20 M 4K IOPS) and inline crypto. NVIDIA positions it as the host for an inference context memory storage tier: KV cache that has fallen out of GPU and CPU memory but is cheaper to fetch than to recompute.
/dev/infiniband in containers, and NUMA-local pinned buffers.7Rubin CPX and disaggregated serving
What it is. Rubin CPX is a separate GPU for the prefill (context) phase of inference: up to 30 PFLOPS NVFP4 with 128 GB of GDDR7 instead of HBM, and attention acceleration. Prefill is compute-bound, decode is memory-bandwidth-bound, so NVIDIA splits them: a Vera Rubin NVL144 CPX rack has 144 CPX GPUs, 144 Rubin GPUs and 36 Vera CPUs. CPX builds the KV cache, and Rubin GPUs with HBM4 decode from it.
8Day-one checklist for any new machine
The first hour on unfamiliar hardware, in order. Each line is a module you've done.
| Check | Command | Module |
|---|---|---|
| CPU, cores, SMT siblings, page size | lscpu, getconf PAGESIZE | M1 §2, M2 §2, M3 §6 |
| NUMA nodes, which have CPUs, which hold GPU memory | numactl -H, bash drills/m5_rack.sh numa | M1 §3, M5 §3 |
| GPU ↔ CPU ↔ NIC topology | nvidia-smi topo -m | M1 §4–5 |
| Coherence class and fabric support | bash drills/m5_rack.sh bw (section 1) | M5 §4, §6 |
| Coherent memory mode | grep Coherent /proc/driver/nvidia/params | M5 §3 |
| Kernel memory policy (THP, init_on_alloc, NUMA balancing) | bash drills/m5_rack.sh tune | M2 §5, M5 §5 |
| Host↔GPU copy bandwidth, pinned vs pageable | python3 drills/m1_h2d_bandwidth.py | M1 §6 |
| Launch jitter with and without SMT-sibling noise | bash drills/m3_cpu.sh jitter | M3 §6 |
| RDMA devices, GDR, memlock, container limits | ibv_devinfo, sh drills/m4_container_check.sh | M4 §5–7 |
| Fabric, IMEX, NCCL transport | bash drills/m5_rack.sh fabric, NCCL_DEBUG=INFO | M5 §6–7 |
bash drills/report.sh runs all the read-only checks and writes results/<hostname>.md, so every machine you have (4090 box, Spark, an 8×H100 node, a GB200 tray) gets the same one-page profile. The repo's CLAUDE.md tracks which machines still need a report and which "expected" numbers in these pages they should replace.DDrill: profile every machine the same way
bash drills/report.sh # read-only; writes results/$(hostname).md
bash drills/report.sh --quick # skip the bandwidth/jitter runs (≈30 s)
Then compare the reports across machines against the table in §2. The four questions from §1 should be answerable from the first screen of each report.
Expected output
x86 + RTX 4090 measured on your box
## Four questions
1. PCIe, not coherent: pinned/managed
memory only
2. driver only (discrete GPU)
3. none (1 GPU(s), no NVLink)
4. RDMA devices: none; GDR attribute: 0
## Headline numbers
H2D pageable / pinned 16.1 / 20.2 GB/s
SM read GPU memory 941.8 GB/s
SM read zero-copy 12.8 GB/s
plain malloc n/a
fabric handle: operation not permittedVera Rubin NVL72 tray expected, not yet measured
## Four questions
1. coherent link with ATS (GPU walks
CPU page tables)
2. driver only (CDMM), or kernel + driver
(NUMA mode)
3. multi-node NVLink fabric: registered,
clique N (4 local GPUs; links NV18?)
4. RDMA devices: mlx5_*; GDR attribute: 1
## Headline numbers
H2D pinned: C2C-bound, above GB200
SM read of plain malloc: hundreds of GB/s+
fabric handle create: OK (with channel)
nproc per tray: 2 × 176 = 352?
?Self-check
1. Name the four questions that place a GPU machine for the OS, and answer them for HGX H100 and GB200 NVL72.
2. Why might the launch-thread pinning recipe that worked on Grace need changing on Vera?
3. Use Fig 2: why is CPU-memory bandwidth, not the C2C link, often the offload bottleneck on GB200?
4. With uniform routing and EP = 144 on Vera Rubin NVL72, what fraction of dispatch traffic leaves the NVLink domain, and what limits it?
5. A spec sheet says "NVL144" and another says "NVL72" for Vera Rubin. How do you know whether they describe the same rack?
§Sources
- NVIDIA developer blog, Inside the NVIDIA Rubin Platform: Six New Chips, One AI Supercomputer (Vera: 88 Olympus cores, Spatial Multithreading, 176 threads, ≤1.5 TB LPDDR5X at ≤1.2 TB/s, NVLink-C2C 1.8 TB/s, PCIe Gen6/CXL 3.1; Rubin: 288 GB HBM4 at 22 TB/s; NVLink 6 at 3.6 TB/s and 260 TB/s per rack; switch tray 28.8 TB/s; ConnectX-9; BlueField-4; superchip and compute-tray composition).
- NVIDIA, DGX Vera Rubin NVL72 (20.7 TB HBM4, preliminary figures); Lenovo Press, Vera Rubin NVL72 datasheet (18 compute trays, 9 NVLink switch trays).
- NVIDIA, GB200 NVL72 and GB300 NVL72 product pages.
- NVIDIA newsroom (via press-release reprint), Rubin CPX: 30 PFLOPS NVFP4, 128 GB GDDR7, Vera Rubin NVL144 CPX rack composition.
- Rubin Ultra / Kyber: DCD on the GTC 2025 roadmap (2H 2027, NVL576). Secondary reporting differs on later memory and rack details, so treat them as unsettled.
- NVIDIA, DGX H100 (2 × Xeon 8480C, 8 × ConnectX-7) and H100 datasheet (80 GB HBM3, 3.35 TB/s, NVLink 4 900 GB/s).
- Modules 1–5 of this course for the mechanisms. Your measurements: the 4090 numbers come from
drills/m1_h2d_bandwidth.py,drills/m3_launch_jitter.pyanddrills/m5_coherent.cu.