All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jag Raman <jag.raman@oracle.com>
To: "\"Daniel P. Berrangé\"" <berrange@redhat.com>
Cc: Elena Ufimtseva <elena.ufimtseva@oracle.com>,
	fam@euphon.net, swapnil.ingle@nutanix.com,
	john.g.johnson@oracle.com, qemu-devel@nongnu.org,
	kraxel@redhat.com, quintela@redhat.com, mst@redhat.com,
	armbru@redhat.com, kanth.ghatraju@oracle.com, felipe@nutanix.com,
	thuth@redhat.com, ehabkost@redhat.com, konrad.wilk@oracle.com,
	dgilbert@redhat.com, liran.alon@oracle.com, stefanha@redhat.com,
	pbonzini@redhat.com, rth@twiddle.net, kwolf@redhat.com,
	mreitz@redhat.com, ross.lagerwall@citrix.com,
	marcandre.lureau@gmail.com, thanos.makatos@nutanix.com
Subject: Re: [PATCH RESEND v6 01/36] memory: alloc RAM from file at offset
Date: Tue, 12 May 2020 07:56:33 -0400	[thread overview]
Message-ID: <B4DB4B9E-E7E3-4F1F-917C-898F9B150EFB@oracle.com> (raw)
In-Reply-To: <20200512084855.GC1191162@redhat.com>



> On May 12, 2020, at 4:48 AM, Daniel P. Berrangé <berrange@redhat.com> wrote:
> 
> On Wed, Apr 22, 2020 at 09:13:36PM -0700, elena.ufimtseva@oracle.com wrote:
>> From: Jagannathan Raman <jag.raman@oracle.com>
>> 
>> Allow RAM MemoryRegion to be created from an offset in a file, instead
>> of allocating at offset of 0 by default. This is needed to synchronize
>> RAM between QEMU & remote process.
> 
> Can you elaborate on why remote processes require the RAM to be offset
> from zero ?

Hi Daniel,

As it turns out, the RAM is scattered across the physical address space
(system_memory) of QEMU. Therefore, the system memory is composed
of multiple sections of RAM, and some sections start at a non-zero RAM
offset.

As a result, the remote process needs the ability to map these RAM
sections into system_memory.

Thank you!
--
Jag

