Advertisement
Guest User

passthrough.sh

a guest
Mar 25th, 2020
2,888
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.15 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. if [[ $UID -ne 0 ]]; then
  4. sudo -E bash $0 "$@"
  5. exit $?
  6. fi
  7.  
  8. # Necessary for parameter usage in cleanup()
  9. export TMP_PARAMS="$*"
  10.  
  11. # Perform cleanup after shutdown
  12. cleanup () {
  13.  
  14. # Return CPU power management to default
  15. #pstate-frequency --set -p auto -n 40
  16. cpupower -c 0-15 frequency-set -g schedutil
  17.  
  18. if [[ $TMP_PARAMS == *'--keep-hugepages'* ]]
  19. then
  20. echo "Skipping hugepage deletion..."
  21. else
  22. echo "Deleting hugepages..."
  23. echo "0" > /proc/sys/vm/nr_hugepages
  24. fi
  25.  
  26. # Reset cset
  27. echo "Resetting cset groups..."
  28. cset shield --reset
  29.  
  30. sleep 2
  31. cset set -d Host
  32.  
  33. echo "Undoing kernel optimizations..."
  34. echo 0000ffff > /sys/bus/workqueue/devices/writeback/cpumask
  35. echo 0000ffff > /sys/devices/virtual/workqueue/cpumask
  36. echo 0000ffff > /sys/devices/virtual/workqueue/writeback/cpumask
  37. #echo 20000 > /sys/module/kvm/parameters/halt_poll_ns
  38. #echo 950000 > /proc/sys/kernel/sched_rt_runtime_us
  39. #for i in $(pgrep '^spl_'); do taskset -pc 0-11 $i; done;
  40. #for i in $(pgrep '^z_'); do taskset -pc 0-11 $i; done;
  41. sysctl vm.stat_interval=1
  42. sysctl -w kernel.watchdog=1
  43. #echo 1 > /sys/bus/pci/devices/0000\:00\:07.1/0000\:0a\:00.3/remove
  44. #echo 1 > /sys/bus/pci/rescan
  45. #variety
  46. }
  47.  
  48.  
  49. if [[ $TMP_PARAMS == *'--cleanup'* ]]
  50. then
  51. echo "Cleanup only requested!"
  52. cleanup
  53. exit 0
  54. fi
  55.  
  56. #Fix GPU passthrough
  57. #echo 1 > /sys/bus/pci/devices/0000\:00\:03.1/remove
  58. #echo 1 > /sys/bus/pci/rescan
  59.  
  60. # CPU governor settings (keep CPU frequency up, might not work on older CPUs - use cpupower for those)
  61. cpupower -c 0-2,8-10 frequency-set -g performance
  62.  
  63. # Hugepages config
  64. export HUGEPAGES=7813
  65.  
  66. # Note that allocating hugepages after boot has a chance to fail. If continuous memory
  67. # cannot be allocated, a reboot will be required.
  68. export STARTING_HUGEPAGES="$(cat /proc/sys/vm/nr_hugepages)"
  69. if [[ "$STARTING_HUGEPAGES" -lt "$HUGEPAGES" ]]; then
  70. # Drop caches and compact memory to free up continuous memory for huge pages
  71. #echo 3 > /proc/sys/vm/drop_caches
  72. #echo 1 > /proc/sys/vm/compact_memory
  73.  
  74.  
  75. echo "Allocating $HUGEPAGES hugepages..."
  76. echo "$HUGEPAGES" > /proc/sys/vm/nr_hugepages
  77. ALLOC_PAGES="$(cat /proc/sys/vm/nr_hugepages)"
  78.  
  79. if [[ "$ALLOC_PAGES" -lt "$HUGEPAGES" ]]; then
  80. echo
  81. echo 'Not able to allocate hugepages'
  82. echo "Current max: $ALLOC_PAGES"
  83. echo
  84.  
  85. cleanup
  86. exit 1
  87. fi
  88. else
  89. echo "Hugepages already found, let's use those!"
  90. fi
  91.  
  92.  
  93. # Taskset (Move all current processes to unused cores)
  94. # Done last, so it can move synergy and scream-pulse as well
  95. #cset shield --sysset=Host --userset=VM --kthread on --cpu 1-3,5-7
  96. cset set -c 8 -s Host
  97. cset proc --move --fromset=root --toset=Host --threads --kthread --force
  98. #echo "Setting cset groups correctly..."
  99. #echo 1 > /sys/fs/cgroup/cpuset/Host/cpuset.cpu_exclusive
  100. #echo 0 > /sys/fs/cgroup/cpuset/VM/cpuset.cpu_exclusive
  101.  
  102. echo "Performing minor optimizations prior to launch..."
  103. # 000f 0-3
  104. # 0003 0-1
  105. #00000f3c 2-5,8-11
  106. #000000c3 0-1, 6-7
  107. #00000fbe 1-6,7-11
  108. #00000041 0,6
  109. #00000001 0
  110. #00000040 6
  111. #00000100 8
  112. #00000101 0,8
  113. echo 00000100 > /sys/bus/workqueue/devices/writeback/cpumask
  114. echo 00000100 > /sys/devices/virtual/workqueue/cpumask
  115. echo never > /sys/kernel/mm/transparent_hugepage/enabled
  116. #echo 0 > /sys/module/kvm/parameters/halt_poll_ns
  117. #echo -1 > /proc/sys/kernel/sched_rt_runtime_us
  118. #for i in $(pgrep '^rcuo'); do taskset -pc 0,4 $i > /dev/null; done;
  119. for i in $(pgrep 'rcuo'); do taskset -pc 8 $i > /dev/null; done;
  120. for i in /sys/devices/virtual/workqueue/*/cpumask; do echo 00000100 > $i; done;
  121. #for i in $(pgrep '^spl_'); do taskset -pc 0,1 $i; done;
  122. #for i in $(pgrep '^z_'); do taskset -pc 0,1 $i; done;
  123. pkill 'variety'
  124. pkill 'spotify'
  125. pkill 'syncthing-gtk'
  126. #pkill 'gdm-x-session'
  127. sysctl vm.stat_interval=120
  128. sysctl -w kernel.watchdog=0
  129.  
  130. /home/kayant/KVM/./qemu_fifo.sh &
  131.  
  132. # Start VM via virt-manager
  133. echo "VM starting..."
  134. virsh start win10
  135. echo
  136.  
  137. # Print status and wait for exit
  138. while [[ $(virsh list --all | grep running) ]]; do
  139. echo -en "\e[1A\rVM running - " # Weirdness is for formatting
  140. date
  141. sleep 1
  142. done
  143.  
  144. sleep 1
  145. echo "VM has exited"
  146.  
  147. cleanup
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement