win amd GPU passtrough
This commit is contained in:
109
portainer-compose-stacks/windows/setup-gpu-passthrough.sh
Normal file
109
portainer-compose-stacks/windows/setup-gpu-passthrough.sh
Normal file
@@ -0,0 +1,109 @@
|
||||
#!/bin/bash
|
||||
|
||||
# GPU Passthrough Setup for AMD Strix Halo iGPU to Windows Container
|
||||
# This script enables IOMMU and configures VFIO-PCI for GPU passthrough
|
||||
|
||||
set -e
|
||||
|
||||
echo "=== AMD Strix Halo GPU Passthrough Setup ==="
|
||||
echo ""
|
||||
|
||||
# Check if running as root
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo "Please run as root (sudo)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# GPU PCI IDs
|
||||
GPU_PCI="0000:c5:00.0"
|
||||
GPU_AUDIO_PCI="0000:c5:00.1"
|
||||
GPU_VENDOR_ID="1002"
|
||||
GPU_DEVICE_ID="1586"
|
||||
|
||||
# Check current IOMMU status
|
||||
echo "Current IOMMU status:"
|
||||
cat /proc/cmdline | grep -o "amd_iommu=[^ ]*" || echo "IOMMU not configured in kernel parameters"
|
||||
echo ""
|
||||
|
||||
# Step 1: Enable IOMMU in GRUB
|
||||
echo "Step 1: Checking GRUB configuration..."
|
||||
GRUB_FILE="/etc/default/grub"
|
||||
|
||||
if ! grep -q "amd_iommu=on" "$GRUB_FILE"; then
|
||||
echo "Adding IOMMU parameters to GRUB..."
|
||||
cp "$GRUB_FILE" "$GRUB_FILE.backup.$(date +%Y%m%d-%H%M%S)"
|
||||
|
||||
# Update GRUB_CMDLINE_LINUX_DEFAULT
|
||||
sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="\(.*\)"/GRUB_CMDLINE_LINUX_DEFAULT="\1 amd_iommu=on iommu=pt vfio-pci.ids=1002:1586,1002:1640"/' "$GRUB_FILE"
|
||||
|
||||
# Clean up double spaces
|
||||
sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT=" /GRUB_CMDLINE_LINUX_DEFAULT="/' "$GRUB_FILE"
|
||||
|
||||
echo "Updating GRUB..."
|
||||
update-grub
|
||||
|
||||
echo ""
|
||||
echo "✓ GRUB updated. IOMMU will be enabled after reboot."
|
||||
else
|
||||
echo "✓ IOMMU already configured in GRUB"
|
||||
fi
|
||||
|
||||
# Step 2: Configure VFIO modules
|
||||
echo ""
|
||||
echo "Step 2: Configuring VFIO modules..."
|
||||
VFIO_CONF="/etc/modprobe.d/vfio.conf"
|
||||
|
||||
cat > "$VFIO_CONF" << EOF
|
||||
# Bind AMD Strix Halo GPU to VFIO for passthrough
|
||||
options vfio-pci ids=1002:1586,1002:1640
|
||||
softdep amdgpu pre: vfio-pci
|
||||
softdep snd_hda_intel pre: vfio-pci
|
||||
EOF
|
||||
|
||||
echo "✓ VFIO configuration created"
|
||||
|
||||
# Step 3: Update initramfs
|
||||
echo ""
|
||||
echo "Step 3: Adding VFIO modules to initramfs..."
|
||||
MODULES_FILE="/etc/initramfs-tools/modules"
|
||||
|
||||
if ! grep -q "vfio_pci" "$MODULES_FILE"; then
|
||||
cat >> "$MODULES_FILE" << EOF
|
||||
|
||||
# VFIO modules for GPU passthrough
|
||||
vfio
|
||||
vfio_iommu_type1
|
||||
vfio_pci
|
||||
vfio_virqfd
|
||||
EOF
|
||||
echo "✓ VFIO modules added to initramfs"
|
||||
else
|
||||
echo "✓ VFIO modules already in initramfs"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Updating initramfs..."
|
||||
update-initramfs -u
|
||||
|
||||
# Step 4: Summary and next steps
|
||||
echo ""
|
||||
echo "=== Setup Complete ==="
|
||||
echo ""
|
||||
echo "Configuration applied:"
|
||||
echo " - IOMMU enabled in GRUB (amd_iommu=on iommu=pt)"
|
||||
echo " - GPU (1002:1586) bound to vfio-pci driver"
|
||||
echo " - Audio (1002:1640) bound to vfio-pci driver"
|
||||
echo " - Initramfs updated with VFIO modules"
|
||||
echo ""
|
||||
echo "⚠️ REBOOT REQUIRED to apply changes by running: 'sudo update-grub' and 'sudo reboot'"
|
||||
echo ""
|
||||
echo "After reboot:"
|
||||
echo " 1. Verify IOMMU is enabled: dmesg | grep -i iommu"
|
||||
echo " 2. Check GPU binding: lspci -nnk -d 1002:1586"
|
||||
echo " 3. Start Windows container: docker-compose up -d"
|
||||
echo " 4. Install AMD drivers in Windows"
|
||||
echo ""
|
||||
echo "To reboot now, run: reboot"
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user