Emulating the MMU alone is quite a big issue...
Re:PowerPC Notebook Block Diagram
by tom_mellior on Sunday November 12, 2017 @04:15PM
(#15682662)
I don't think QEMU in instruction set emulation mode emulates the MMU. Does it? The host system has a perfectly fine MMU. QEMU translates assembly code to assembly code. That is all it does, as far as I know.
Correct, currently usermode QEMU does not emulate the mmu, but just has a flat mapping of guestaddr = hostaddr + constant_base_addr. There has been some thought of adding mmu emulation to usermode, though, as the simple fixed mapping has problems (eg if the guest wants to map at some address where there's already something in the host address space, or for guest archs where the highbits of guest addresses are important like ia64).
When you run an application on QEMU on Linux, only the application code is simulated (by just-in-time compiling every basic block when it is first executed, then always just executing that compiled native code). System calls go to the Linux kernel on the host system, which runs as usual. Hardware is not virtualized. In contrast, Virtual PC (if I understand correctly) simulates the hardware of an entire PC, including graphics hardware, and runs all of Windows on top of that. That's a lot more expensive in terms of processing power.
That said, sure, you will probably lose some performance with QEMU. If the simulated code uses lots of fancy vector instructions that are not provided by the host hardware, you'll even lose a lot.