summaryrefslogtreecommitdiffstats
path: root/scripts/test_guest_driver.sh
blob: f9b76c6158a9a78afddb03cf2c987c16e60a5da9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/bin/bash
# SPDX-License-Identifier: BSD-3-Clause
# Copyright (c) 2026 Open-IOV contributors
# 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 ==="