At Xilinx we have started to run our fork of QEMU on Windows and are starting to distrubute this to customers. As part of this QEMU is launched from an Eclipse based GUI on Windows hosts. This uncovered a few performance issues in QEMU when running on CPU restricted machines.
What we see is that when QEMU is run on a machine where there aren't enough spare CPUs on the host, QEMU is extreamly slow. We especially see this when running our multi-architecture QEMU setup (MicroBlaze and ARM) because we are running two QEMU instances as well as what else is running on the machine. Generally two instances of QEMU will never reach a Linux login prompt when run on four host CPUs, but will reach the login prompt when run on eight CPUs. We investigated the issue and realised that it is mostly because QEMU did not block and instead the IO thread just busy looped. This basically locked up two CPUs (two QEMU instances) with IO threads not leaving enough resources on the machine. This patch series fixed the issue for us on our fork of QEMU. Our fork is based on QEMU 2.8.1 and does not include MTTCG support. I have not tested this on the mainline QEMU or with MTTCG. It is on my todo list to see if I can repdouce the same issue on Windows with mainline QEMU. In the meantime I wanted to send this series to see if anyone else has seen Windows performance issues and if this helps with the problems. In order to see the issue we had to do a full Linux boot, smaller baremetal applications generally don't reproduce the same issue. Also, most of these patches are editing the QEMU implementation of Glib, obviously these fixes (if applicable) will need to be ported to Glib and applied there as well. I just wanted to start here. Alistair Francis (4): util/aio-win32: Only select on what we are actually waiting for util/oslib-win32: Remove invalid check util/oslib-win32: Fix up if conditional util/oslib-win32: Recursivly pass the timeout util/aio-win32.c | 13 ++++++++++--- util/oslib-win32.c | 25 +++++++++++++++++++------ 2 files changed, 29 insertions(+), 9 deletions(-) -- 2.11.0