^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) #!/bin/sh
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) # SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) CPUS_ONLINE=$(lscpu --online -p=cpu|grep -v -e '#')
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) #use last CPU for host. Why not the first?
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #many devices tend to use cpu0 by default so
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #it tends to be busier
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) HOST_AFFINITY=$(echo "${CPUS_ONLINE}"|tail -n 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #run command on all cpus
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) for cpu in $CPUS_ONLINE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #Don't run guest and host on same CPU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #It actually works ok if using signalling
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) if
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) (echo "$@" | grep -e "--sleep" > /dev/null) || \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) test $HOST_AFFINITY '!=' $cpu
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) then
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) echo "GUEST AFFINITY $cpu"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) "$@" --host-affinity $HOST_AFFINITY --guest-affinity $cpu
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) echo "NO GUEST AFFINITY"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) "$@" --host-affinity $HOST_AFFINITY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) echo "NO AFFINITY"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) "$@"