#!/usr/bin/env bash shopt -s lastpipe set -euE -o pipefail declare -A vcpu2cpulist numactl=() source "@pkgconfdir@/$1" args+=( -name "$1",debug-threads=on -runas "$USER" -pidfile "@runstatedir@/qemu-$1/pid" -vnc unix:"@runstatedir@/qemu-$1/vnc.sock" -monitor unix:"@runstatedir@/qemu-$1/monitor.sock",server,nowait -serial file:"/dev/stdout" -daemonize ) { numactl "${numactl[@]}" -- qemu-system-"${system}" "${args[@]}" if [[ ${vcpu2cpulist+${#vcpu2cpulist[@]}} -gt 0 ]]; then declare -A vcpu2tid while read -r line; do if [[ $line != ?' CPU #'*:*thread_id=* ]]; then continue fi vcpu=${line#?' CPU #'}; vcpu=${vcpu%%:*} tid=${line#thread_id=}; tid=${tid%% *} vcpu2tid[$vcpu]=$tid done < <(socat STDIO UNIX-CONNECT:"@runstatedir@/qemu-$1/monitor.sock" <<<'info cpus') for vcpu in "${!vcpu_pins[@]}"; do taskset --cpu-list --pid -- "${vcpu2cpulist[@]}" "${vcpu2tid[$vcpu]}" done fi systemd-notify --ready } | exec cat