qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] QEMU patch to allow VM introspection via libvmi


From: Valerio Aimale
Subject: Re: [Qemu-devel] QEMU patch to allow VM introspection via libvmi
Date: Tue, 27 Oct 2015 08:17:58 -0600
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:38.0) Gecko/20100101 Thunderbird/38.3.0

On 10/26/15 11:52 AM, Eduardo Habkost wrote:


I was trying to advocate the use of a shared mmap'ed region. The sharing
would be two-ways (RW for both) between the QEMU virtualizer and the libvmi
process. I envision that there could be a QEMU command line argument, such
as "--mmap-guest-memory <filename>" Understand that Eric feels strongly the
libvmi client should own the file name - I have not forgotten that. When
that command line argument is given, as part of the guest initialization,
QEMU creates a file of size equal to the size of the guest memory containing
all zeros, mmaps that file to the guest memory with  PROT_READ|PROT_WRITE
and MAP_FILE|MAP_SHARED, then starts the guest.
This is basically what memory-backend-file (and the legacy -mem-path
option) already does today, but it unlinks the file just after opening
it. We can change it to accept a full filename and/or an option to make
it not unlink the file after opening it.

I don't remember if memory-backend-file is usable without -numa, but we
could make it possible somehow.
Eduardo, I did try this approach. It takes 2 line changes in exec.c: comment the unlink out, and making sure MAP_SHARED is used when -mem-path and -mem-prealloc are given. It works beautifully, and libvmi accesses are fast. However, the VM is slowed down to a crawl, obviously, because each RAM access by the VM triggers a page fault on the mmapped file. I don't think having a crawling VM is desirable, so this approach goes out the door.

I think we're back at estimating the speed of other approaches as discussed previously:

- via UNIX socket as per existing patch
- via xp parsing the human readable xp output
- via an xp-like command the returns memory content baseXX-encoded into a json string
- via shared memory as per existing code and patch

Any other?







reply via email to

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