194 lines
7.0 KiB
Bash
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"
|