[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC 0/9] Add an interVM memory sharing device
From: |
Stefan Hajnoczi |
Subject: |
Re: [RFC 0/9] Add an interVM memory sharing device |
Date: |
Wed, 5 Feb 2020 14:39:11 +0000 |
On Tue, Feb 04, 2020 at 12:30:42PM +0100, address@hidden wrote:
> From: Igor Kotrasinski <address@hidden>
>
> This patchset adds a "memory exposing" device that allows two QEMU
> instances to share arbitrary memory regions. Unlike ivshmem, it does not
> create a new region of memory that's shared between VMs, but instead
> allows one VM to access any memory region of the other VM we choose to
> share.
>
> The motivation for this device is a sort of ARM Trustzone "emulation",
> where a rich system running on one machine (e.g. x86_64 linux) is able
> to perform SMCs to a trusted system running on another (e.g. OpTEE on
> ARM). With a device that allows sharing arbitrary memory between VMs,
> this can be achieved with minimal changes to the trusted system and its
> linux driver while allowing the rich system to run on a speedier x86
> emulator. I prepared additional patches for linux, OpTEE OS and OpTEE
> build system as a PoC that such emulation works and passes OpTEE tests;
> I'm not sure what would be the best way to share them.
>
> This patchset is my first foray into QEMU source code and I'm certain
> it's not yet ready to be merged in. I'm not sure whether memory sharing
> code has any race conditions or breaks rules of working with memory
> regions, or if having VMs communicate synchronously via chardevs is the
> right way to do it. I do believe the basic idea for sharing memory
> regions is sound and that it could be useful for inter-VM communication.
Hi,
Without having looked into the patches yet, I'm already wondering if you
can use the existing -object
memory-backend-file,size=512M,mem-path=/my/shared/mem feature for your
use case?
That's the existing mechanism for fully sharing guest RAM and if you
want to share all of memory then maybe a device is not necessary - just
share the memory.
Stefan
> Igor Kotrasinski (9):
> memory: Add function for finding flat memory ranges
> memory: Support mmap offset for fd-backed memory regions
> memory: Hack - use shared memory when possible
> hw/misc/memexpose: Add documentation
> hw/misc/memexpose: Add core memexpose files
> hw/misc/memexpose: Add memexpose pci device
> hw/misc/memexpose: Add memexpose memory region device
> hw/misc/memexpose: Add simple tests
> hw/arm/virt: Hack in support for memexpose device
>
> Kconfig.host | 3 +
> MAINTAINERS | 12 +
> Makefile | 1 +
> backends/hostmem-memfd.c | 2 +-
> configure | 8 +
> docs/specs/memexpose-spec.txt | 168 +++++++++
> exec.c | 10 +-
> hw/arm/virt.c | 110 +++++-
> hw/core/numa.c | 4 +-
> hw/mem/Kconfig | 3 +
> hw/misc/Makefile.objs | 1 +
> hw/misc/ivshmem.c | 3 +-
> hw/misc/memexpose/Makefile.objs | 4 +
> hw/misc/memexpose/memexpose-core.c | 630
> ++++++++++++++++++++++++++++++++
> hw/misc/memexpose/memexpose-core.h | 109 ++++++
> hw/misc/memexpose/memexpose-memregion.c | 142 +++++++
> hw/misc/memexpose/memexpose-memregion.h | 41 +++
> hw/misc/memexpose/memexpose-msg.c | 261 +++++++++++++
> hw/misc/memexpose/memexpose-msg.h | 161 ++++++++
> hw/misc/memexpose/memexpose-pci.c | 218 +++++++++++
> include/exec/memory.h | 20 +
> include/exec/ram_addr.h | 2 +-
> include/hw/arm/virt.h | 5 +
> include/qemu/mmap-alloc.h | 1 +
> memory.c | 82 ++++-
> tests/qtest/Makefile.include | 2 +
> tests/qtest/memexpose-test.c | 364 ++++++++++++++++++
> util/mmap-alloc.c | 7 +-
> util/oslib-posix.c | 2 +-
> 29 files changed, 2360 insertions(+), 16 deletions(-)
> create mode 100644 docs/specs/memexpose-spec.txt
> create mode 100644 hw/misc/memexpose/Makefile.objs
> create mode 100644 hw/misc/memexpose/memexpose-core.c
> create mode 100644 hw/misc/memexpose/memexpose-core.h
> create mode 100644 hw/misc/memexpose/memexpose-memregion.c
> create mode 100644 hw/misc/memexpose/memexpose-memregion.h
> create mode 100644 hw/misc/memexpose/memexpose-msg.c
> create mode 100644 hw/misc/memexpose/memexpose-msg.h
> create mode 100644 hw/misc/memexpose/memexpose-pci.c
> create mode 100644 tests/qtest/memexpose-test.c
>
> --
> 2.7.4
>
>
signature.asc
Description: PGP signature
- [RFC 2/9] memory: Support mmap offset for fd-backed memory regions, (continued)
- Message not available
- Message not available
- Message not available
- Message not available
- Message not available
- Message not available
- Message not available
Re: [RFC 0/9] Add an interVM memory sharing device, no-reply, 2020/02/04
Re: [RFC 0/9] Add an interVM memory sharing device, no-reply, 2020/02/04
Re: [RFC 0/9] Add an interVM memory sharing device,
Stefan Hajnoczi <=
- Re: [RFC 0/9] Add an interVM memory sharing device, Jan Kiszka, 2020/02/05
- Re: [RFC 0/9] Add an interVM memory sharing device, Igor Kotrasiński, 2020/02/07
- Re: [RFC 0/9] Add an interVM memory sharing device, Igor Mammedov, 2020/02/07
- Re: [RFC 0/9] Add an interVM memory sharing device, Stefan Hajnoczi, 2020/02/07
- Re: [RFC 0/9] Add an interVM memory sharing device, Igor Kotrasiński, 2020/02/10
- Re: [RFC 0/9] Add an interVM memory sharing device, Stefan Hajnoczi, 2020/02/12