Skip to content

Instantly share code, notes, and snippets.

@ayufan
Created November 2, 2014 19:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ayufan/cc2bf7b8c3d138cdd0c4 to your computer and use it in GitHub Desktop.
Save ayufan/cc2bf7b8c3d138cdd0c4 to your computer and use it in GitHub Desktop.
KVM CPU shield with CPU pinning for Proxmox VE
#!/bin/bash
set -eo pipefail
VMID=200
cpu_tasks() {
expect <<EOF | sed -n 's/^.* CPU .*thread_id=\(.*\)$/\1/p' | tr -d '\r' || true
spawn qm monitor $VMID
expect ">"
send "info cpus\r"
expect ">"
EOF
}
VCPUS=($(cpu_tasks))
VCPU_COUNT="${#VCPUS[@]}"
if [[ $VCPU_COUNT -eq 0 ]]; then
echo "* No VCPUS for VM$VMID"
cset shield --reset
exit 1
fi
echo "* Detected ${#VCPUS[@]} assigned to VM$VMID..."
echo "* Resetting cpu shield..."
cset shield -c "0-$(($VCPU_COUNT-1))"
for CPU_INDEX in "${!VCPUS[@]}"; do
CPU_TASK="${VCPUS[$CPU_INDEX]}"
echo "* Assigning $CPU_INDEX to $CPU_TASK..."
cset shield --shield --pid "$CPU_TASK" --force
taskset -pc "$CPU_INDEX" "$CPU_TASK"
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment