diff options
Diffstat (limited to 'scripts/test_vgpu_stack.sh')
| -rwxr-xr-x | scripts/test_vgpu_stack.sh | 224 |
1 files changed, 123 insertions, 101 deletions
diff --git a/scripts/test_vgpu_stack.sh b/scripts/test_vgpu_stack.sh index d31444d..4df9cdc 100755 --- a/scripts/test_vgpu_stack.sh +++ b/scripts/test_vgpu_stack.sh @@ -1,127 +1,149 @@ #!/bin/bash -# test_vgpu_stack.sh - Comprehensive vGPU stack test +# Comprehensive Test Suite for Open-IOV vGPU-IO +# Runs all validation tests in sequence -set -euo pipefail +set -e -BASE_DIR="$OPEN_IOV_ROOT" -LIB_DIR="$BASE_DIR/userspace/lib" -EXAMPLE="$BASE_DIR/userspace/examples/example_vgpu" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +OPEN_IOV_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" -echo "==========================================" -echo "vGPU Stack Test Suite" -echo "==========================================" - -# Test 1: Module loading -echo "Test 1: Module loading" -for mod in nvidia open_iov_vfio gsp_vgpu; do - if lsmod | grep -q "^$mod "; then - echo " PASS: $mod loaded" - else - echo " FAIL: $mod not loaded" - exit 1 - fi -done +echo "=== Open-IOV vGPU-IO Comprehensive Test Suite ===" +echo "Open-IOV root: $OPEN_IOV_ROOT" +echo "Date: $(date)" +echo "" -# Test 2: Device nodes -echo "Test 2: Device nodes" -if [[ -c /dev/gsp-vgpu ]]; then - echo " PASS: /dev/gsp-vgpu exists" -else - echo " FAIL: /dev/gsp-vgpu missing" +# Check if we're root +if [ "$EUID" -ne 0 ]; then + echo "ERROR: This script must be run as root" exit 1 fi -# Test 3: Library loading -echo "Test 3: Library loading" -if LD_LIBRARY_PATH="$LIB_DIR" ldd "$EXAMPLE" 2>&1 | grep -q "libiov.so"; then - echo " PASS: libiov.so loads correctly" -else - echo " FAIL: libiov.so load failed" - exit 1 -fi +# Parse arguments +RUN_KERNEL_TESTS=true +RUN_GUEST_TESTS=true +RUN_CUDA_TESTS=true +RUN_GRAPHICS_TESTS=true +RUN_WINDOWS_TESTS=false -# Test 4: Example app help -echo "Test 4: Example app help" -if LD_LIBRARY_PATH="$LIB_DIR" "$EXAMPLE" --help 2>&1 | grep -q "Usage"; then - echo " PASS: example_vgpu runs" -else - echo " FAIL: example_vgpu failed" - exit 1 -fi +while [[ $# -gt 0 ]]; do + case $1 in + --kernel-only) + RUN_GUEST_TESTS=false + RUN_CUDA_TESTS=false + RUN_GRAPHICS_TESTS=false + shift + ;; + --guest-only) + RUN_KERNEL_TESTS=false + RUN_CUDA_TESTS=false + RUN_GRAPHICS_TESTS=false + shift + ;; + --no-windows) + RUN_WINDOWS_TESTS=false + shift + ;; + --windows) + RUN_WINDOWS_TESTS=true + shift + ;; + *) + echo "Unknown option: $1" + echo "Usage: $0 [--kernel-only] [--guest-only] [--no-windows] [--windows]" + exit 1 + ;; + esac +done + +RESULTS=() -# Test 5: mdev creation (if GPU available) -echo "Test 5: mdev creation" -GPU_PCI=$(lspci -D -d 10de: | grep -E "VGA|3D controller" | head -1 | awk '{print $1}') -if [[ -n "$GPU_PCI" ]]; then - echo " Found GPU: $GPU_PCI" - MDEV_TYPE_PATH="/sys/bus/pci/devices/$GPU_PCI/mdev_supported_types/nvidia-vgpu-turing" - if [[ -d "$MDEV_TYPE_PATH" ]]; then - AVAIL=$(cat "$MDEV_TYPE_PATH/available_instances" 2>/dev/null || echo 0) - if [[ "$AVAIL" -gt 0 ]]; then - UUID=$(uuidgen) - echo "$UUID" | sudo tee "$MDEV_TYPE_PATH/create" > /dev/null - sleep 1 - if [[ -d "/sys/bus/mdev/devices/$UUID" ]]; then - echo " PASS: mdev created: $UUID" - # Cleanup - echo 1 | sudo tee "/sys/bus/mdev/devices/$UUID/remove" > /dev/null - else - echo " FAIL: mdev creation failed" - exit 1 - fi - else - echo " SKIP: No available instances" - fi +# Test 1: Kernel GSP Emulation Tests +if [ "$RUN_KERNEL_TESTS" = true ]; then + echo "" + echo "========================================" + echo "TEST 1: Kernel GSP Emulation Unit Tests" + echo "========================================" + if "$SCRIPT_DIR/test_gsp_emu.sh"; then + RESULTS+=("Kernel GSP Emulation: PASS") else - echo " SKIP: nvidia-vgpu-turing type not available" + RESULTS+=("Kernel GSP Emulation: FAIL") fi -else - echo " SKIP: No NVIDIA GPU found" fi -# Test 6: Kernel log check -echo "Test 6: Kernel log check" -if dmesg -T | grep -q "GSP vGPU-IO driver loaded"; then - echo " PASS: gsp-vgpu driver loaded successfully" -else - echo " WARN: gsp-vgpu load message not found in dmesg" +# Test 2: Guest Driver Integration +if [ "$RUN_GUEST_TESTS" = true ]; then + echo "" + echo "========================================" + echo "TEST 2: Guest Driver Integration" + echo "========================================" + if "$SCRIPT_DIR/test_guest_driver.sh"; then + RESULTS+=("Guest Driver Integration: PASS") + else + RESULTS+=("Guest Driver Integration: FAIL") + fi fi -if dmesg -T | grep -q "NVIDIA vGPU VFIO driver loaded"; then - echo " PASS: open-iov-vfio driver loaded successfully" -else - echo " WARN: open-iov-vfio load message not found in dmesg" +# Test 3: CUDA Workloads +if [ "$RUN_CUDA_TESTS" = true ]; then + echo "" + echo "========================================" + echo "TEST 3: CUDA Workload Validation" + echo "========================================" + if "$SCRIPT_DIR/test_cuda_workloads.sh"; then + RESULTS+=("CUDA Workloads: PASS") + else + RESULTS+=("CUDA Workloads: FAIL") + fi fi -# Test 7: Firmware verification -echo "Test 7: Firmware verification" -FW="$BASE_DIR/firmware/570-GSP/gsp-570.144.fwimage.bin" -if [[ -f "$FW" ]]; then - SIZE=$(stat -c%s "$FW") - EXPECTED=29622272 # ~28.5MB - if [[ "$SIZE" -eq "$EXPECTED" ]]; then - echo " PASS: Firmware size correct ($SIZE bytes)" +# Test 4: Graphics Workloads +if [ "$RUN_GRAPHICS_TESTS" = true ]; then + echo "" + echo "========================================" + echo "TEST 4: Graphics Workload Validation" + echo "========================================" + if "$SCRIPT_DIR/test_graphics_workloads.sh"; then + RESULTS+=("Graphics Workloads: PASS") else - echo " WARN: Firmware size mismatch: $SIZE (expected $EXPECTED)" + RESULTS+=("Graphics Workloads: FAIL") fi - - # Check ELF header - if file "$FW" | grep -q "ELF 64-bit LSB executable, UCB RISC-V"; then - echo " PASS: Firmware is valid RISC-V ELF" +fi + +# Test 5: Windows Guest (optional) +if [ "$RUN_WINDOWS_TESTS" = true ]; then + echo "" + echo "========================================" + echo "TEST 5: Windows Guest Validation" + echo "========================================" + if "$SCRIPT_DIR/test_windows_guest.sh"; then + RESULTS+=("Windows Guest: PASS") else - echo " FAIL: Firmware is not valid RISC-V ELF" - exit 1 + RESULTS+=("Windows Guest: FAIL") fi -else - echo " FAIL: Firmware not found" - exit 1 fi +# Summary echo "" -echo "==========================================" -echo "All Tests Passed!" -echo "==========================================" +echo "========================================" +echo "TEST SUMMARY" +echo "========================================" +for result in "${RESULTS[@]}"; do + echo " $result" +done + +# Check for failures +FAIL_COUNT=0 +for result in "${RESULTS[@]}"; do + if [[ "$result" == *"FAIL"* ]]; then + FAIL_COUNT=$((FAIL_COUNT + 1)) + fi +done + echo "" -echo "Stack is ready for QEMU guest launch." -echo "Run: $BASE_DIR/scripts/create_mdev.sh" -echo "Then: $BASE_DIR/scripts/launch_qemu_vgpu.sh"
\ No newline at end of file +if [ $FAIL_COUNT -eq 0 ]; then + echo "ALL TESTS PASSED ✓" + exit 0 +else + echo "$FAIL_COUNT TEST(S) FAILED ✗" + exit 1 +fi
\ No newline at end of file |
