This repository has been archived on 2026-08-19. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
2026-08-20 00:45:43 +02:00

194 lines
7.0 KiB
Bash

#!/bin/bash
# =============================================================================
# Step 6: Verify Installation — AMD BC-250 ROCm
# =============================================================================
# Post-reboot verification. Checks all critical components:
# - amdgpu module loaded (out-of-tree, GFXOFF disabled)
# - No KIQ timeouts or GPU crashes
# - Device nodes present
# - ppfeaturemask correct
# - GPU clock states available
# - Governor active (if installed)
# - rocminfo detects GPU
#
# Run as: bash 06_verify_installation.sh
# =============================================================================
set -euo pipefail
PASS=0
FAIL=0
WARN=0
check() {
local name="$1"
local result="$2"
local expected="${3:-}"
if [[ "$result" == "PASS" ]]; then
echo " [PASS] $name"
((PASS++))
elif [[ "$result" == "WARN" ]]; then
echo " [WARN] $name${expected:+ — $expected}"
((WARN++))
else
echo " [FAIL] $name${expected:+ — expected: $expected}"
((FAIL++))
fi
}
echo "============================================"
echo " BC-250 ROCm Installation Verification"
echo "============================================"
echo ""
# ─────────────────────────────────────────────
# 1. amdgpu Module
# ─────────────────────────────────────────────
echo "--- Module Status ---"
if lsmod | grep -q "^amdgpu"; then
SIZE=$(lsmod | grep "^amdgpu" | awk '{print $2}')
check "amdgpu module loaded (${SIZE} bytes)" "PASS"
else
check "amdgpu module loaded" "FAIL" "module not loaded"
fi
# Check out-of-tree (patched module indicator)
if dmesg 2>/dev/null | grep -q "loading out-of-tree module"; then
check "Out-of-tree module (patched)" "PASS"
else
check "Out-of-tree module (patched)" "WARN" "may be using stock module"
fi
# Check GFXOFF disabled
if dmesg 2>/dev/null | grep -qi "gfxoff.*not supported\|gfxoff.*disabled\|does not support GFXOFF"; then
check "GFXOFF disabled" "PASS"
else
check "GFXOFF disabled" "WARN" "no GFXOFF message in dmesg"
fi
# ─────────────────────────────────────────────
# 2. Stability Checks
# ─────────────────────────────────────────────
echo ""
echo "--- Stability ---"
KIQ_COUNT=$(dmesg 2>/dev/null | grep -c "timeout waiting for kiq fence" || echo 0)
if [[ "$KIQ_COUNT" -eq 0 ]]; then
check "KIQ timeouts: 0" "PASS"
else
check "KIQ timeouts: $KIQ_COUNT" "FAIL" "should be 0"
fi
DEAD_COUNT=$(dmesg 2>/dev/null | grep -c "GPU unreachable\|GPU died" || echo 0)
if [[ "$DEAD_COUNT" -eq 0 ]]; then
check "Dead-GPU events: 0" "PASS"
else
check "Dead-GPU events: $DEAD_COUNT" "WARN" "dead-GPU bypass triggered"
fi
# ─────────────────────────────────────────────
# 3. Device Nodes
# ─────────────────────────────────────────────
echo ""
echo "--- Device Nodes ---"
for DEV in /dev/dri/card0 /dev/dri/renderD128 /dev/kfd; do
if [[ -e "$DEV" ]]; then
check "$DEV exists" "PASS"
else
check "$DEV exists" "FAIL" "not found"
fi
done
# ─────────────────────────────────────────────
# 4. Boot Parameters
# ─────────────────────────────────────────────
echo ""
echo "--- Boot Parameters ---"
PPF=$(cat /sys/module/amdgpu/parameters/ppfeaturemask 2>/dev/null || echo "N/A")
if [[ "$PPF" == "0xfff73ef7" || "$PPF" == "4293918455" ]]; then
check "ppfeaturemask: $PPF" "PASS"
else
check "ppfeaturemask: $PPF" "FAIL" "expected 0xfff73ef7"
fi
NORETRY=$(cat /sys/module/amdgpu/parameters/noretry 2>/dev/null || echo "N/A")
check "noretry: $NORETRY" "$([ "$NORETRY" = "0" ] && echo PASS || echo WARN)"
# ─────────────────────────────────────────────
# 5. GPU Status
# ─────────────────────────────────────────────
echo ""
echo "--- GPU Status ---"
if [[ -f /sys/class/drm/card0/device/pp_dpm_sclk ]]; then
CLOCKS=$(cat /sys/class/drm/card0/device/pp_dpm_sclk)
echo " GPU Clocks:"
echo "$CLOCKS" | sed 's/^/ /'
check "GPU clock states available" "PASS"
else
check "GPU clock states" "FAIL" "pp_dpm_sclk not found"
fi
# Governor check
if systemctl --user is-active cyan-skillfish-governor 2>/dev/null | grep -q "active"; then
check "Governor service active" "PASS"
elif pgrep -f "cyan-skillfish-governor" &>/dev/null; then
check "Governor process running" "PASS"
else
check "Governor" "WARN" "not running (optional)"
fi
# ─────────────────────────────────────────────
# 6. ROCm Runtime
# ─────────────────────────────────────────────
echo ""
echo "--- ROCm Runtime ---"
if command -v rocminfo &>/dev/null; then
ROCM_OUT=$(HSA_OVERRIDE_GFX_VERSION=10.1.0 rocminfo 2>&1 || true)
if echo "$ROCM_OUT" | grep -q "gfx1010"; then
check "rocminfo detects gfx1010" "PASS"
else
check "rocminfo detects gfx1010" "FAIL" "GPU not found"
fi
AGENT_NAME=$(echo "$ROCM_OUT" | grep "Marketing Name" | head -1 | sed 's/.*: *//')
if [[ -n "$AGENT_NAME" ]]; then
check "GPU Name: $AGENT_NAME" "PASS"
fi
CU_COUNT=$(echo "$ROCM_OUT" | grep "Compute Unit:" | tail -1 | awk '{print $NF}')
if [[ "$CU_COUNT" == "24" ]]; then
check "Compute Units: 24" "PASS"
elif [[ -n "$CU_COUNT" ]]; then
check "Compute Units: $CU_COUNT" "WARN" "expected 24"
fi
if echo "$ROCM_OUT" | grep -q "Done"; then
check "rocminfo completed successfully" "PASS"
fi
else
check "rocminfo" "FAIL" "not installed"
fi
# ─────────────────────────────────────────────
# Summary
# ─────────────────────────────────────────────
echo ""
echo "============================================"
echo " Results: $PASS passed, $FAIL failed, $WARN warnings"
echo "============================================"
if [[ "$FAIL" -eq 0 ]]; then
echo " STATUS: READY — Run 07_run_hip_tests.sh for GPU compute tests"
else
echo " STATUS: ISSUES DETECTED — Review failures above"
fi
exit "$FAIL"