[KVM] Add Desktop gpu-passthrouth config
This commit is contained in:
parent
c5d8a8501f
commit
0034421f8b
11 changed files with 1357 additions and 0 deletions
9
configs/kvm/libvirt/hooks/kvm.conf
Normal file
9
configs/kvm/libvirt/hooks/kvm.conf
Normal file
|
@ -0,0 +1,9 @@
|
|||
# CONFIG
|
||||
VM_MEMORY=24576
|
||||
|
||||
# VIRSH
|
||||
VIRSH_GPU_VIDEO=pci_0000_42_00_0
|
||||
VIRSH_GPU_AUDIO=pci_0000_42_00_1
|
||||
VIRSH_USB=pci_0000_42_00_2
|
||||
VIRSH_SERIAL_BUS=pci_0000_42_00_3
|
||||
|
28
configs/kvm/libvirt/hooks/qemu
Executable file
28
configs/kvm/libvirt/hooks/qemu
Executable file
|
@ -0,0 +1,28 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# Author: Sebastiaan Meijer (sebastiaan@passthroughpo.st)
|
||||
#
|
||||
|
||||
GUEST_NAME="$1"
|
||||
HOOK_NAME="$2"
|
||||
STATE_NAME="$3"
|
||||
MISC="${@:4}"
|
||||
|
||||
BASEDIR="$(dirname $0)"
|
||||
|
||||
HOOKPATH="$BASEDIR/qemu.d/$GUEST_NAME/$HOOK_NAME/$STATE_NAME"
|
||||
|
||||
set -e # If a script exits with an error, we should as well.
|
||||
|
||||
# check if it's a non-empty executable file
|
||||
if [ -f "$HOOKPATH" ] && [ -s "$HOOKPATH"] && [ -x "$HOOKPATH" ]; then
|
||||
eval \"$HOOKPATH\" "$@"
|
||||
elif [ -d "$HOOKPATH" ]; then
|
||||
while read file; do
|
||||
# check for null string
|
||||
if [ ! -z "$file" ]; then
|
||||
eval \"$file\" "$@"
|
||||
fi
|
||||
done <<< "$(find -L "$HOOKPATH" -maxdepth 1 -type f -executable -print;)"
|
||||
fi
|
||||
|
29
configs/kvm/libvirt/hooks/qemu.d/win10/prepare/begin/alloc_hugepages.sh
Executable file
29
configs/kvm/libvirt/hooks/qemu.d/win10/prepare/begin/alloc_hugepages.sh
Executable file
|
@ -0,0 +1,29 @@
|
|||
#!/bin/bash
|
||||
|
||||
## Load the config file
|
||||
source "/etc/libvirt/hooks/kvm.conf"
|
||||
|
||||
## Calculate number of hugepages to allocate from memory (in MB)
|
||||
HUGEPAGES="$(($VM_MEMORY/$(($(grep Hugepagesize /proc/meminfo | awk '{print $2}')/1024))))"
|
||||
|
||||
echo "Allocating hugepages..."
|
||||
echo $HUGEPAGES > /proc/sys/vm/nr_hugepages
|
||||
ALLOC_PAGES=$(cat /proc/sys/vm/nr_hugepages)
|
||||
|
||||
TRIES=0
|
||||
while (( $ALLOC_PAGES != $HUGEPAGES && $TRIES < 1000 ))
|
||||
do
|
||||
echo 1 > /proc/sys/vm/compact_memory ## defrag ram
|
||||
echo $HUGEPAGES > /proc/sys/vm/nr_hugepages
|
||||
ALLOC_PAGES=$(cat /proc/sys/vm/nr_hugepages)
|
||||
echo "Succesfully allocated $ALLOC_PAGES / $HUGEPAGES"
|
||||
let TRIES+=1
|
||||
done
|
||||
|
||||
if [ "$ALLOC_PAGES" -ne "$HUGEPAGES" ]
|
||||
then
|
||||
echo "Not able to allocate all hugepages. Reverting..."
|
||||
echo 0 > /proc/sys/vm/nr_hugepages
|
||||
exit 1
|
||||
fi
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
#!/bin/bash
|
||||
|
||||
## Enable CPU governor performance mode
|
||||
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
|
||||
for file in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo "performance" > $file; done
|
||||
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
|
||||
|
35
configs/kvm/libvirt/hooks/qemu.d/win10/prepare/begin/start.sh
Executable file
35
configs/kvm/libvirt/hooks/qemu.d/win10/prepare/begin/start.sh
Executable file
|
@ -0,0 +1,35 @@
|
|||
#!/bin/bash
|
||||
# Helpful to read output when debugging
|
||||
set -x
|
||||
|
||||
# Load variables
|
||||
source "/etc/libvirt/hooks/kvm.conf"
|
||||
|
||||
# Stop display manager
|
||||
systemctl stop gdm.service
|
||||
|
||||
# Unbind VTconsoles
|
||||
echo 0 > /sys/class/vtconsole/vtcon0/bind
|
||||
echo 0 > /sys/class/vtconsole/vtcon1/bind
|
||||
|
||||
# Unbind EFI-Framebuffer
|
||||
echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/unbind
|
||||
|
||||
# Avoid a Race condition
|
||||
sleep 5
|
||||
|
||||
# Unload all Nvidia drivers
|
||||
modprobe -r nvidia_drm
|
||||
modprobe -r nvidia_modeset
|
||||
modprobe -r nvidia_uvm
|
||||
modprobe -r nvidia
|
||||
|
||||
# Unbind the GPU from display driver
|
||||
virsh nodedev-detach $VIRSH_GPU_VIDEO
|
||||
virsh nodedev-detach $VIRSH_GPU_AUDIO
|
||||
virsh nodedev-detach $VIRSH_USB
|
||||
virsh nodedev-detach $VIRSH_SERIAL_BUS
|
||||
|
||||
# Load VFIO Kernel Module
|
||||
modprobe vfio-pci
|
||||
|
7
configs/kvm/libvirt/hooks/qemu.d/win10/release/end/cpu_mode_ondemand.sh
Executable file
7
configs/kvm/libvirt/hooks/qemu.d/win10/release/end/cpu_mode_ondemand.sh
Executable file
|
@ -0,0 +1,7 @@
|
|||
#!/bin/bash
|
||||
|
||||
## Enable CPU governor on-demand mode
|
||||
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
|
||||
for file in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo "ondemand" > $file; done
|
||||
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
|
||||
|
4
configs/kvm/libvirt/hooks/qemu.d/win10/release/end/dealloc_hugepages.sh
Executable file
4
configs/kvm/libvirt/hooks/qemu.d/win10/release/end/dealloc_hugepages.sh
Executable file
|
@ -0,0 +1,4 @@
|
|||
#!/bin/bash
|
||||
|
||||
echo 0 > /proc/sys/vm/nr_hugepages
|
||||
|
36
configs/kvm/libvirt/hooks/qemu.d/win10/release/end/stop.sh
Executable file
36
configs/kvm/libvirt/hooks/qemu.d/win10/release/end/stop.sh
Executable file
|
@ -0,0 +1,36 @@
|
|||
#!/bin/bash
|
||||
set -x
|
||||
|
||||
# Load variables
|
||||
source "/etc/libvirt/hooks/kvm.conf"
|
||||
|
||||
# Unload VFIO-PCI Kernel Driver
|
||||
modprobe -r vfio-pci
|
||||
modprobe -r vfio_iommu_type1
|
||||
modprobe -r vfio
|
||||
|
||||
# Re-Bind GPU to Nvidia Driver
|
||||
virsh nodedev-reattach $VIRSH_GPU_VIDEO
|
||||
virsh nodedev-reattach $VIRSH_GPU_AUDIO
|
||||
virsh nodedev-reattach $VIRSH_USB
|
||||
virsh nodedev-reattach $VIRSH_SERIAL_BUS
|
||||
|
||||
# Rebind VT consoles
|
||||
echo 1 > /sys/class/vtconsole/vtcon0/bind
|
||||
echo 1 > /sys/class/vtconsole/vtcon1/bind
|
||||
|
||||
# Bind EFI-Framebuffer
|
||||
nvidia-xconfig --query-gpu-info > /dev/null 2>&1
|
||||
echo "efi-framebuffer.0" > /sys/bus/platform/drivers/efi-framebuffer/bind
|
||||
|
||||
# Load all Nvidia drivers
|
||||
modprobe nvidia_drm
|
||||
modprobe nvidia_modeset
|
||||
modprobe drm_kms_helper
|
||||
modprobe drm
|
||||
modprobe nvidia_uvm
|
||||
modprobe nvidia
|
||||
|
||||
# Restart Display Manager
|
||||
systemctl start gdm.service
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue