mirror of https://gitlab.com/Karuri/vfio
Initial commit
commit
5084074d05
@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
## Load the config file
|
||||||
|
source "/etc/libvirt/hooks/kvm.conf"
|
||||||
|
|
||||||
|
## Calculate number of hugepages to allocate from memory (in MB)
|
||||||
|
HUGEPAGES="$(($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,8 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
shopt -s nullglob
|
||||||
|
for g in /sys/kernel/iommu_groups/*; do
|
||||||
|
echo "IOMMU Group ${g##*/}:"
|
||||||
|
for d in $g/devices/*; do
|
||||||
|
echo -e "\t$(lspci -nns ${d##*/})"
|
||||||
|
done;
|
||||||
|
done;
|
@ -0,0 +1,6 @@
|
|||||||
|
#!/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
|
@ -0,0 +1,6 @@
|
|||||||
|
#!/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
|
@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
## Load the config file
|
||||||
|
source "/etc/libvirt/hooks/kvm.conf"
|
||||||
|
|
||||||
|
echo 0 > /proc/sys/vm/nr_hugepages
|
@ -0,0 +1,36 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -x
|
||||||
|
|
||||||
|
## Load the config file
|
||||||
|
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 AMD Driver
|
||||||
|
virsh nodedev-reattach $VIRSH_GPU_VIDEO
|
||||||
|
virsh nodedev-reattach $VIRSH_GPU_AUDIO
|
||||||
|
virsh nodedev-reattach $VIRSH_GPU_USB
|
||||||
|
virsh nodedev-reattach $VIRSH_GPU_SERIAL
|
||||||
|
|
||||||
|
# Rebind VT consoles
|
||||||
|
echo 1 > /sys/class/vtconsole/vtcon0/bind
|
||||||
|
echo 0 > /sys/class/vtconsole/vtcon1/bind
|
||||||
|
|
||||||
|
nvidia-xconfig --query-gpu-info > /dev/null 2>&1
|
||||||
|
# Re-Bind EFI-Framebuffer
|
||||||
|
echo "efi-framebuffer.0" > /sys/bus/platform/drivers/efi-framebuffer/bind
|
||||||
|
|
||||||
|
#Load nvidia driver
|
||||||
|
modprobe nvidia_drm
|
||||||
|
modprobe nvidia_modeset
|
||||||
|
modprobe drm_kms_helper
|
||||||
|
modprobe nvidia
|
||||||
|
modprobe i2c_nvidia_gpu
|
||||||
|
modprobe drm
|
||||||
|
|
||||||
|
# Restart Display Manager
|
||||||
|
systemctl start lightdm.service
|
||||||
|
|
@ -0,0 +1,39 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Helpful to read output when debugging
|
||||||
|
set -x
|
||||||
|
|
||||||
|
## Load the config file with our environmental variables
|
||||||
|
source "/etc/libvirt/hooks/kvm.conf"
|
||||||
|
|
||||||
|
# Stop display manager (KDE specific)
|
||||||
|
systemctl stop lightdm.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 drm_kms_helper
|
||||||
|
modprobe -r nvidia
|
||||||
|
modprobe -r i2c_nvidia_gpu
|
||||||
|
modprobe -r drm
|
||||||
|
|
||||||
|
# Unbind the GPU from display driver
|
||||||
|
virsh nodedev-detach $VIRSH_GPU_VIDEO
|
||||||
|
virsh nodedev-detach $VIRSH_GPU_AUDIO
|
||||||
|
virsh nodedev-detach $VIRSH_GPU_USB
|
||||||
|
virsh nodedev-detach $VIRSH_GPU_SERIAL
|
||||||
|
|
||||||
|
# Load VFIO kernel module
|
||||||
|
modprobe vfio
|
||||||
|
modprobe vfio_pci
|
||||||
|
modprobe vfio_iommu_type1
|
||||||
|
|
@ -0,0 +1,216 @@
|
|||||||
|
<domain type="kvm">
|
||||||
|
<name>win10</name>
|
||||||
|
<uuid>9a6c9e8d-403e-4dbb-bee3-dabfe3c747a6</uuid>
|
||||||
|
<metadata>
|
||||||
|
<libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
|
||||||
|
<libosinfo:os id="http://microsoft.com/win/10"/>
|
||||||
|
</libosinfo:libosinfo>
|
||||||
|
</metadata>
|
||||||
|
<memory unit="KiB">12582912</memory>
|
||||||
|
<currentMemory unit="KiB">12582912</currentMemory>
|
||||||
|
<memoryBacking>
|
||||||
|
<hugepages/>
|
||||||
|
</memoryBacking>
|
||||||
|
<vcpu placement="static">8</vcpu>
|
||||||
|
<iothreads>4</iothreads>
|
||||||
|
<cputune>
|
||||||
|
<vcpupin vcpu="0" cpuset="0"/>
|
||||||
|
<vcpupin vcpu="1" cpuset="1"/>
|
||||||
|
<vcpupin vcpu="2" cpuset="2"/>
|
||||||
|
<vcpupin vcpu="3" cpuset="3"/>
|
||||||
|
<vcpupin vcpu="4" cpuset="4"/>
|
||||||
|
<vcpupin vcpu="5" cpuset="5"/>
|
||||||
|
<vcpupin vcpu="6" cpuset="6"/>
|
||||||
|
<vcpupin vcpu="7" cpuset="7"/>
|
||||||
|
<emulatorpin cpuset="0,3"/>
|
||||||
|
<iothreadpin iothread="1" cpuset="0-1"/>
|
||||||
|
<iothreadpin iothread="2" cpuset="2-3"/>
|
||||||
|
<iothreadpin iothread="3" cpuset="4-5"/>
|
||||||
|
<iothreadpin iothread="4" cpuset="6-7"/>
|
||||||
|
</cputune>
|
||||||
|
<os>
|
||||||
|
<type arch="x86_64" machine="pc-q35-5.1">hvm</type>
|
||||||
|
<loader readonly="yes" secure="yes" type="pflash">/usr/share/edk2-ovmf/x64/OVMF_CODE.secboot.fd</loader>
|
||||||
|
<nvram>/var/lib/libvirt/qemu/nvram/win10_VARS.fd</nvram>
|
||||||
|
</os>
|
||||||
|
<features>
|
||||||
|
<acpi/>
|
||||||
|
<apic/>
|
||||||
|
<hyperv>
|
||||||
|
<relaxed state="on"/>
|
||||||
|
<vapic state="on"/>
|
||||||
|
<spinlocks state="on" retries="8191"/>
|
||||||
|
<vpindex state="on"/>
|
||||||
|
<synic state="on"/>
|
||||||
|
<stimer state="on"/>
|
||||||
|
<reset state="on"/>
|
||||||
|
<vendor_id state="on" value="Dell"/>
|
||||||
|
<frequencies state="on"/>
|
||||||
|
</hyperv>
|
||||||
|
<kvm>
|
||||||
|
<hidden state="on"/>
|
||||||
|
</kvm>
|
||||||
|
<vmport state="off"/>
|
||||||
|
<smm state="on"/>
|
||||||
|
<ioapic driver="kvm"/>
|
||||||
|
</features>
|
||||||
|
<cpu mode="host-passthrough" check="none" migratable="on">
|
||||||
|
<topology sockets="1" dies="1" cores="4" threads="2"/>
|
||||||
|
<cache mode="passthrough"/>
|
||||||
|
<feature policy="require" name="topoext"/>
|
||||||
|
</cpu>
|
||||||
|
<clock offset="localtime">
|
||||||
|
<timer name="rtc" tickpolicy="catchup"/>
|
||||||
|
<timer name="pit" tickpolicy="delay"/>
|
||||||
|
<timer name="hpet" present="no"/>
|
||||||
|
<timer name="hypervclock" present="yes"/>
|
||||||
|
</clock>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>destroy</on_crash>
|
||||||
|
<pm>
|
||||||
|
<suspend-to-mem enabled="no"/>
|
||||||
|
<suspend-to-disk enabled="no"/>
|
||||||
|
</pm>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu-system-x86_64</emulator>
|
||||||
|
<disk type="file" device="disk">
|
||||||
|
<driver name="qemu" type="qcow2"/>
|
||||||
|
<source file="/media/HardDrive/VMs/win10.qcow2"/>
|
||||||
|
<target dev="vda" bus="virtio"/>
|
||||||
|
<boot order="1"/>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x06" slot="0x00" function="0x0"/>
|
||||||
|
</disk>
|
||||||
|
<controller type="usb" index="0" model="qemu-xhci" ports="15">
|
||||||
|
<address type="pci" domain="0x0000" bus="0x02" slot="0x00" function="0x0"/>
|
||||||
|
</controller>
|
||||||
|
<controller type="sata" index="0">
|
||||||
|
<address type="pci" domain="0x0000" bus="0x00" slot="0x1f" function="0x2"/>
|
||||||
|
</controller>
|
||||||
|
<controller type="pci" index="0" model="pcie-root"/>
|
||||||
|
<controller type="pci" index="1" model="pcie-root-port">
|
||||||
|
<model name="pcie-root-port"/>
|
||||||
|
<target chassis="1" port="0x10"/>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x0" multifunction="on"/>
|
||||||
|
</controller>
|
||||||
|
<controller type="pci" index="2" model="pcie-root-port">
|
||||||
|
<model name="pcie-root-port"/>
|
||||||
|
<target chassis="2" port="0x11"/>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x1"/>
|
||||||
|
</controller>
|
||||||
|
<controller type="pci" index="3" model="pcie-root-port">
|
||||||
|
<model name="pcie-root-port"/>
|
||||||
|
<target chassis="3" port="0x12"/>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x2"/>
|
||||||
|
</controller>
|
||||||
|
<controller type="pci" index="4" model="pcie-root-port">
|
||||||
|
<model name="pcie-root-port"/>
|
||||||
|
<target chassis="4" port="0x13"/>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x3"/>
|
||||||
|
</controller>
|
||||||
|
<controller type="pci" index="5" model="pcie-root-port">
|
||||||
|
<model name="pcie-root-port"/>
|
||||||
|
<target chassis="5" port="0x14"/>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x4"/>
|
||||||
|
</controller>
|
||||||
|
<controller type="pci" index="6" model="pcie-root-port">
|
||||||
|
<model name="pcie-root-port"/>
|
||||||
|
<target chassis="6" port="0x15"/>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x5"/>
|
||||||
|
</controller>
|
||||||
|
<controller type="pci" index="7" model="pcie-root-port">
|
||||||
|
<model name="pcie-root-port"/>
|
||||||
|
<target chassis="7" port="0x16"/>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x6"/>
|
||||||
|
</controller>
|
||||||
|
<controller type="pci" index="8" model="pcie-to-pci-bridge">
|
||||||
|
<model name="pcie-pci-bridge"/>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x04" slot="0x00" function="0x0"/>
|
||||||
|
</controller>
|
||||||
|
<controller type="pci" index="9" model="pcie-root-port">
|
||||||
|
<model name="pcie-root-port"/>
|
||||||
|
<target chassis="9" port="0x8"/>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x0" multifunction="on"/>
|
||||||
|
</controller>
|
||||||
|
<controller type="pci" index="10" model="pcie-root-port">
|
||||||
|
<model name="pcie-root-port"/>
|
||||||
|
<target chassis="10" port="0x9"/>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x1"/>
|
||||||
|
</controller>
|
||||||
|
<controller type="pci" index="11" model="pcie-root-port">
|
||||||
|
<model name="pcie-root-port"/>
|
||||||
|
<target chassis="11" port="0xa"/>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x2"/>
|
||||||
|
</controller>
|
||||||
|
<controller type="virtio-serial" index="0">
|
||||||
|
<address type="pci" domain="0x0000" bus="0x03" slot="0x00" function="0x0"/>
|
||||||
|
</controller>
|
||||||
|
<interface type="network">
|
||||||
|
<mac address="52:54:00:6b:92:79"/>
|
||||||
|
<source network="default"/>
|
||||||
|
<model type="virtio"/>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x01" slot="0x00" function="0x0"/>
|
||||||
|
</interface>
|
||||||
|
<serial type="pty">
|
||||||
|
<target type="isa-serial" port="0">
|
||||||
|
<model name="isa-serial"/>
|
||||||
|
</target>
|
||||||
|
</serial>
|
||||||
|
<console type="pty">
|
||||||
|
<target type="serial" port="0"/>
|
||||||
|
</console>
|
||||||
|
<input type="mouse" bus="ps2"/>
|
||||||
|
<input type="keyboard" bus="ps2"/>
|
||||||
|
<sound model="ich9">
|
||||||
|
<address type="pci" domain="0x0000" bus="0x00" slot="0x1b" function="0x0"/>
|
||||||
|
</sound>
|
||||||
|
<hostdev mode="subsystem" type="pci" managed="yes">
|
||||||
|
<source>
|
||||||
|
<address domain="0x0000" bus="0x06" slot="0x00" function="0x0"/>
|
||||||
|
</source>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x07" slot="0x00" function="0x0"/>
|
||||||
|
</hostdev>
|
||||||
|
<hostdev mode="subsystem" type="pci" managed="yes">
|
||||||
|
<source>
|
||||||
|
<address domain="0x0000" bus="0x06" slot="0x00" function="0x1"/>
|
||||||
|
</source>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x09" slot="0x00" function="0x0"/>
|
||||||
|
</hostdev>
|
||||||
|
<hostdev mode="subsystem" type="usb" managed="yes">
|
||||||
|
<source>
|
||||||
|
<vendor id="0x258a"/>
|
||||||
|
<product id="0x0033"/>
|
||||||
|
</source>
|
||||||
|
<address type="usb" bus="0" port="1"/>
|
||||||
|
</hostdev>
|
||||||
|
<hostdev mode="subsystem" type="usb" managed="yes">
|
||||||
|
<source>
|
||||||
|
<vendor id="0x0c45"/>
|
||||||
|
<product id="0x5004"/>
|
||||||
|
</source>
|
||||||
|
<address type="usb" bus="0" port="2"/>
|
||||||
|
</hostdev>
|
||||||
|
<hostdev mode="subsystem" type="pci" managed="yes">
|
||||||
|
<source>
|
||||||
|
<address domain="0x0000" bus="0x06" slot="0x00" function="0x2"/>
|
||||||
|
</source>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x0a" slot="0x00" function="0x0"/>
|
||||||
|
</hostdev>
|
||||||
|
<hostdev mode="subsystem" type="pci" managed="yes">
|
||||||
|
<source>
|
||||||
|
<address domain="0x0000" bus="0x06" slot="0x00" function="0x3"/>
|
||||||
|
</source>
|
||||||
|
<address type="pci" domain="0x0000" bus="0x0b" slot="0x00" function="0x0"/>
|
||||||
|
</hostdev>
|
||||||
|
<hostdev mode="subsystem" type="usb" managed="yes">
|
||||||
|
<source>
|
||||||
|
<vendor id="0x0c76"/>
|
||||||
|
<product id="0x161f"/>
|
||||||
|
</source>
|
||||||
|
<address type="usb" bus="0" port="3"/>
|
||||||
|
</hostdev>
|
||||||
|
<memballoon model="virtio">
|
||||||
|
<address type="pci" domain="0x0000" bus="0x05" slot="0x00" function="0x0"/>
|
||||||
|
</memballoon>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
Loading…
Reference in New Issue