Skip to contentSkip to conversation

Sharing a page of memory between the guest and host

DISCUSSION Cam Macdonell 2 participants 4 messages Mar 5, 2008 – Mar 12, 2008 KVM

lore
Share & tools
lore
#0 lore raw

Hello,

Is it possible to share a memory (a page perhaps) between the host and guest? More precisely, could a host and guest share a memory-mapped file? If one were crazy enough to want to do this, where should they look first?

Thanks,
Cam

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/

#1 lore raw
Quoted 4 lines · Cam Macdonell

Hello,

Is it possible to share a memory (a page perhaps) between the host and guest?

Yes, the host always has access to all of the guests memory. All of the virtio drivers depend on this fact. With KVM, the userspace (in this case, QEMU), just tells the kernel about a virtual address region and the kernel uses that region of virtual memory for the guest's physical memory. Whatever you (as userspace) maps into that region is totally up to you.

Quoted 2 lines

More precisely, could a host and guest share a memory-mapped
file?

It will be a lot easier once we have MMU notifiers upstream. You'll be able to simply mmap(MAP_FIXED) a file into the guest's physical address space even while it's running. For now, you have to setup these mappings before the VM starts.

Quoted 3 lines

If one were crazy enough to want to do this, where should they
look first?

If you look at the -mem-file implementation in the latest git, you'll see that all the guest's memory can be an mmap()'d file.

Regards,

Anthony Liguori

Quoted 12 lines

Thanks,
Cam

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
kvm-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/kvm-devel

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/

#2 lore raw
Quoted 20 lines · Anthony Liguori
Quoted 4 lines · Cam Macdonell

Hello,

Is it possible to share a memory (a page perhaps) between the host and guest?

Yes, the host always has access to all of the guests memory. All of the virtio drivers depend on this fact. With KVM, the userspace (in this case, QEMU), just tells the kernel about a virtual address region and the kernel uses that region of virtual memory for the guest's physical memory. Whatever you (as userspace) maps into that region is totally up to you.

Quoted 1 line

More precisely, could a host and guest share a memory-mapped file?

It will be a lot easier once we have MMU notifiers upstream. You'll be able to simply mmap(MAP_FIXED) a file into the guest's physical address space even while it's running. For now, you have to setup these mappings before the VM starts.

Quoted 6 lines
Quoted 3 lines

If one were crazy enough to want to do this, where should they look
first?

If you look at the -mem-file implementation in the latest git, you'll see that all the guest's memory can be an mmap()'d file.

Hi,

Where is that implementation? I searched for mem-file, but couldn't find it.

Thanks,
Cam

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/

#3 lore raw
In reply to Anthony Liguori
Quoted 20 lines · Anthony Liguori
Quoted 4 lines · Cam Macdonell

Hello,

Is it possible to share a memory (a page perhaps) between the host and guest?

Yes, the host always has access to all of the guests memory. All of the virtio drivers depend on this fact. With KVM, the userspace (in this case, QEMU), just tells the kernel about a virtual address region and the kernel uses that region of virtual memory for the guest's physical memory. Whatever you (as userspace) maps into that region is totally up to you.

Quoted 1 line

More precisely, could a host and guest share a memory-mapped file?

It will be a lot easier once we have MMU notifiers upstream. You'll be able to simply mmap(MAP_FIXED) a file into the guest's physical address space even while it's running. For now, you have to setup these mappings before the VM starts.

Quoted 6 lines
Quoted 3 lines

If one were crazy enough to want to do this, where should they look
first?

If you look at the -mem-file implementation in the latest git, you'll see that all the guest's memory can be an mmap()'d file.

Hi Anthony,

In setting up the guest memory to share a page, I need to make the kernel aware of that page. Is the best way to do this through a little virtio-like PCI device or is there an easier to get dynamic info into the guest kernel?

Also, is the mem-file implementation in a specific branch of the latest GIT or is it within the main branch somewhere, I've been unable to find it?

Thanks a bunch,
Cam

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/