Files
bee/iso/overlay/usr/local/bin/bee-check-nvswitch
T
mchus 983f41a1f0 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.
2026-07-29 18:58:19 +03:00

31 lines
1.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/sh
# 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