> 
> NB, I'm not objecting - I'm just curious to understand more.
> 
>> 
>> Signed-off-by: Jagannathan Raman <jag.raman@oracle.com>
>> Signed-off-by: John G Johnson <john.g.johnson@oracle.com>
>> Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com>
>> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
>> ---
>> exec.c                    | 11 +++++++----
>> include/exec/ram_addr.h   |  2 +-
>> include/qemu/mmap-alloc.h |  3 ++-
>> memory.c                  |  2 +-
>> util/mmap-alloc.c         |  7 ++++---
>> util/oslib-posix.c        |  2 +-
>> 6 files changed, 16 insertions(+), 11 deletions(-)
>> 
>> diff --git a/exec.c b/exec.c
>> index 2874bb5088..d0ac9545f4 100644
>> --- a/exec.c
>> +++ b/exec.c
>> @@ -1801,6 +1801,7 @@ static void *file_ram_alloc(RAMBlock *block,
>>                             ram_addr_t memory,
>>                             int fd,
>>                             bool truncate,
>> +                            off_t offset,
>>                             Error **errp)
>> {
>>     void *area;
>> @@ -1851,7 +1852,8 @@ static void *file_ram_alloc(RAMBlock *block,
>>     }
>> 
>>     area = qemu_ram_mmap(fd, memory, block->mr->align,
>> -                         block->flags & RAM_SHARED, block->flags & RAM_PMEM);
>> +                         block->flags & RAM_SHARED, block->flags & RAM_PMEM,
>> +                         offset);
>>     if (area == MAP_FAILED) {
>>         error_setg_errno(errp, errno,
>>                          "unable to map backing store for guest RAM");
>> @@ -2283,7 +2285,7 @@ static void ram_block_add(RAMBlock *new_block, Error **errp, bool shared)
>> #ifdef CONFIG_POSIX
>> RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, MemoryRegion *mr,
>>                                  uint32_t ram_flags, int fd,
>> -                                 Error **errp)
>> +                                 off_t offset, Error **errp)
>> {
>>     RAMBlock *new_block;
>>     Error *local_err = NULL;
>> @@ -2328,7 +2330,8 @@ RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, MemoryRegion *mr,
>>     new_block->used_length = size;
>>     new_block->max_length = size;
>>     new_block->flags = ram_flags;
>> -    new_block->host = file_ram_alloc(new_block, size, fd, !file_size, errp);
>> +    new_block->host = file_ram_alloc(new_block, size, fd, !file_size, offset,
>> +                                     errp);
>>     if (!new_block->host) {
>>         g_free(new_block);
>>         return NULL;
>> @@ -2358,7 +2361,7 @@ RAMBlock *qemu_ram_alloc_from_file(ram_addr_t size, MemoryRegion *mr,
>>         return NULL;
>>     }
>> 
>> -    block = qemu_ram_alloc_from_fd(size, mr, ram_flags, fd, errp);
>> +    block = qemu_ram_alloc_from_fd(size, mr, ram_flags, fd, 0, errp);
>>     if (!block) {
>>         if (created) {
>>             unlink(mem_path);
>> diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h
>> index 5e59a3d8d7..1b9f489ff0 100644
>> --- a/include/exec/ram_addr.h
>> +++ b/include/exec/ram_addr.h
>> @@ -121,7 +121,7 @@ RAMBlock *qemu_ram_alloc_from_file(ram_addr_t size, MemoryRegion *mr,
>>                                    Error **errp);
>> RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, MemoryRegion *mr,
>>                                  uint32_t ram_flags, int fd,
>> -                                 Error **errp);
>> +                                 off_t offset, Error **errp);
>> 
>> RAMBlock *qemu_ram_alloc_from_ptr(ram_addr_t size, void *host,
>>                                   MemoryRegion *mr, Error **errp);
>> diff --git a/include/qemu/mmap-alloc.h b/include/qemu/mmap-alloc.h
>> index e786266b92..4f579858bc 100644
>> --- a/include/qemu/mmap-alloc.h
>> +++ b/include/qemu/mmap-alloc.h
>> @@ -25,7 +25,8 @@ void *qemu_ram_mmap(int fd,
>>                     size_t size,
>>                     size_t align,
>>                     bool shared,
>> -                    bool is_pmem);
>> +                    bool is_pmem,
>> +                    off_t start);
>> 
>> void qemu_ram_munmap(int fd, void *ptr, size_t size);
>> 
>> diff --git a/memory.c b/memory.c
>> index 601b749906..f5fec476b7 100644
>> --- a/memory.c
>> +++ b/memory.c
>> @@ -1596,7 +1596,7 @@ void memory_region_init_ram_from_fd(MemoryRegion *mr,
>>     mr->destructor = memory_region_destructor_ram;
>>     mr->ram_block = qemu_ram_alloc_from_fd(size, mr,
>>                                            share ? RAM_SHARED : 0,
>> -                                           fd, &err);
>> +                                           fd, 0, &err);
>>     mr->dirty_log_mask = tcg_enabled() ? (1 << DIRTY_MEMORY_CODE) : 0;
>>     if (err) {
>>         mr->size = int128_zero();
>> diff --git a/util/mmap-alloc.c b/util/mmap-alloc.c
>> index 27dcccd8ec..a28f7025f0 100644
>> --- a/util/mmap-alloc.c
>> +++ b/util/mmap-alloc.c
>> @@ -86,7 +86,8 @@ void *qemu_ram_mmap(int fd,
>>                     size_t size,
>>                     size_t align,
>>                     bool shared,
>> -                    bool is_pmem)
>> +                    bool is_pmem,
>> +                    off_t start)
>> {
>>     int flags;
>>     int map_sync_flags = 0;
>> @@ -147,7 +148,7 @@ void *qemu_ram_mmap(int fd,
>>     offset = QEMU_ALIGN_UP((uintptr_t)guardptr, align) - (uintptr_t)guardptr;
>> 
>>     ptr = mmap(guardptr + offset, size, PROT_READ | PROT_WRITE,
>> -               flags | map_sync_flags, fd, 0);
>> +               flags | map_sync_flags, fd, start);
>> 
>>     if (ptr == MAP_FAILED && map_sync_flags) {
>>         if (errno == ENOTSUP) {
>> @@ -172,7 +173,7 @@ void *qemu_ram_mmap(int fd,
>>          * we will remove these flags to handle compatibility.
>>          */
>>         ptr = mmap(guardptr + offset, size, PROT_READ | PROT_WRITE,
>> -                   flags, fd, 0);
>> +                   flags, fd, start);
>>     }
>> 
>>     if (ptr == MAP_FAILED) {
>> diff --git a/util/oslib-posix.c b/util/oslib-posix.c
>> index 062236a1ab..4c6b9e90c6 100644
>> --- a/util/oslib-posix.c
>> +++ b/util/oslib-posix.c
>> @@ -209,7 +209,7 @@ void *qemu_memalign(size_t alignment, size_t size)
>> void *qemu_anon_ram_alloc(size_t size, uint64_t *alignment, bool shared)
>> {
>>     size_t align = QEMU_VMALLOC_ALIGN;
>> -    void *ptr = qemu_ram_mmap(-1, size, align, shared, false);
>> +    void *ptr = qemu_ram_mmap(-1, size, align, shared, false, 0);
>> 
>>     if (ptr == MAP_FAILED) {
>>         return NULL;
>> -- 
>> 2.25.GIT
>> 
> 
> Regards,
> Daniel
> -- 
> |: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
> |: https://libvirt.org         -o-            https://fstop138.berrange.com :|
> |: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|
> 
> 



  reply	other threads:[~2020-05-12 11:57 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-23  4:13 [PATCH RESEND v6 00/36] Initial support for multi-process qemu elena.ufimtseva
2020-04-23  4:13 ` [PATCH RESEND v6 01/36] memory: alloc RAM from file at offset elena.ufimtseva
2020-05-12  8:26   ` Stefan Hajnoczi
2020-05-12  8:48   ` Daniel P. Berrangé
2020-05-12 11:56     ` Jag Raman [this message]
2020-05-13  8:40       ` Stefan Hajnoczi
2020-05-13 15:25         ` Igor Mammedov
2020-05-13 20:08           ` Jag Raman
2020-05-14  9:47             ` Igor Mammedov
2020-05-14  9:51             ` Dr. David Alan Gilbert
2020-04-23  4:13 ` [PATCH RESEND v6 02/36] multi-process: Refactor machine_init and exit notifiers elena.ufimtseva
2020-04-23 14:13   ` Philippe Mathieu-Daudé
2020-04-23  4:13 ` [PATCH RESEND v6 03/36] command-line: refractor parser code elena.ufimtseva
2020-04-24 12:55   ` Stefan Hajnoczi
2020-04-23  4:13 ` [PATCH RESEND v6 04/36] multi-process: Refactor chardev functions out of vl.c elena.ufimtseva
2020-04-23  4:13 ` [PATCH RESEND v6 05/36] multi-process: Refactor monitor " elena.ufimtseva
2020-04-24 13:02   ` Stefan Hajnoczi
2020-04-23  4:13 ` [PATCH RESEND v6 06/36] monitor: destaticize HMP commands elena.ufimtseva
2020-04-23 14:14   ` Philippe Mathieu-Daudé
2020-04-23 15:07     ` Jag Raman
2020-04-23 15:58       ` Philippe Mathieu-Daudé
2020-04-23  4:13 ` [PATCH RESEND v6 07/36] multi-process: add a command line option for debug file elena.ufimtseva
2020-04-23  4:13 ` [PATCH RESEND v6 08/36] multi-process: Add stub functions to facilitate build of multi-process elena.ufimtseva
2020-04-24 13:12   ` Stefan Hajnoczi
2020-04-24 13:47     ` Jag Raman
2020-04-28 16:29       ` Stefan Hajnoczi
2020-04-28 18:58         ` Jag Raman
2020-04-29  9:41           ` Stefan Hajnoczi
2020-04-23  4:13 ` [PATCH RESEND v6 09/36] multi-process: Add config option for multi-process QEMU elena.ufimtseva
2020-04-24 13:47   ` Stefan Hajnoczi
2020-04-23  4:13 ` [PATCH RESEND v6 10/36] multi-process: build system for remote device process elena.ufimtseva
2020-04-24 15:04   ` Stefan Hajnoczi
2020-04-23  4:13 ` [PATCH RESEND v6 11/36] multi-process: define mpqemu-link object elena.ufimtseva
2020-05-12  8:56   ` Stefan Hajnoczi
2020-05-12 12:09     ` Jag Raman
2020-04-23  4:13 ` [PATCH RESEND v6 12/36] multi-process: add functions to synchronize proxy and remote endpoints elena.ufimtseva
2020-05-12 10:21   ` Stefan Hajnoczi
2020-05-12 12:28     ` Jag Raman
2020-05-13  8:43       ` Stefan Hajnoczi
2020-04-23  4:13 ` [PATCH RESEND v6 13/36] multi-process: setup PCI host bridge for remote device elena.ufimtseva
2020-05-12 10:31   ` Stefan Hajnoczi
2020-04-23  4:13 ` [PATCH RESEND v6 14/36] multi-process: setup a machine object for remote device process elena.ufimtseva
2020-05-12 10:43   ` Stefan Hajnoczi
2020-05-12 12:12     ` Jag Raman
2020-04-23  4:13 ` [PATCH RESEND v6 15/36] multi-process: setup memory manager for remote device elena.ufimtseva
2020-05-12 12:11   ` Stefan Hajnoczi
2020-04-23  4:13 ` [PATCH RESEND v6 16/36] multi-process: remote process initialization elena.ufimtseva
2020-04-23  4:13 ` [PATCH RESEND v6 17/36] multi-process: introduce proxy object elena.ufimtseva
2020-05-12 12:23   ` Stefan Hajnoczi
2020-05-12 12:35     ` Jag Raman
2020-04-23  4:13 ` [PATCH RESEND v6 18/36] multi-process: Initialize Proxy Object's communication channel elena.ufimtseva
2020-05-12 12:35   ` Stefan Hajnoczi
2020-04-23  4:13 ` [PATCH RESEND v6 19/36] multi-process: Connect Proxy Object with device in the remote process elena.ufimtseva
2020-05-12 12:54   ` Stefan Hajnoczi
2020-04-23  4:13 ` [PATCH RESEND v6 20/36] multi-process: Forward PCI config space acceses to " elena.ufimtseva
2020-05-12 13:50   ` Stefan Hajnoczi
2020-04-23  4:13 ` [PATCH RESEND v6 21/36] multi-process: PCI BAR read/write handling for proxy & remote endpoints elena.ufimtseva
2020-05-12 14:19   ` Stefan Hajnoczi
2020-04-23  4:13 ` [PATCH RESEND v6 22/36] multi-process: Synchronize remote memory elena.ufimtseva
2020-05-12 15:07   ` Stefan Hajnoczi
2020-05-12 15:49     ` Dr. David Alan Gilbert
2020-04-23  4:13 ` [PATCH RESEND v6 23/36] multi-process: create IOHUB object to handle irq elena.ufimtseva
2020-05-12 15:57   ` Stefan Hajnoczi
2020-05-12 16:12   ` Stefan Hajnoczi
2020-04-23  4:13 ` [PATCH RESEND v6 24/36] multi-process: Retrieve PCI info from remote process elena.ufimtseva
2020-05-12 16:07   ` Stefan Hajnoczi
2020-04-23  4:14 ` [PATCH RESEND v6 25/36] multi-process: Introduce build flags to separate remote process code elena.ufimtseva
2020-04-23  4:14 ` [PATCH RESEND v6 26/36] multi-process: add parse_cmdline in remote process elena.ufimtseva
2020-04-23  4:14 ` [PATCH RESEND v6 27/36] multi-process: add support to parse device option elena.ufimtseva
2020-04-23  4:14 ` [PATCH RESEND v6 28/36] multi-process: send heartbeat messages to remote elena.ufimtseva
2020-04-23  4:14 ` [PATCH RESEND v6 29/36] multi-process: handle heartbeat messages in remote process elena.ufimtseva
2020-04-23  4:14 ` [PATCH RESEND v6 30/36] multi-process: perform device reset in the " elena.ufimtseva
2020-04-23  4:14 ` [PATCH RESEND v6 31/36] multi-process/mon: choose HMP commands based on target elena.ufimtseva
2020-04-23  4:14 ` [PATCH RESEND v6 32/36] multi-process/mon: stub functions to enable QMP module for remote process elena.ufimtseva
2020-04-23  4:14 ` [PATCH RESEND v6 33/36] multi-process/mon: enable QMP module support in the " elena.ufimtseva
2020-04-23  4:14 ` [PATCH RESEND v6 34/36] multi-process/mon: Initialize QMP module for remote processes elena.ufimtseva
2020-04-23  4:14 ` [PATCH RESEND v6 35/36] multi-process: add the concept description to docs/devel/qemu-multiprocess elena.ufimtseva
2020-04-23  4:14 ` [PATCH RESEND v6 36/36] multi-process: add configure and usage information elena.ufimtseva
2020-04-23 13:54   ` 罗勇刚(Yonggang Luo)
2020-04-23 15:01     ` Jag Raman
2020-04-23 22:56       ` 罗勇刚(Yonggang Luo)
2020-04-24  0:34       ` 罗勇刚(Yonggang Luo)
2020-04-24 12:48 ` [PATCH RESEND v6 00/36] Initial support for multi-process qemu Stefan Hajnoczi
2020-04-24 12:53   ` Daniel P. Berrangé
2020-04-24 12:53   ` Eric Blake
2020-04-24 13:42     ` Max Reitz
2020-04-28 17:29 ` Stefan Hajnoczi
2020-04-28 17:47   ` Michael S. Tsirkin
2020-04-29  9:30     ` Stefan Hajnoczi
2020-04-29  9:59       ` Michael S. Tsirkin
2020-05-11 14:40 ` Stefan Hajnoczi
2020-05-11 19:30   ` Jag Raman
2020-05-12 16:13     ` Stefan Hajnoczi
2020-05-12 16:55       ` Jag Raman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=B4DB4B9E-E7E3-4F1F-917C-898F9B150EFB@oracle.com \
    --to=jag.raman@oracle.com \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=elena.ufimtseva@oracle.com \
    --cc=fam@euphon.net \
    --cc=felipe@nutanix.com \
    --cc=john.g.johnson@oracle.com \
    --cc=kanth.ghatraju@oracle.com \
    --cc=konrad.wilk@oracle.com \
    --cc=kraxel@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=liran.alon@oracle.com \
    --cc=marcandre.lureau@gmail.com \
    --cc=mreitz@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    --cc=ross.lagerwall@citrix.com \
    --cc=rth@twiddle.net \
    --cc=stefanha@redhat.com \
    --cc=swapnil.ingle@nutanix.com \
    --cc=thanos.makatos@nutanix.com \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.