diff --git a/roles/win10/files/archlinux_iommu.conf b/roles/win10/files/archlinux_iommu.conf
index 4cad3e5..7c3da76 100644
--- a/roles/win10/files/archlinux_iommu.conf
+++ b/roles/win10/files/archlinux_iommu.conf
@@ -1,6 +1,6 @@
title Archlinux w/ VFIO
-linux /vmlinuz-linux
+linux /vmlinuz-linux-xanmod
initrd /intel-ucode.img
-initrd /initramfs-linux.img
-options intel_iommu=on iommu=pt intel_iommu=igfx_off experimental_zcopytx=1 kvm.ignore_msrs=1 acpi_backlight=none root=LABEL=ARCHROOT rw
+initrd /initramfs-linux-xanmod.img
+options mitigations=off intel_iommu=on iommu=pt intel_iommu=igfx_off experimental_zcopytx=1 kvm.ignore_msrs=1 acpi_backlight=none root=LABEL=ARCHROOT rw
diff --git a/roles/win10/files/hooks/qemu b/roles/win10/files/hooks/qemu
index f09350b..c2b5120 100755
--- a/roles/win10/files/hooks/qemu
+++ b/roles/win10/files/hooks/qemu
@@ -1,18 +1,64 @@
#!/bin/bash
+
+prepare() {
+ systemctl start vm-usb-helper
+
+ echo "Defrag RAM"
+ echo 1 > /proc/sys/vm/compact_memory
+ for _ in $(seq 5); do
+ sleep 3
+ # assign hugepages
+ sysctl -w vm.nr_hugepages=8192 && break
+ done
+ sleep 10
+
+ echo "Setup cpuset cgroup for host"
+ sudo cset set -c 0,4 -s system
+ sudo cset proc -m -f root -t system
+ sudo cset proc -k -f root -t system --force
+
+ echo "Setup cpumask"
+ for i in /sys/devices/virtual/workqueue/*/cpumask; do
+ sudo sh -c "echo 001 > $i"
+ done;
+
+ echo "Setup interrupt affinity"
+ for i in $(sed -n -e 's/ \([0-9]\+\):.*vfio.*/\1/p' /proc/interrupts); do
+ sudo sh -c "echo 0,4 > /proc/irq/$i/smp_affinity_list"
+ done
+
+ echo "Set the CPU frequency governor to performance"
+ for f in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
+ echo performance >$f
+ done
+}
+
+release() {
+ echo "Restore system"
+ # irq
+ for i in $(sed -n -e 's/ \([0-9]\+\):.*vfio.*/\1/p' /proc/interrupts); do
+ sudo sh -c "echo ff > /proc/irq/$i/smp_affinity"
+ done
+ # cpumask
+ for i in /sys/devices/virtual/workqueue/*/cpumask; do
+ sudo sh -c "echo ff > $i"
+ done;
+ # cpuset
+ sudo cset set -d system &>/dev/null
+
+ for f in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
+ echo powersave >$f
+ done
+
+ systemctl stop vm-usb-helper
+ sysctl -w vm.nr_hugepages=0
+}
+
if [ "$1" == "win10" ]; then
if [ "$2" == "prepare" ]; then
- systemctl start vm-usb-helper
- # defrag ram
- echo 1 > /proc/sys/vm/compact_memory
- for _ in $(seq 5); do
- sleep 3
- # assign hugepages
- sysctl -w vm.nr_hugepages=8192 && break
- done
- sleep 10
+ prepare
fi
if [ "$2" == "release" ]; then
- systemctl stop vm-usb-helper
- sysctl -w vm.nr_hugepages=0
+ release
fi
fi
diff --git a/roles/win10/files/win10.xml b/roles/win10/files/win10.xml
index 28a3996..0d4edee 100644
--- a/roles/win10/files/win10.xml
+++ b/roles/win10/files/win10.xml
@@ -73,8 +73,9 @@
destroy
- restart
- restart
+
+ destroy
+ destroy
@@ -171,17 +172,18 @@
+
+
+
-