diff options
Diffstat (limited to 'qemu.in')
-rwxr-xr-x | qemu.in | 37 |
1 files changed, 37 insertions, 0 deletions
@@ -0,0 +1,37 @@ +#!/usr/bin/env bash +shopt -s lastpipe +set -euE -o pipefail + +declare -A vcpu2cpulist +numactl=() +source "@pkgconfdir@/$1" +args+=( + -name "$1",debug-threads=on + -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 |