Skip to content

x86 vm fails to stop on Darwin aarch64 when qemu compiled with -O1/-O2

Host environment

  • Operating system: MacOS Ventura 13.3.1 (a)
  • OS/kernel version: Darwin mbp.local 22.4.0 Darwin Kernel Version 22.4.0
  • Architecture: ARM64
  • QEMU flavor: qemu-system-x86_64
  • QEMU version: 8.0.0
  • QEMU command line:
    ./qemu-system-x86_64 -serial mon:stdio -drive file=ubuntu_20_04.qcow2,if=virtio,cache=writeback,discard=ignore,format=qcow2 -drive file=cidata.iso,media=cdrom -machine type=pc,accel=tcg -vnc 127.0.0.1:16 -name ubuntu_20_04.qcow2 -nographic -netdev user,id=user.0,hostfwd=tcp::2640-:22 -m 2048M -smp 1 -device virtio-net,netdev=user.0 -boot c

Emulated/Virtualized environment

  • Operating system: Ubuntu 20.04
  • OS/kernel version: 5.4.0
  • Architecture: x86

Description of problem

When compiled with -O2 or -O1 qemu process hangs on full VM stopping on macOS aarch64 host if shutdown -P now initiated from guest system.

Steps to reproduce

  1. Compile latest qemu version with -O2 (default value) or -O1 passed
  2. Run qemu-system-x86_64 with ubuntu image, e.g. https://cloud-images.ubuntu.com/focal/20230215/focal-server-cloudimg-amd64.img and custom cloud-init (for user/password authentication)
  3. Wait until image is loaded, connect via vnc or provide login/password in stdio
  4. Initiate shutdown with sudo shutdown -P now
  5. See that VM indefinitely shutdowns
  6. Kill VM from host system with kill -9 <qemu-system-x86_64-process-pid>
  7. Recompile qemu with -O0
  8. Repeat steps 2-4
  9. See that vm successfully stopped, and qemu process exited with code 0

Additional information

I've created thread dump from activity monitor with threads which qemu hanging on, attached below sample-qemu-system-x86_64.txt

Probably there is some compiler optimisation which prevents qemu threads from receive shutdown signal or appropriate notification from another threads.

The compiler version with which qemu is built:

% cc --version
Apple clang version 14.0.3 (clang-1403.0.22.14.1)
Target: arm64-apple-darwin22.4.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
Edited by Dmitriy Poluyanov
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information