Guest User

Untitled

a guest
Feb 11th, 2025
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.66 KB | None | 0 0
  1. #!/bin/bash
  2. TOTAL_CORES='0-31'
  3. TOTAL_CORES_MASK=FFFFFFFF # bitmask 0b11111111111111111111111111111111
  4. HOST_CORES='2-3,16-31' # Cores reserved for host
  5. HOST_CORES_MASK=FFFF000C # bitmask 0b11111111111111110000000000001100
  6. VIRT_CORES='4-15' # Cores reserved for virtual machine(s)
  7. VIRT_CORES_MASK=FFF0 # bitmask 0b00000000000000001111111111110000
  8.  
  9. VM_NAME="$1"
  10. VM_ACTION="$2/$3"
  11.  
  12. echo $(date) QEMU hooks: $VM_NAME - $VM_ACTION >> /var/log/libvirthook.log
  13.  
  14. if [[ "$VM_NAME" = "Win10" ]]; then
  15. if [[ "$VM_ACTION" = "prepare/begin" ]]; then
  16. echo $(date) Setting host cores $HOST_CORES >> /var/log/libvirthook.log
  17. systemctl set-property --runtime -- system.slice AllowedCPUs=$HOST_CORES
  18. systemctl set-property --runtime -- user.slice AllowedCPUs=$HOST_CORES
  19. systemctl set-property --runtime -- init.scope AllowedCPUs=$HOST_CORES
  20.  
  21. echo $HOST_CORES_MASK > /sys/bus/workqueue/devices/writeback/cpumask
  22. echo 0 > /sys/bus/workqueue/devices/writeback/numa
  23. echo 3 > /proc/sys/vm/drop_caches
  24.  
  25. for i in {0..1}; do
  26. sudo cpufreq-set -c ${i} -g performance --min 4000Mhz --max 4000Mhz;
  27. echo "performance" > /sys/devices/system/cpu/cpu${i}/cpufreq/scaling_governor;
  28. done
  29. for i in {4..15}; do
  30. sudo cpufreq-set -c ${i} -g performance --min 5700Mhz --max 5700Mhz;
  31. echo "performance" > /sys/devices/system/cpu/cpu${i}/cpufreq/scaling_governor;
  32. done
  33. echo $(date) Successfully reserved CPUs $VIRT_CORES >> /var/log/libvirthook.log
  34.  
  35. elif [[ "$VM_ACTION" == "started/begin" ]]; then
  36. if pid=$(pidof qemu-system-x86_64); then
  37. chrt -fifo -p 1 $pid
  38. echo $(date) Changing scheduling to fifo for pid $pid >> /var/log/libvirthook.log
  39. fi
  40.  
  41. elif [[ "$VM_ACTION" == "release/end" ]]; then
  42. systemctl set-property --runtime -- system.slice AllowedCPUs=$TOTAL_CORES
  43. systemctl set-property --runtime -- user.slice AllowedCPUs=$TOTAL_CORES
  44. systemctl set-property --runtime -- init.scope AllowedCPUs=$TOTAL_CORES
  45.  
  46. echo $TOTAL_CORES_MASK > /sys/bus/workqueue/devices/writeback/cpumask
  47. echo 1 > /sys/bus/workqueue/devices/writeback/numa
  48.  
  49. echo $(date) Successfully released CPUs $VIRT_CORES >> /var/log/libvirthook.log
  50.  
  51. for file in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
  52. echo "powersave" > $file;
  53. done
  54.  
  55. for i in {0..15}; do
  56. sudo cpufreq-set -c ${i} -g powersave --min 800Mhz --max 5800Mhz;
  57. done
  58.  
  59. sleep 3
  60. systemctl restart nvidia-persistenced.service
  61. fi
  62. fi
Advertisement
Add Comment
Please, Sign In to add comment