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 @@ + + +
-
@@ -215,6 +217,7 @@ - + + diff --git a/roles/win10/tasks/main.yml b/roles/win10/tasks/main.yml index 593c32f..79e354a 100644 --- a/roles/win10/tasks/main.yml +++ b/roles/win10/tasks/main.yml @@ -89,11 +89,18 @@ dest: /etc/libvirt/hooks/qemu mode: '755' -- name: configure systemd CPUAffinity +# - name: configure systemd CPUAffinity +# lineinfile: +# path: /etc/systemd/system.conf +# regexp: '^#?CPUAffinity' +# line: 'CPUAffinity=0 4' + +- name: configure pulseaudio tcp socket lineinfile: - path: /etc/systemd/system.conf - regexp: '^#?CPUAffinity' - line: 'CPUAffinity=0 4' + path: /etc/pulse/default.pa + regexp: '^#?load-module module-native-protocol-tcp' + line: 'load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1' + - name: enable libvirtd.socket systemd: