TinkerLab
ARTIFACT // DIAGNOSE-P2P-AND-ROCEV2.SH (SH)

Multi-GPU PCIe P2P (`iommu=pt` / ACS) & 200GbE RoCEv2 Diagnostic Script (diagnose-p2p-and-rocev2.sh)

Audits kernel cmdline for iommu=pt, checks PCIe ACS redirection bits that deadlock multi-GPU vLLM, and verifies ConnectX-7 200GbE MTU 9000 & RoCEv2 GID index 3.

[KEY VERIFIED TAKEAWAY / TL;DR]This reproducible configuration artifact "Multi-GPU PCIe P2P (`iommu=pt` / ACS) & 200GbE RoCEv2 Diagnostic Script" (diagnose-p2p-and-rocev2.sh, SH) is paired with Tinker AI Lab's hardware-verified guide "multi-gpu-pcie-p2p-iommu-deadlock-and-connectx7-rocev2-tcp-fallback-troubleshooting". It exposes 2 customizable browser variables (RDMA_NET_IFACE=enp1s0f0np0, EXPECTED_MTU=9000) with loopback-first security defaults.
04 // DIAGNOSISAPI & Deployment Troubleshooting· Verified: 2026-11-02
Browse All 42 Artifacts →
diagnose-p2p-and-rocev2.sh

Multi-GPU PCIe P2P (`iommu=pt` / ACS) & 200GbE RoCEv2 Diagnostic Script

Audits kernel cmdline for iommu=pt, checks PCIe ACS redirection bits that deadlock multi-GPU vLLM, and verifies ConnectX-7 200GbE MTU 9000 & RoCEv2 GID index 3.

View Paired Guide →
Customizable Variables (Saved in Browser)
UTF-8 Encoded · Live Client-Side Compilation
#!/usr/bin/env bash
# Tinker AI — Multi-GPU PCIe P2P & ConnectX-7 200GbE RoCEv2 Doctor (Guide #32)
set -euo pipefail

IFACE="enp1s0f0np0"
TARGET_MTU="9000"

echo "=== [1/4] Auditing Kernel IOMMU Passthrough (iommu=pt) ==="
CMDLINE=$(cat /proc/cmdline)
echo "Kernel cmdline: $CMDLINE"
if echo "$CMDLINE" | grep -q "iommu=pt"; then
  echo "[OK] iommu=pt is active (direct PCIe BAR1 P2P DMA enabled)."
else
  echo "[WARN] iommu=pt is MISSING! Multi-GPU vLLM (TP>=2) on AMD/Intel boards may deadlock. Add iommu=pt to GRUB or set export NCCL_P2P_DISABLE=1."
fi

echo "=== [2/4] Checking PCIe ACS Redirection & GPU P2P Matrix ==="
if command -v nvidia-smi >/dev/null 2>&1; then
  nvidia-smi topo -p2p r || true
elif command -v rocm-smi >/dev/null 2>&1; then
  rocm-smi --showtopo || true
fi
sudo lspci -vvv 2>/dev/null | grep -E "ACSCtl:.*SrcValid\+" | head -n 5 && echo "[INFO] PCIe ACS is enabled on bridge ports; if NCCL hangs, export NCCL_P2P_DISABLE=1 or disable ACS in BIOS." || true

echo "=== [3/4] Checking ConnectX-7 / RDMA Devices & Interface MTU ($IFACE -> $TARGET_MTU) ==="
if ip link show "$IFACE" >/dev/null 2>&1; then
  ip -br link show "$IFACE"
  ip link show "$IFACE" | grep -q "mtu $TARGET_MTU" && echo "[OK] $IFACE MTU is $TARGET_MTU" || echo "[WARN] $IFACE MTU is not $TARGET_MTU! Run: sudo ip link set dev $IFACE mtu $TARGET_MTU"
fi

echo "=== [4/4] Inspecting RoCEv2 GID Index Table ==="
if command -v show_gids >/dev/null 2>&1; then
  show_gids | grep -i "v2" | head -n 8 || true
  echo "Recommended NCCL env: export NCCL_IB_HCA=mlx5_0:1 NCCL_IB_GID_INDEX=3 NCCL_SOCKET_IFNAME=$IFACE"
fi
PARAMETER SPECIFICATION // 参数化变量规范说明表

Customizable Parameter Reference for diagnose-p2p-and-rocev2.sh

This SH artifact exposes 2 template variables compiled client-side in your browser.

Template TokenParameter DescriptionVerified DefaultExample Format
{{RDMA_NET_IFACE}}High-Speed RoCE Network Interfaceenp1s0f0np0enp1s0f0np0
{{EXPECTED_MTU}}Target Jumbo Frame MTU90009000
PAIRED HARDWARE MANIFEST // 配套实测环境与边界记录

Verified Environment for "Multi-GPU PCIe P2P & 200GbE RoCEv2 Troubleshooting: Fixing NCCL P2P Deadlocks (iommu=pt / ACS), DGX Spark ConnectX-7 TCP Fallback, and Multi-Card R9700 Hangs"

Tested Hardware & OS

2x NVIDIA DGX Spark (ConnectX-7 200GbE QSFP112) | Dual RTX 5090 / RTX PRO 6000 on AMD Threadripper / Ryzen X870E | Dual AMD Radeon AI PRO R9700 (64GB)

Pinned Stack & Model Versions
NCCL 2.25.1 + Mellanox OFED RoCEv2 (`mlx5_0`)vLLM 0.8.2 (`--tensor-parallel-size 2` & Ray)ROCm 6.4 RCCL + `llama.cpp` Vulkan RADV
Offline Boundary (100% Local Kernel, PCIe Bus & Switchless RDMA Diagnostics)

All PCIe topology checks, GRUB kernel flags, and RoCEv2 GID/MTU repairs run locally without internet access.

Known Operational Limits & Failure Modes
  • Consumer motherboards (AMD X870E/B850, Intel Z890) wiring the second GPU slot through the chipset PCH instead of CPU PCIe lanes cannot use direct BAR1 P2P DMA; they must run with `NCCL_P2P_DISABLE=1` (using host SHM).
  • Switchless 200GbE QSFP112 RoCEv2 between two DGX Sparks requires matching `mtu 9000` and `NCCL_IB_GID_INDEX=3` on both nodes; mismatched MTU causes `ibv_modify_qp` or silent retry timeouts on payloads >1024 bytes.
DEPLOYMENT CHECKLIST // 配置落地核验步骤

3-Step Verification Checklist After Deploying diagnose-p2p-and-rocev2.sh

  1. Verified `/proc/cmdline` includes `iommu=pt` (or exported `NCCL_P2P_DISABLE=1` if motherboard PCIe ACS cannot be disabled).
  2. Confirmed both ConnectX-7 200GbE endpoints use `mtu 9000` and `NCCL_IB_GID_INDEX=3` (IPv4 RoCEv2).
  3. Exported `HSA_ENABLE_SDMA=0` and `NCCL_P2P_LEVEL=PHB` on multi-card AMD Radeon AI PRO R9700 ROCm hosts.