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
View Paired Guide →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.
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 Token | Parameter Description | Verified Default | Example Format |
|---|---|---|---|
{{RDMA_NET_IFACE}} | High-Speed RoCE Network Interface | enp1s0f0np0 | enp1s0f0np0 |
{{EXPECTED_MTU}} | Target Jumbo Frame MTU | 9000 | 9000 |
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
- Verified `/proc/cmdline` includes `iommu=pt` (or exported `NCCL_P2P_DISABLE=1` if motherboard PCIe ACS cannot be disabled).
- Confirmed both ConnectX-7 200GbE endpoints use `mtu 9000` and `NCCL_IB_GID_INDEX=3` (IPv4 RoCEv2).
- Exported `HSA_ENABLE_SDMA=0` and `NCCL_P2P_LEVEL=PHB` on multi-card AMD Radeon AI PRO R9700 ROCm hosts.