diff options
Diffstat (limited to 'scripts')
| -rwxr-xr-x | scripts/test_cuda_workloads.sh | 45 | ||||
| -rwxr-xr-x | scripts/test_graphics_workloads.sh | 33 | ||||
| -rwxr-xr-x | scripts/test_gsp_emu.sh | 59 | ||||
| -rwxr-xr-x | scripts/test_guest_driver.sh | 75 | ||||
| -rwxr-xr-x | scripts/test_vgpu_stack.sh | 224 | ||||
| -rwxr-xr-x | scripts/test_windows_guest.sh | 36 |
6 files changed, 371 insertions, 101 deletions
diff --git a/scripts/test_cuda_workloads.sh b/scripts/test_cuda_workloads.sh new file mode 100755 index 0000000..ba3663a --- /dev/null +++ b/scripts/test_cuda_workloads.sh @@ -0,0 +1,45 @@ +#!/bin/bash +# CUDA Workload Validation +# Tests various CUDA workloads in the guest + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +OPEN_IOV_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" + +echo "=== CUDA Workload Validation ===" +echo "Open-IOV root: $OPEN_IOV_ROOT" + +# Check if we're root +if [ "$EUID" -ne 0 ]; then + echo "ERROR: This script must be run as root" + exit 1 +fi + +# This script assumes guest is already running with SSH on port 2222 +# and NVIDIA driver is installed + +GUEST_SSH="ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@localhost -p 2222" + +echo "Testing CUDA samples..." +$GUEST_SSH "cd /usr/local/cuda/samples && find . -name 'Makefile' -execdir make \\; 2>&1 | tail -20" + +echo "Running vectorAdd..." +$GUEST_SSH "cd /usr/local/cuda/samples/1_Utilities/vectorAdd && ./vectorAdd" + +echo "Running matrixMul..." +$GUEST_SSH "cd /usr/local/cuda/samples/0_Simple/matrixMul && ./matrixMul" + +echo "Running simpleCUBLAS..." +$GUEST_SSH "cd /usr/local/cuda/samples/7_CUDALibraries/simpleCUBLAS && ./simpleCUBLAS" + +echo "Running simpleCUFFT..." +$GUEST_SSH "cd /usr/local/cuda/samples/7_CUDALibraries/simpleCUFFT && ./simpleCUFFT" + +echo "Running deviceQuery..." +$GUEST_SSH "cd /usr/local/cuda/samples/1_Utilities/deviceQuery && ./deviceQuery" + +echo "Running bandwidthTest..." +$GUEST_SSH "cd /usr/local/cuda/samples/1_Utilities/bandwidthTest && ./bandwidthTest" + +echo "=== CUDA Workload Validation Complete ==="
\ No newline at end of file diff --git a/scripts/test_graphics_workloads.sh b/scripts/test_graphics_workloads.sh new file mode 100755 index 0000000..b3a873a --- /dev/null +++ b/scripts/test_graphics_workloads.sh @@ -0,0 +1,33 @@ +#!/bin/bash +# Graphics Workload Validation +# Tests Vulkan/OpenGL/video workloads in the guest + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +OPEN_IOV_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" + +echo "=== Graphics Workload Validation ===" +echo "Open-IOV root: $OPEN_IOV_ROOT" + +# Check if we're root +if [ "$EUID" -ne 0 ]; then + echo "ERROR: This script must be run as root" + exit 1 +fi + +GUEST_SSH="ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@localhost -p 2222" + +echo "Testing Vulkan..." +$GUEST_SSH "vulkaninfo | head -50" +$GUEST_SSH "vkcube --duration 5" || echo "vkcube not available or failed" + +echo "Testing OpenGL..." +$GUEST_SSH "glxinfo | grep -i nvidia" +$GUEST_SSH "glxgears -info" || echo "glxgears not available" + +echo "Testing video encode/decode..." +$GUEST_SSH "ffmpeg -encoders | grep nvenc" || echo "NVENC not available" +$GUEST_SSH "ffmpeg -decoders | grep nvdec" || echo "NVDEC not available" + +echo "=== Graphics Workload Validation Complete ==="
\ No newline at end of file diff --git a/scripts/test_gsp_emu.sh b/scripts/test_gsp_emu.sh new file mode 100755 index 0000000..1f6bc6f --- /dev/null +++ b/scripts/test_gsp_emu.sh @@ -0,0 +1,59 @@ +#!/bin/bash +# GSP Emulation Unit Tests +# Runs kernel module tests for GSP emulation engine + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +OPEN_IOV_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +KERNEL_TEST_DIR="$OPEN_IOV_ROOT/kernel/tests" + +echo "=== GSP Emulation Unit Tests ===" +echo "Open-IOV root: $OPEN_IOV_ROOT" +echo "Kernel test dir: $KERNEL_TEST_DIR" + +# Check if we're root +if [ "$EUID" -ne 0 ]; then + echo "ERROR: This script must be run as root" + exit 1 +fi + +# Build the test module +echo "Building GSP emulation test module..." +cd "$KERNEL_TEST_DIR" +make clean +make + +if [ ! -f gsp_emulation_test.ko ]; then + echo "ERROR: Failed to build gsp_emulation_test.ko" + exit 1 +fi + +echo "Test module built successfully" + +# Load the test module +echo "Loading test module..." +insmod gsp_emulation_test.ko + +# Check dmesg for test results +sleep 2 +echo "=== Test Results ===" +dmesg -T | grep -i "gsp_emu_test" | tail -30 + +# Check if tests passed +if dmesg -T | grep -q "GSP_EMU_TEST: ALL TESTS PASSED"; then + echo "✓ ALL TESTS PASSED" + RESULT=0 +elif dmesg -T | grep -q "GSP_EMU_TEST:.*TEST.S. FAILED"; then + echo "✗ SOME TESTS FAILED" + RESULT=1 +else + echo "? TEST RESULT UNKNOWN" + RESULT=2 +fi + +# Unload test module +echo "Unloading test module..." +rmmod gsp_emulation_test 2>/dev/null || true + +exit $RESULT
\ No newline at end of file diff --git a/scripts/test_guest_driver.sh b/scripts/test_guest_driver.sh new file mode 100755 index 0000000..f391d64 --- /dev/null +++ b/scripts/test_guest_driver.sh @@ -0,0 +1,75 @@ +#!/bin/bash +# Guest Driver Validation Suite +# Tests the guest NVIDIA driver with vGPU + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +OPEN_IOV_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" + +echo "=== Guest Driver Validation Suite ===" +echo "Open-IOV root: $OPEN_IOV_ROOT" + +# Check if we're root +if [ "$EUID" -ne 0 ]; then + echo "ERROR: This script must be run as root" + exit 1 +fi + +# Check if mdev exists +MDEV_DEVICES=$(ls /sys/bus/mdev/devices/ 2>/dev/null | wc -l) +if [ "$MDEV_DEVICES" -eq 0 ]; then + echo "ERROR: No mdev devices found. Run create_mdev.sh first." + exit 1 +fi + +echo "Found $MDEV_DEVICES mdev device(s)" + +# Launch QEMU with vGPU +echo "Launching QEMU with vGPU..." +"$SCRIPT_DIR/launch_qemu_vgpu.sh" & +QEMU_PID=$! + +# Wait for QEMU to start +sleep 10 + +# Check if QEMU is running +if ! kill -0 $QEMU_PID 2>/dev/null; then + echo "ERROR: QEMU failed to start" + exit 1 +fi + +echo "QEMU started with PID $QEMU_PID" +echo "Guest should be booting..." + +# Wait for guest to boot and SSH to be available +echo "Waiting for guest SSH (timeout 120s)..." +for i in {1..24}; do + if ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@localhost -p 2222 "echo 'SSH ready'" 2>/dev/null; then + echo "Guest SSH is ready" + break + fi + sleep 5 +done + +# Run guest driver setup +echo "Setting up guest NVIDIA driver..." +ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@localhost -p 2222 \ + "bash -s" < "$SCRIPT_DIR/setup_guest_driver.sh" + +# Test nvidia-smi +echo "Testing nvidia-smi..." +ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@localhost -p 2222 \ + "nvidia-smi" + +# Test CUDA +echo "Testing CUDA vectorAdd..." +ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@localhost -p 2222 \ + "cd /usr/local/cuda/samples/1_Utilities/vectorAdd && make && ./vectorAdd" + +# Cleanup +echo "Shutting down QEMU..." +kill $QEMU_PID 2>/dev/null || true +wait $QEMU_PID 2>/dev/null || true + +echo "=== Guest Driver Validation Complete ==="
\ No newline at end of file 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 diff --git a/scripts/test_windows_guest.sh b/scripts/test_windows_guest.sh new file mode 100755 index 0000000..7876bf4 --- /dev/null +++ b/scripts/test_windows_guest.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# Windows Guest Validation +# Tests Windows guest with NVIDIA driver + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +OPEN_IOV_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" + +echo "=== Windows Guest Validation ===" +echo "Open-IOV root: $OPEN_IOV_ROOT" + +# Check if we're root +if [ "$EUID" -ne 0 ]; then + echo "ERROR: This script must be run as root" + exit 1 +fi + +# This script assumes Windows guest is running with WinRM or SSH +# For now, this is a placeholder for the Windows test automation + +echo "Windows guest validation requires:" +echo " - Windows 10/11 guest with WinRM enabled" +echo " - NVIDIA 570.144 driver installed" +echo " - Test scripts copied to guest" + +echo "Test items (manual for now):" +echo " 1. Device Manager: Verify 'NVIDIA T4' (or equivalent) with Code 0" +echo " 2. nvidia-smi.exe: Shows vGPU info" +echo " 3. CUDA-Z: Device query passes" +echo " 4. vectorAdd.exe: Executes correctly" +echo " 5. dxdiag: Shows correct GPU info" +echo " 6. D3D11/D3D12/Vulkan: Render test passes" +echo " 7. NVENC/NVDEC: Encode/decode test passes" + +echo "=== Windows Guest Validation (Placeholder) ==="
\ No newline at end of file |
