#!/usr/bin/env bash shopt -s lastpipe set -euE -o pipefail declare -A vcpu2cpulist numactl=() source "/etc/conf.d/qemu.d/$1" args+=( -name "$1",debug-threads=on -pidfile "/run/qemu-$1/pid" -vnc unix:"/run/qemu-$1/vnc.sock" -monitor unix:"/run/qemu-$1/monitor.sock",server,nowait -serial file:"/dev/stdout" -daemonize ) { numactl "${numactl[@]}" -- qemu-system-"${system}" "${args[@]}" if [[ ${#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:"/run/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