Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- TOTAL_CORES='0-31'
- TOTAL_CORES_MASK=FFFFFFFF # bitmask 0b11111111111111111111111111111111
- HOST_CORES='2-3,16-31' # Cores reserved for host
- HOST_CORES_MASK=FFFF000C # bitmask 0b11111111111111110000000000001100
- VIRT_CORES='4-15' # Cores reserved for virtual machine(s)
- VIRT_CORES_MASK=FFF0 # bitmask 0b00000000000000001111111111110000
- VM_NAME="$1"
- VM_ACTION="$2/$3"
- echo $(date) QEMU hooks: $VM_NAME - $VM_ACTION >> /var/log/libvirthook.log
- if [[ "$VM_NAME" = "Win10" ]]; then
- if [[ "$VM_ACTION" = "prepare/begin" ]]; then
- echo $(date) Setting host cores $HOST_CORES >> /var/log/libvirthook.log
- systemctl set-property --runtime -- system.slice AllowedCPUs=$HOST_CORES
- systemctl set-property --runtime -- user.slice AllowedCPUs=$HOST_CORES
- systemctl set-property --runtime -- init.scope AllowedCPUs=$HOST_CORES
- echo $HOST_CORES_MASK > /sys/bus/workqueue/devices/writeback/cpumask
- echo 0 > /sys/bus/workqueue/devices/writeback/numa
- echo 3 > /proc/sys/vm/drop_caches
- for i in {0..1}; do
- sudo cpufreq-set -c ${i} -g performance --min 4000Mhz --max 4000Mhz;
- echo "performance" > /sys/devices/system/cpu/cpu${i}/cpufreq/scaling_governor;
- done
- for i in {4..15}; do
- sudo cpufreq-set -c ${i} -g performance --min 5700Mhz --max 5700Mhz;
- echo "performance" > /sys/devices/system/cpu/cpu${i}/cpufreq/scaling_governor;
- done
- echo $(date) Successfully reserved CPUs $VIRT_CORES >> /var/log/libvirthook.log
- elif [[ "$VM_ACTION" == "started/begin" ]]; then
- if pid=$(pidof qemu-system-x86_64); then
- chrt -fifo -p 1 $pid
- echo $(date) Changing scheduling to fifo for pid $pid >> /var/log/libvirthook.log
- fi
- elif [[ "$VM_ACTION" == "release/end" ]]; then
- systemctl set-property --runtime -- system.slice AllowedCPUs=$TOTAL_CORES
- systemctl set-property --runtime -- user.slice AllowedCPUs=$TOTAL_CORES
- systemctl set-property --runtime -- init.scope AllowedCPUs=$TOTAL_CORES
- echo $TOTAL_CORES_MASK > /sys/bus/workqueue/devices/writeback/cpumask
- echo 1 > /sys/bus/workqueue/devices/writeback/numa
- echo $(date) Successfully released CPUs $VIRT_CORES >> /var/log/libvirthook.log
- for file in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
- echo "powersave" > $file;
- done
- for i in {0..15}; do
- sudo cpufreq-set -c ${i} -g powersave --min 800Mhz --max 5800Mhz;
- done
- sleep 3
- systemctl restart nvidia-persistenced.service
- fi
- fi
Advertisement
Add Comment
Please, Sign In to add comment