#!/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