On Wed, Jul 22, 2009 at 7:02 PM, Richard W.M. Jones<rjones(a)redhat.com> wrote:
On Tue, Jul 21, 2009 at 07:39:07PM +0900, Jun Koi wrote:
> Hi,
>
> I play around with MemoryPeek() API on QEMU. While it works well, I
> found that it is too slow.
>
> That is expected because of the way it works: we always need to save
> memory to a file, and read it in again, and that is too inefficient.
Yes this is correct, and works that way because of how the qemu
'memsave' command works.
Also there is a limit on the size of each peek (64K?) which is due to
the libvirt remote protocol, specifically the max message size.
> I am trying to figure out a better way to do this. To do that, clearly
> we need to re-architecture QEMU for this: We must have another way to
> read memory from outside the QEMU process.
>
> Anybody could suggest a solution for this problem? I am willing to
> spend time on this feature to improve the situation.
A better virDomainMemoryPeek / QEMU memsize would have the following
features:
(1) Allow large chunks of memory to be snapshotted all in one go.
We'd still have to fetch them piece-by-piece because of the max
message size in the libvirt remote protocol, but at least the single
large snapshot would be more consistent.
(2) Don't use the temporary file (?)
(3) Be faster, eg. in the non-remote case.
(4) Work with Xen and other hypervisors ...
(5) Work with physical memory, virtual memory and registers.
On (5): that requires another API, not this virDomainMemoryPeek()
I agreed on (1), (2), (3) & (4).
For now, I want to improve the situation on QEMU (thus, KVM) first.
One obvious way is to transfer data directly from QEMU driver to QEMU
using a particular IPC. How about having an Unix domain socket for
this purpose?
I imagine that we need to have a separate socket, opened and managed
by QEMU interface.
Idea?
Thanks,
J