From 68cdd7728a7cc6715bbbff7decfe2b11c3bdf558 Mon Sep 17 00:00:00 2001 From: Open-IOV Date: Wed, 23 Sep 2026 05:44:08 -0400 Subject: Open-IOV: initial public release Open-IOV virtualizes NVIDIA GPUs so that unmodified guest drivers run with real GPU functionality - CUDA first, 3D and video to follow - on unmodified hosts, without a proprietary vGPU license and without patching any driver, firmware or hypervisor. Core principle: emulate the interface, pass through the work. kernel/ open-iov-vfio.ko - host VFIO mdev driver: virtual GPU device (PCI config space, BAR shadows, MSI-X), GSP boot emulation, GSP-RM message-queue/RPC emulation, memory model (GPU-VA to guest-PA discovery) and the semaphore-completion service that advances guest UVM progress. userspace/ libiov.so management API and examples. tools/ guest diagnostics, firmware analysis wrappers, RM probes. scripts/ stack manager, VM harness, build/load/test automation. config/ hardware/version profiles (the portability surface). docs/ documentation tree - start at docs/README.md. wiki/ long-form firmware and protocol deep dives. Status: initialization works end to end for a stock 570.144 Linux guest on Turing (TU104): driver probe, nvidia-smi, the full GSP-RM control battery, object creation and the early CUDA/UVM start-up path. GPU work forwarding - the step that makes CUDA kernels execute on real hardware - is the active work item; see docs/04-implementation/01-known-knowns-and-unknowns.md. License: BSD-3-Clause for the project; GPL-2.0 for kernel modules that link GPL-only kernel interfaces. See LICENSE and docs/09-reference/legal-and-licensing.md. --- scripts/load_vgpu_stack.sh | 57 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100755 scripts/load_vgpu_stack.sh (limited to 'scripts/load_vgpu_stack.sh') diff --git a/scripts/load_vgpu_stack.sh b/scripts/load_vgpu_stack.sh new file mode 100755 index 0000000..fcabb06 --- /dev/null +++ b/scripts/load_vgpu_stack.sh @@ -0,0 +1,57 @@ +#!/bin/bash +# load_vgpu_stack.sh - Load complete vGPU driver stack +# Usage: ./load_vgpu_stack.sh [firmware_name] + +set -euo pipefail + +FIRMWARE_NAME="${1:-gsp-570.144.fwimage.bin}" + +BASE_DIR="${OPEN_IOV_ROOT:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)}" +NVIDIA_KO="$BASE_DIR/nvidia-open-gpu-kernel-modules/kernel-open/nvidia.ko" +VFIO_KO="$BASE_DIR/kernel/open-iov-vfio.ko" +FIRMWARE_PATH="$BASE_DIR/firmware/57X-GSP/570.144/$FIRMWARE_NAME" + +echo "==========================================" +echo "Loading vGPU Driver Stack (Refactored: Host-only GSP Emulation)" +echo "==========================================" +echo "Firmware: $FIRMWARE_NAME" +echo "" + +# Check files exist +for f in "$NVIDIA_KO" "$VFIO_KO" "$FIRMWARE_PATH"; do + if [[ ! -f "$f" ]]; then + echo "ERROR: Missing file: $f" + exit 1 + fi +done + +# Load open-iov-vfio.ko FIRST (provides symbols nvidia.ko needs) +if lsmod | grep -q "^open_iov_vfio "; then + echo "open-iov-vfio.ko already loaded" +else + echo "Loading open-iov-vfio.ko..." + sudo insmod "$VFIO_KO" + echo " OK" +fi + +# Check if already loaded +if lsmod | grep -q "^nvidia "; then + echo "nvidia.ko already loaded" +else + echo "Loading nvidia.ko (OpenRM)..." + sudo insmod "$NVIDIA_KO" + echo " OK" +fi + +echo "" +echo "==========================================" +echo "Driver Stack Loaded Successfully" +echo "==========================================" +lsmod | grep -E "nvidia|open_iov" +echo "" +echo "Device nodes:" +ls -la /dev/nvidia* 2>/dev/null || echo " (none yet - create mdev first)" +echo "" +echo "Next steps:" +echo " 1. Create mdev: $BASE_DIR/scripts/create_mdev.sh" +echo " 2. Launch QEMU: $BASE_DIR/scripts/launch_qemu_vgpu.sh" \ No newline at end of file -- cgit v1.2.3