qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] Re: [PATCH 6/6] QEMU support for the Kernel Virtual Machine


From: Anthony Liguori
Subject: [Qemu-devel] Re: [PATCH 6/6] QEMU support for the Kernel Virtual Machine interface
Date: Fri, 01 Feb 2008 08:18:56 -0600
User-agent: Thunderbird 2.0.0.9 (X11/20071229)

Fabrice Bellard wrote:
Some questions:

- QEMU already maintains modified page status for VGA memory (and kqemu for example fully supports that), so I don't see why KVM needs a new method.

KQEMU passes the dirty bitmap directly to the kernel. KVM does aggressive shadow page table caching though so maintaining the bitmap requires removing write protection from the shadow page table entries explicitly whenever you want to reset it. This is not something you would want to do every time you go back and forth between userspace/kernelspace.

KVM also doesn't pass the phys_map to the kernel like KQEMU does. Instead, it divides memory into a set of slots. slots are contiguous areas of RAM memory. An IO access that does fall into a slot is treated as MMIO and is then sent to userspace. We then use the phys_map in userspace to dispatch the MMIO operation.

There are only a handful of slots and they happen to be arranged in order of most frequent access (I believe) such that you can very quickly determine whether memory is MMIO or not.

- Why is kvm_cpu_register_physical_memory() needed ? kqemu can work without it because there is a remapping between physical memory and RAM address. I suggest to add that feature in KVM or to modify cpu_register_physical_memory() to hide it.

The only reason the second call exists is to simplify the backwards compatibility code. I will fix it properly though because I do agree with you that it shouldn't be necessary.

- If KVM implements its own CPU loop, why are there patches in libqemu.a (CPU core) ?

Good question! I looked through the code and some of it was just dead code from before we had our own main loop. The rest is as follows:

In exec.c, we need to bump the size of the phys_map to support larger memory (since we use it to dispatch MMIO). We also need to ensure that cpu_interrupt calls into KVM code. There are also hooks for debugging support. We've added more flags to cpu.h that we use when synchronizing KVM register state to CPUState. We also added some additional state to CPUState that we need to use.

Other than that, I've removed everything else.

Regards,

Anthony Liguori

Regards,

Fabrice.





reply via email to

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