diff --git a/DSEreset.bat b/DSEreset.bat deleted file mode 100644 index 74e010a..0000000 --- a/DSEreset.bat +++ /dev/null @@ -1,12 +0,0 @@ -:: disable driver signature enforcement -:: relies on https://github.com/Mattiwatti/EfiGuard -C:\Users\e\FreeSLI-dist\tools\EfiDSEFix.exe -d -:: let it soak -TIMEOUT /T 2 -:: reset the devices, load the unsigned drivers -C:\Users\e\FreeSLI-dist\tools\devcon.exe disable "PCI\VEN_10DE&DEV_1E87&SUBSYS_21833842" -C:\Users\e\FreeSLI-dist\tools\devcon.exe enable "PCI\VEN_10DE&DEV_1E87&SUBSYS_21833842" -:: re-enable driver signature enforcement -TIMEOUT /T 2 -C:\Users\e\FreeSLI-dist\tools\EfiDSEFix.exe -e -PAUSE \ No newline at end of file diff --git a/start-win10 b/start-win10 index 6a49962..0fde060 100755 --- a/start-win10 +++ b/start-win10 @@ -1,83 +1,63 @@ #!/bin/bash -# -# script to create cpusets to isolate CPU threads for KVM/libvirt VMs -# requires 'cset' +# requires `cset` # available on Fedora through my COPR: # - https://copr.fedorainfracloud.org/coprs/jlay/cpuset/ -# review comments below regarding CPUs and XML entries -# +# review notes regarding XML entries + # this script: # - isolates host tasks from the VM CPUs # - applies some generic tweaks # - resets host isolation on VM shutdown -# -# define the CPUs (cores/threads) to isolate for the VM -VM_CORES='0-20,24-44' -# Tip: refer to 'virsh capabilities | grep siblings' -# this will show CPU topology information for the host -# allows one to pick optimal layout for the VM -# -# the pinned CPUs are definend like so in the VM libvirt XML: + +# Set the range of cores assigned to the windows VM +# on an i9-7920x this is the first 8 cores and the corresponding hyperthreads +VM_CORES='0-7,12-19' + +# based on the assignments of pinned CPUs in libvirt XML, eg: # -# -# -# -# [...] -# -# -# NOTE: the pinned emulator CPUs must be included in VM_CORES -# probably any iothreads too -# -# example above is based on a threadripper 3960x: -# - one NUMA node -# - SMT enabled -# +# +# [...] +# +# +# +# `lscpu -e` and `virsh capabilities` are helpful for determining valid pinning settings +# on example system (i9 7920x), vCPUs 0-15 are pinned (alternating between) cores 0-7 and hyperthreads 12-19 + # reduce kernel jitter -sudo sh -c 'sysctl vm.stat_interval=120 ; sysctl kernel.watchdog=0' +sudo sysctl vm.stat_interval=120 +sudo sysctl kernel.watchdog=0 -# attempt to reset shielding, we want to create it with current params -# and remove any existing slices from previous VM boots -# we want it to be created with current params, such as possibly-changed pinned CPUs -sudo cset shield --reset --sysset=host.slice --userset=windows10.slice || echo "something happened resetting shielding" - -# destroy old cpusets -sudo cset set -d windows10.slice || echo "ignoring failure to destroy VM cpuset" -sudo cset set -d host.slice || echo "ignoring failure to destroy host cpuset" - -# shield cores -# userset slice must match the partition defined in libvirt xml, eg: -# -# +# isolate VM CPUs from host tasks +# VM must have the partition cset uses w/ userset below defined in libvirt XML, eg: +# +# ... reference line # # /windows10 # -# +# ... reference line + +# first, attempt to reset shielding. we want to recreate conflicting names with set params +sudo cset shield --reset --sysset=host.slice --userset=windows10.slice +sudo cset set -d windows10.slice + +# shield cores sudo cset shield -c $VM_CORES --sysset=host.slice --userset=windows10.slice # start the VM -virsh start windows10 +sudo virsh start windows10 -# determine QEMU vCPU PIDs -QEMU_PIDS=$(sudo egrep 'vcpu.*pid' /var/run/libvirt/qemu/windows10.xml | cut -d\' -f4) - -# set higher priority for vCPU PIDs -sudo renice -20 -p ${QEMU_PIDS} -# either of these attempts at real time seem to freeze on boot -# try a different kernel (not 5.8.11) -#for CPUPID in ${QEMU_PIDS}; do -## sudo chrt -f -p 99 ${CPUPID} -# sudo chrt -r -p 99 ${CPUPID} -#done +# set higher priority +QEMU_PID=$(sudo ps fauxww | awk '$0 ~ /qemu.*windows1[0]/ {print $2}') +sudo renice -20 -p ${QEMU_PID} +sudo chrt -f -p 99 ${QEMU_PID} echo "Waiting for windows10 VM to stop before resetting cpusets" while true; do # chill a bit sleep 10 # get vm state, check if it's off - if test -f "/var/run/libvirt/qemu/windows10.xml"; then - VM_STATE="on" # doesn't do much (yet?), just here to fill a spot - else - VM_STATE="off" + VM_STATE=$(sudo virsh dominfo windows10 | awk '$1 ~ /State/ {print $NF}') + if [ "$VM_STATE" == 'off' ]; then echo -e "windows10 VM shut down, setting cpusets back to normal\n" sudo cset shield --reset --sysset=host.slice --userset=windows10.slice exit 0 diff --git a/old/windows10-1586050224.xml b/windows10-1586050224.xml similarity index 100% rename from old/windows10-1586050224.xml rename to windows10-1586050224.xml diff --git a/windows10-threadripper-pinning.xml b/windows10-threadripper-pinning.xml deleted file mode 100644 index 83d3d5c..0000000 --- a/windows10-threadripper-pinning.xml +++ /dev/null @@ -1,371 +0,0 @@ - - windows10 - ebe29b71-9205-4032-9880-9a02bdf2cc2e - - - - - - 33554432 - 33554432 - - - - - - 32 - 3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /windows10 - - - hvm - /usr/share/edk2/ovmf/OVMF_CODE.fd - /var/lib/libvirt/qemu/nvram/windows10_VARS.fd - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - destroy - restart - destroy - - - - - - /usr/bin/qemu-system-x86_64 - - - - - -
- - - - - - -
- - - - - -
- - -
- - -
- - - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - -
- - -
- - - - - - -
- - - - - - - - - - - -
- - - - -
- - - - - - -
- -