Jump to content
Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

P2P: Difference between revisions

From CMP Wiki
GPU-to-GPU peer-to-peer on the CMP 170HX: the mailbox path (Morrowmake/asm64 forks), the BAR1 path, the ForceP2P registry key, topology limits and verification. Discord Oct 2026.; sources: @curiouspixel, @ob88594, @seriousrising, @68x0, @wakeupmbrc1, @markshowa, @c133; GitHub Morrowmake/cmpunlocker
 
GPU-to-GPU peer-to-peer on the CMP 170HX: the mailbox path (Morrowmake/asm64 forks), the BAR1 path, the ForceP2P registry key, topology limits and verification. Discord Oct 2026.; sources: @curiouspixel, @ob88594, @seriousrising, @68x0, @ropuls, @wakeupmbrc1, @markshowa, @c133; GitHub Morrowmake/cmpunlocker
Line 58: Line 58:
{{Status|warning}} These are '''global''' and force every NVIDIA GPU in the host to Gen2, so do not use them on a mixed
{{Status|warning}} These are '''global''' and force every NVIDIA GPU in the host to Gen2, so do not use them on a mixed
rig (e.g. with an RTX 4080). {{Source|68x0|2026-10-13|https://discord.com/channels/1518634379604136178/1518695289278566450/1559704654743474310}}
rig (e.g. with an RTX 4080). {{Source|68x0|2026-10-13|https://discord.com/channels/1518634379604136178/1518695289278566450/1559704654743474310}}
The gist measured about 1.5 us cross-root P2P latency (not through a switch). A longer write-up by @ropuls exists (the
 
gist, https://gist.github.com/ropuls/d2978531ba3a1a183e70f62f3de2eb84); see Discord.
The gist ([https://gist.github.com/ropuls/d2978531ba3a1a183e70f62f3de2eb84 gist.github.com/ropuls]) covers the unlock,
cross-root P2P and vLLM serving. Its key points: P2P can fail because the cmpunlocker 0011 patch sets the P2P override
before the PCI device id is populated, so the driver falls back to GSP caps, which report GNS for the CMP regardless of
topology. Check with <code>nvidia-smi topo -p2p r</code>; if it says GNS, the <code>ForceP2P=0x11</code> registry key
applies even on a single-switch setup. Measured cross-root P2P latency about 1.5 us (not through a switch). His TP2 on
2x CMP: about 4,900 tok/s prefill at 128k (TTFT 26 s) versus about 2,500 without P2P; decode about 223 tok/s at one
session, 527 tok/s aggregate at four (W4A16, MTP4). {{Source|ropuls|2026-10-15|https://discord.com/channels/1518634379604136178/1528826330454429706/1560412308469973125}}


== Verify ==
== Verify ==

Revision as of 08:49, 30 October 2026

GPU-to-GPU P2P (mailbox / BAR1)
Proven 8 GB and 10 GB
Drivernvidia-open 610.57.04 (measured) / 615.71.09
Unlock buildMorrowmake/cmpunlocker (--p2p) or asm64-hooligan (--p2p)
StepsP2P
Sourcelink
Confirmations
Reproduced by @ghostinthedatacenter_87281 (both), 2026-10-07 · details

GSP reports PCIe P2P unsupported on the CMP, but the GA100 mailbox P2P hardware is present. P2P matters for tensor parallelism; without it, pipeline parallel is usually the better default on these PCIe-only cards. There are two paths.

Mailbox P2P (works on 64 MB BAR)

The Morrowmake fork's --p2p and asm64's --p2p force the driver to advertise peer access and arm the mailbox trap. This runs in a 512 KB window inside the stock 64 MB BAR1, so it needs no ReBAR and no Above 4G decoding, and works where the board cannot open the 64 GB BAR. Source: @ob88594, 2026-10-05

curiouspixel's P2P patch in the Morrowmake fork fixed P2P for Trust Inter and GhostInTheDatacenter on the same board. Source: @curiouspixel, 2026-10-05 Morrowmake's measured 4-card result: all 12 ordered pairs passed content checks; 16 MiB copies reached about 6.65 GB/s each way (610.57.04, Gen2 x16). asm64's mailbox is about 1.7 GB/s behind one switch at Gen2 x4.

Mechanism (Morrowmake p2p-unlock.patch): it forces pcieP2PReadCaps/WriteCaps OK for 0x20C2/0x2082 only when PRI decode trap 31's PLM 0x0012277c reads 0xFFFFFFFF; around the mailbox setup it arms trap 31 and restores it after. The Booter change adds TRAP31_PLM 0x0012277c = 0xffffffff, opened only when the ForceP2P registry key is set. On a part whose trap PLM read 0xFFFFFF8F the mailbox could not be programmed and a copy silently returned 33 of 33.5 MB wrong (only the first 128 KiB intact), which is why the caps are forced only when the trap is writable and why a content check is required.

Install and the registry line (Morrowmake):

sudo ./install.sh --p2p --profile=8gb --no-iommu --no-passthrough   # --profile=10gb for 10 GB cards
# writes:
# options nvidia NVreg_RegistryDwords="RmForceEnableGen2=1;RMPcieLinkSpeed=0x1;ForceP2P=0x11"

BAR1 P2P (needs the 64 GB BAR)

The other path uses the 64 GB BAR1 (bayley's research). It is a few percent faster than mailbox under pipeline parallelism but needs a board that can open the big BAR. Where the board cannot, use mailbox. Source: @seriousrising, 2026-10-05

ropuls gist (cross-root P2P + serving)

68x reported higher decode/prefill after the extra modprobe parameters from ropuls' gist "2x CMP 170HX for LLM inference: unlock, cross-root P2P, serving (vLLM)":

options nvidia NVreg_RegistryDwords="RmForceEnableGen2=1;RMPcieLinkSpeed=0x1;RMForceStaticBar1=1;RMPcieP2PType=1;RMForceP2PType=1;ForceP2P=0x11"

Warning These are global and force every NVIDIA GPU in the host to Gen2, so do not use them on a mixed rig (e.g. with an RTX 4080). Source: @68x0, 2026-10-13

The gist (gist.github.com/ropuls) covers the unlock, cross-root P2P and vLLM serving. Its key points: P2P can fail because the cmpunlocker 0011 patch sets the P2P override before the PCI device id is populated, so the driver falls back to GSP caps, which report GNS for the CMP regardless of topology. Check with nvidia-smi topo -p2p r; if it says GNS, the ForceP2P=0x11 registry key applies even on a single-switch setup. Measured cross-root P2P latency about 1.5 us (not through a switch). His TP2 on 2x CMP: about 4,900 tok/s prefill at 128k (TTFT 26 s) versus about 2,500 without P2P; decode about 223 tok/s at one session, 527 tok/s aggregate at four (W4A16, MTP4). Source: @ropuls, 2026-10-15

Verify

nvidia-smi topo -p2p r          # OK, not GNS
nvidia-smi topo -m
python3 tools/p2p-content-check.py   # Morrowmake: verifies the bytes actually arrive

nvidia-smi topo and advertised peer support alone do not prove the data moves; always run a content check.

Topology limits

  • PLX switches: many boards have MMIO problems behind a PLX, so only mailbox P2P works; in TP mode that
 mailbox P2P can throw XID 13 and crash the inference process. Avoid PLX risers for TP, or disable P2P.
 Source: @ob88594, 2026-10-07
  • Dual-socket: P2P does not work across sockets; GPU servers hang all cards off one CPU's root port. Mitigations
 are the mailbox method or bayley's kernel patch. Source: @wakeupmbrc1, 2026-10-18
  • Latency reference: about 1.4-1.7 us native (CPU root / crossbar), about 14 us through a retimer plus two
 switches. Source: @markshowa, 2026-10-17
  • P2P across different root complexes on a Threadripper board (older asm64 fork) looked right but no traffic arrived;
 mrpandagod's advice is to build a local P2P patch for the specific setup.
 Source: @c133, 2026-10-22

Known issues

  • No release ships P2P and ECC together; the Morrowmake fork drops the ECC patches. A v0.6 request is open.
  • On boards that cannot route P2P (ACS, no IOMMU passthrough, separate roots), forcing it times out instead of staging
 through system memory, which is why it is opt-in.

Status

Mailbox P2P reproduced on the same board by two people (curiouspixel's patch, Trust Inter and GhostInTheDatacenter) and measured on a 4-card rig, so Proven where the topology allows; it is Reported to Contested on PLX and cross-root setups. See the confirmation below.

Related