Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- if [[ $UID -ne 0 ]]; then
- sudo -E bash $0 "$@"
- exit $?
- fi
- # Necessary for parameter usage in cleanup()
- export TMP_PARAMS="$*"
- # Perform cleanup after shutdown
- cleanup () {
- # Return CPU power management to default
- #pstate-frequency --set -p auto -n 40
- cpupower -c 0-15 frequency-set -g schedutil
- if [[ $TMP_PARAMS == *'--keep-hugepages'* ]]
- then
- echo "Skipping hugepage deletion..."
- else
- echo "Deleting hugepages..."
- echo "0" > /proc/sys/vm/nr_hugepages
- fi
- # Reset cset
- echo "Resetting cset groups..."
- cset shield --reset
- sleep 2
- cset set -d Host
- echo "Undoing kernel optimizations..."
- echo 0000ffff > /sys/bus/workqueue/devices/writeback/cpumask
- echo 0000ffff > /sys/devices/virtual/workqueue/cpumask
- echo 0000ffff > /sys/devices/virtual/workqueue/writeback/cpumask
- #echo 20000 > /sys/module/kvm/parameters/halt_poll_ns
- #echo 950000 > /proc/sys/kernel/sched_rt_runtime_us
- #for i in $(pgrep '^spl_'); do taskset -pc 0-11 $i; done;
- #for i in $(pgrep '^z_'); do taskset -pc 0-11 $i; done;
- sysctl vm.stat_interval=1
- sysctl -w kernel.watchdog=1
- #echo 1 > /sys/bus/pci/devices/0000\:00\:07.1/0000\:0a\:00.3/remove
- #echo 1 > /sys/bus/pci/rescan
- #variety
- }
- if [[ $TMP_PARAMS == *'--cleanup'* ]]
- then
- echo "Cleanup only requested!"
- cleanup
- exit 0
- fi
- #Fix GPU passthrough
- #echo 1 > /sys/bus/pci/devices/0000\:00\:03.1/remove
- #echo 1 > /sys/bus/pci/rescan
- # CPU governor settings (keep CPU frequency up, might not work on older CPUs - use cpupower for those)
- cpupower -c 0-2,8-10 frequency-set -g performance
- # Hugepages config
- export HUGEPAGES=7813
- # Note that allocating hugepages after boot has a chance to fail. If continuous memory
- # cannot be allocated, a reboot will be required.
- export STARTING_HUGEPAGES="$(cat /proc/sys/vm/nr_hugepages)"
- if [[ "$STARTING_HUGEPAGES" -lt "$HUGEPAGES" ]]; then
- # Drop caches and compact memory to free up continuous memory for huge pages
- #echo 3 > /proc/sys/vm/drop_caches
- #echo 1 > /proc/sys/vm/compact_memory
- echo "Allocating $HUGEPAGES hugepages..."
- echo "$HUGEPAGES" > /proc/sys/vm/nr_hugepages
- ALLOC_PAGES="$(cat /proc/sys/vm/nr_hugepages)"
- if [[ "$ALLOC_PAGES" -lt "$HUGEPAGES" ]]; then
- echo
- echo 'Not able to allocate hugepages'
- echo "Current max: $ALLOC_PAGES"
- echo
- cleanup
- exit 1
- fi
- else
- echo "Hugepages already found, let's use those!"
- fi
- # Taskset (Move all current processes to unused cores)
- # Done last, so it can move synergy and scream-pulse as well
- #cset shield --sysset=Host --userset=VM --kthread on --cpu 1-3,5-7
- cset set -c 8 -s Host
- cset proc --move --fromset=root --toset=Host --threads --kthread --force
- #echo "Setting cset groups correctly..."
- #echo 1 > /sys/fs/cgroup/cpuset/Host/cpuset.cpu_exclusive
- #echo 0 > /sys/fs/cgroup/cpuset/VM/cpuset.cpu_exclusive
- echo "Performing minor optimizations prior to launch..."
- # 000f 0-3
- # 0003 0-1
- #00000f3c 2-5,8-11
- #000000c3 0-1, 6-7
- #00000fbe 1-6,7-11
- #00000041 0,6
- #00000001 0
- #00000040 6
- #00000100 8
- #00000101 0,8
- echo 00000100 > /sys/bus/workqueue/devices/writeback/cpumask
- echo 00000100 > /sys/devices/virtual/workqueue/cpumask
- echo never > /sys/kernel/mm/transparent_hugepage/enabled
- #echo 0 > /sys/module/kvm/parameters/halt_poll_ns
- #echo -1 > /proc/sys/kernel/sched_rt_runtime_us
- #for i in $(pgrep '^rcuo'); do taskset -pc 0,4 $i > /dev/null; done;
- for i in $(pgrep 'rcuo'); do taskset -pc 8 $i > /dev/null; done;
- for i in /sys/devices/virtual/workqueue/*/cpumask; do echo 00000100 > $i; done;
- #for i in $(pgrep '^spl_'); do taskset -pc 0,1 $i; done;
- #for i in $(pgrep '^z_'); do taskset -pc 0,1 $i; done;
- pkill 'variety'
- pkill 'spotify'
- pkill 'syncthing-gtk'
- #pkill 'gdm-x-session'
- sysctl vm.stat_interval=120
- sysctl -w kernel.watchdog=0
- /home/kayant/KVM/./qemu_fifo.sh &
- # Start VM via virt-manager
- echo "VM starting..."
- virsh start win10
- echo
- # Print status and wait for exit
- while [[ $(virsh list --all | grep running) ]]; do
- echo -en "\e[1A\rVM running - " # Weirdness is for formatting
- date
- sleep 1
- done
- sleep 1
- echo "VM has exited"
- cleanup
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement