fix(nvidia): detect NVSwitch fabric via driver, not host-PCIe
On HGX B200 (Kaytus KR9288-X3) NVSwitch is managed via HMC/ERoT and never appears on host lspci as 10de:0680, so the old check always returned "not present" and silently skipped fabricmanager — leaving the fabric untrained and CUDA/NCCL/dcgmi failing with "system not yet initialized" on otherwise-healthy hardware. bee-check-nvswitch now checks, in order, nvidia-smi's GPU Fabric GUID, /proc/driver/nvidia-nvswitch/devices, and finally the legacy host-PCIe scan for older HGX generations.
This commit is contained in:
Regular → Executable
+29
-3
@@ -1,4 +1,30 @@
|
||||
#!/bin/sh
|
||||
# Exit 0 if NVSwitch hardware is detected; exit 1 to skip fabricmanager on non-NVSwitch systems.
|
||||
# NVSwitch appears in lspci as vendor 10de, class 0680 (Bridge, Other).
|
||||
lspci -Dn 2>/dev/null | awk '$2 == "0680:" && $3 ~ /^10de:/ { found=1; exit } END { exit(found ? 0 : 1) }'
|
||||
# ExecCondition для nvidia-fabricmanager.service.
|
||||
# exit 0 -> запустить FabricManager (система с NVSwitch-фабрикой)
|
||||
# exit 1 -> пропустить FabricManager (не-NVSwitch система)
|
||||
#
|
||||
# На HGX B200 (Kaytus KR9288-X3) NVSwitch управляется через HMC/ERoT и НЕ виден
|
||||
# на host-PCIe как 10de class 0680 — старый lspci-детект всегда давал ложное "нет"
|
||||
# и FM ошибочно пропускался (CUDA: "system not yet initialized"). Детектим фабрику
|
||||
# через драйвер NVIDIA. Драйвер уже загружен (After=bee-nvidia.service).
|
||||
|
||||
command -v nvidia-smi >/dev/null 2>&1 || exit 1 # нет драйвера/GPU -> пропустить
|
||||
|
||||
# (1) Основной признак: GPU, привязанный к NVSwitch-фабрике, отдаёт GPU Fabric GUID
|
||||
# (реальное значение, не N/A). Читается ещё до инициализации FM.
|
||||
if timeout 15 nvidia-smi -q 2>/dev/null | grep -i 'GPU Fabric GUID' | grep -qv 'N/A'; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# (2) Fallback: NVSwitch'и, поднятые kernel-драйвером nvidia-nvswitch.
|
||||
if [ -d /proc/driver/nvidia-nvswitch/devices ] &&
|
||||
[ -n "$(ls -A /proc/driver/nvidia-nvswitch/devices 2>/dev/null)" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# (3) Legacy-совместимость: старые HGX, где NVSwitch виден на host-PCIe (10de:0680).
|
||||
if lspci -Dn 2>/dev/null | awk '$2=="0680:" && $3 ~ /^10de:/ {f=1} END{exit(f?0:1)}'; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
exit 1
|
||||
|
||||
Reference in New Issue
Block a user