qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] Re: [PATCH] Patches from PyQemu project


From: Fabrice Bellard
Subject: Re: [Qemu-devel] Re: [PATCH] Patches from PyQemu project
Date: Wed, 05 Sep 2007 12:08:23 +0200
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.12) Gecko/20050922 Fedora/1.7.12-1.3.1

Anthony Liguori wrote:
On Tue, 2007-09-04 at 23:27 +0100, Thiemo Seufer wrote:

Brian Johnson wrote:
[snip]

My initial thought is to make the libraries at the individual device
level.

It would be good to have a general mechanism for bus providers, interrupts, APICs, chipsets, etc. as well, so we could emulate fancier architectures than a simple PC (or simple Sparc/MIPS/ARM/etc. box.) For instance, I'd like to emulate multiple PCIe host bridges, each with an APIC and multiple cards, which might contain PCI-to-PCI bridges. And I'd like to emulate NUMA systems with many memory controllers and a complex memory map, with multiple sets of chipset registers. I don't expect qemu to do this off the shelf,

Why not? I would like to see better abstracted and more capable device
emulations in Qemu.


but I'd like to avoid hardcoding PC assumptions into the device libraries, so I can code the fancy machines myself and use the I/O as-is.

Then, what does a librar-ized Qemu device with its hardcoded PC
assumptions help you?


Let me give a very pragmatic answer.  Right now, KVM has it's own main
loop which uses a thread per-vcpu.  Device IO is handled in the context
of the VCPU that originated the IO.  I think there's some desire to move
to an N+1 threading model where the extra thread does things like VGA
scanning, VNC, etc.

Xen, on the other hand, uses a single thread for everything and doesn't
attempt to model multiple VCPUs within the QEMU process.  All IO is
delivered via the same channel.  QEMU is strictly used for devices.

Merging either of these with QEMU's current model would be challenging,
merging both would be extremely challenging b/c the two main loop models
are mutually exclusive.

However, there's no real trouble merging any of the device emulation
back.  KVM doesn't maintain any changes to things like device emulation
(other than some KVM-specific APIC stuff).  Xen, on the other hand,
mostly has fixes for some of the devices that haven't been submitted
back to QEMU.  Other devices are completely unmodified but are severely
lagging behind the QEMU versions.

VirtualBox is way different than QEMU of course.  A bunch of their
device emulation is pretty close to QEMU though.

I think device emulation is an independent enough problem that there's a
good chance everyone can agree on a single implementation.  While it's a
little more work in QEMU to keep these things as libraries and maintain
an interface, I suspect the benefits outweigh the extra cost in that
it's much more likely we'll see more patches.

There are useful bits of QEMU that could be widely consumed.  Their
nature is such that their interfaces are unlikely to change dramatically
in the future.  To me, this just screams "library" :-)

I agree with the point that QEMU should be improved so that it is easier to reuse the device model. But I consider that the priority is not to export a library but to improve the existing QEMU C APIs. The goal should be that it is possible to emulate several different CPUs at once with several unrelated buses. Moreover the model should support deterministic simulation. Currently the PCI bus is the closest to what is needed, but even in it there are still some conceptual problems (see the DMA problems which were discussed before).

Regarding the other projects, I see no technical reason why the KVM code cannot be merged. QEMU already contains the necessary support code for KQEMU and I see no conceptual difference with KVM. Adding a new main loop for KVM or a new KVM specific CPU is not something I am against.

Regards,

Fabrice.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]