From: Markus Armbruster <armbru@redhat.com>
To: David Hildenbrand <david@redhat.com>
Cc: "Marcel Apfelbaum" <mapfelba@redhat.com>,
"Eduardo Habkost" <ehabkost@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
qemu-devel@nongnu.org, "Peter Xu" <peterx@redhat.com>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
"Greg Kurz" <groug@kaod.org>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Murilo Opsfelder Araujo" <muriloo@linux.ibm.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Philippe Mathieu-Daudé" <philmd@redhat.com>,
"Igor Mammedov" <imammedo@redhat.com>
Subject: Re: [PATCH v6 10/15] hostmem: Wire up RAM_NORESERVE via "reserve" property
Date: Fri, 23 Apr 2021 14:11:56 +0200 [thread overview]
Message-ID: <874kfxgpyr.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <8848ab6a-b435-3f95-1742-6593dff72351@redhat.com> (David Hildenbrand's message of "Fri, 23 Apr 2021 13:16:37 +0200")
David Hildenbrand <david@redhat.com> writes:
> On 23.04.21 13:14, Markus Armbruster wrote:
>> David Hildenbrand <david@redhat.com> writes:
>>
>>> Let's provide a way to control the use of RAM_NORESERVE via memory
>>> backends using the "reserve" property which defaults to true (old
>>> behavior).
>>>
>>> Only Linux currently supports clearing the flag (and support is checked at
>>> runtime, depending on the setting of "/proc/sys/vm/overcommit_memory").
>>> Windows and other POSIX systems will bail out with "reserve=false".
>>>
>>> The target use case is virtio-mem, which dynamically exposes memory
>>> inside a large, sparse memory area to the VM. This essentially allows
>>> avoiding to set "/proc/sys/vm/overcommit_memory == 0") when using
>>> virtio-mem and also supporting hugetlbfs in the future.
>>>
>>> Reviewed-by: Peter Xu <peterx@redhat.com>
>>> Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
>>> Cc: Markus Armbruster <armbru@redhat.com>
>>> Cc: Eric Blake <eblake@redhat.com>
>>> Cc: Igor Mammedov <imammedo@redhat.com>
>>> Signed-off-by: David Hildenbrand <david@redhat.com>
>>> ---
>>> backends/hostmem-file.c | 11 ++++++-----
>>> backends/hostmem-memfd.c | 1 +
>>> backends/hostmem-ram.c | 1 +
>>> backends/hostmem.c | 32 ++++++++++++++++++++++++++++++++
>>> include/sysemu/hostmem.h | 2 +-
>>> qapi/qom.json | 4 ++++
>>> 6 files changed, 45 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/backends/hostmem-file.c b/backends/hostmem-file.c
>>> index b683da9daf..9d550e53d4 100644
>>> --- a/backends/hostmem-file.c
>>> +++ b/backends/hostmem-file.c
>>> @@ -40,6 +40,7 @@ file_backend_memory_alloc(HostMemoryBackend *backend, Error **errp)
>>> object_get_typename(OBJECT(backend)));
>>> #else
>>> HostMemoryBackendFile *fb = MEMORY_BACKEND_FILE(backend);
>>> + uint32_t ram_flags;
>>> gchar *name;
>>> if (!backend->size) {
>>> @@ -52,11 +53,11 @@ file_backend_memory_alloc(HostMemoryBackend *backend, Error **errp)
>>> }
>>> name = host_memory_backend_get_name(backend);
>>> - memory_region_init_ram_from_file(&backend->mr, OBJECT(backend),
>>> - name,
>>> - backend->size, fb->align,
>>> - (backend->share ? RAM_SHARED : 0) |
>>> - (fb->is_pmem ? RAM_PMEM : 0),
>>> + ram_flags = backend->share ? RAM_SHARED : 0;
>>> + ram_flags |= backend->reserve ? 0 : RAM_NORESERVE;
>>> + ram_flags |= fb->is_pmem ? RAM_PMEM : 0;
>>> + memory_region_init_ram_from_file(&backend->mr, OBJECT(backend), name,
>>> + backend->size, fb->align, ram_flags,
>>> fb->mem_path, fb->readonly, errp);
>>> g_free(name);
>>> #endif
>>> diff --git a/backends/hostmem-memfd.c b/backends/hostmem-memfd.c
>>> index 93b5d1a4cf..f3436b623d 100644
>>> --- a/backends/hostmem-memfd.c
>>> +++ b/backends/hostmem-memfd.c
>>> @@ -55,6 +55,7 @@ memfd_backend_memory_alloc(HostMemoryBackend *backend, Error **errp)
>>> name = host_memory_backend_get_name(backend);
>>> ram_flags = backend->share ? RAM_SHARED : 0;
>>> + ram_flags |= backend->reserve ? 0 : RAM_NORESERVE;
>>> memory_region_init_ram_from_fd(&backend->mr, OBJECT(backend), name,
>>> backend->size, ram_flags, fd, 0, errp);
>>> g_free(name);
>>> diff --git a/backends/hostmem-ram.c b/backends/hostmem-ram.c
>>> index 741e701062..b8e55cdbd0 100644
>>> --- a/backends/hostmem-ram.c
>>> +++ b/backends/hostmem-ram.c
>>> @@ -29,6 +29,7 @@ ram_backend_memory_alloc(HostMemoryBackend *backend, Error **errp)
>>> name = host_memory_backend_get_name(backend);
>>> ram_flags = backend->share ? RAM_SHARED : 0;
>>> + ram_flags |= backend->reserve ? 0 : RAM_NORESERVE;
>>> memory_region_init_ram_flags_nomigrate(&backend->mr, OBJECT(backend), name,
>>> backend->size, ram_flags, errp);
>>> g_free(name);
>>
>> As the commit message says, @reserve translates to RAM_NORESERVE.
>> Good.
>> I figure passing RAM_NORESERVE can't make these functions fail.
>> Correct?
>> @reserve defaults to true. The commit message assures us this gives
>> us
>> the old behavior. Good. But the patch *adds* flag RAM_NORESERVE when
>> it is true. Now I'm confused.
>
> ram_flags |= backend->reserve ? 0 : RAM_NORESERVE;
>
> translates to
>
> if (!backend->reserve)
> ram_flags |= RAM_NORESERVE;
You're right! /me uncrosses eyes...
> I thought for a while if calling the property "noreserve" would be
> cleaner, but decided against it.
I dislike "negative" flag names, too.
next prev parent reply other threads:[~2021-04-23 12:13 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-21 12:26 [PATCH v6 00/15] RAM_NORESERVE, MAP_NORESERVE and hostmem "reserve" property David Hildenbrand
2021-04-21 12:26 ` [PATCH v6 01/15] util/mmap-alloc: Factor out calculation of the pagesize for the guard page David Hildenbrand
2021-04-21 12:26 ` [PATCH v6 02/15] util/mmap-alloc: Factor out reserving of a memory region to mmap_reserve() David Hildenbrand
2021-04-21 12:26 ` [PATCH v6 03/15] util/mmap-alloc: Factor out activating of memory to mmap_activate() David Hildenbrand
2021-04-21 12:26 ` [PATCH v6 04/15] softmmu/memory: Pass ram_flags to qemu_ram_alloc_from_fd() David Hildenbrand
2021-04-21 12:26 ` [PATCH v6 05/15] softmmu/memory: Pass ram_flags to memory_region_init_ram_shared_nomigrate() David Hildenbrand
2021-04-21 12:33 ` Philippe Mathieu-Daudé
2021-04-21 12:26 ` [PATCH v6 06/15] softmmu/memory: Pass ram_flags to qemu_ram_alloc() and qemu_ram_alloc_internal() David Hildenbrand
2021-04-21 12:34 ` Philippe Mathieu-Daudé
2021-04-21 12:26 ` [PATCH v6 07/15] util/mmap-alloc: Pass flags instead of separate bools to qemu_ram_mmap() David Hildenbrand
2021-04-21 12:37 ` Philippe Mathieu-Daudé
2021-04-21 12:26 ` [PATCH v6 08/15] memory: Introduce RAM_NORESERVE and wire it up in qemu_ram_mmap() David Hildenbrand
2021-04-21 12:26 ` [PATCH v6 09/15] util/mmap-alloc: Support RAM_NORESERVE via MAP_NORESERVE under Linux David Hildenbrand
2021-04-21 12:26 ` [PATCH v6 10/15] hostmem: Wire up RAM_NORESERVE via "reserve" property David Hildenbrand
2021-04-23 11:14 ` Markus Armbruster
2021-04-23 11:16 ` David Hildenbrand
2021-04-23 12:11 ` Markus Armbruster [this message]
2021-04-23 11:18 ` David Hildenbrand
2021-04-23 12:10 ` Markus Armbruster
2021-04-23 14:21 ` David Hildenbrand
2021-04-23 14:53 ` Markus Armbruster
2021-04-21 12:26 ` [PATCH v6 11/15] qmp: Clarify memory backend properties returned via query-memdev David Hildenbrand
2021-04-21 21:00 ` Eduardo Habkost
2021-04-23 10:55 ` Markus Armbruster
2021-04-21 12:26 ` [PATCH v6 12/15] qmp: Include "share" property of memory backends David Hildenbrand
2021-04-21 21:01 ` Eduardo Habkost
2021-04-23 11:15 ` Markus Armbruster
2021-04-21 12:26 ` [PATCH v6 13/15] hmp: Print "share" property of memory backends with "info memdev" David Hildenbrand
2021-04-21 21:04 ` Eduardo Habkost
2021-04-23 11:15 ` Markus Armbruster
2021-04-21 12:26 ` [PATCH v6 14/15] qmp: Include "reserve" property of memory backends David Hildenbrand
2021-04-21 21:05 ` Eduardo Habkost
2021-04-23 11:00 ` Markus Armbruster
2021-04-23 11:03 ` David Hildenbrand
2021-04-23 11:21 ` Markus Armbruster
2021-04-23 11:33 ` David Hildenbrand
2021-04-23 12:13 ` Markus Armbruster
2021-04-23 12:29 ` David Hildenbrand
2021-04-23 14:13 ` David Hildenbrand
2021-04-23 14:55 ` Markus Armbruster
2021-04-23 15:04 ` David Hildenbrand
2021-04-21 12:26 ` [PATCH v6 15/15] hmp: Print "reserve" property of memory backends with "info memdev" David Hildenbrand
2021-04-21 21:05 ` Eduardo Habkost
2021-04-23 11:16 ` Markus Armbruster
2021-04-21 21:06 ` [PATCH v6 00/15] RAM_NORESERVE, MAP_NORESERVE and hostmem "reserve" property Eduardo Habkost
2021-04-23 10:35 ` David Hildenbrand
2021-04-28 16:35 ` Eduardo Habkost
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=874kfxgpyr.fsf@dusky.pond.sub.org \
--to=armbru@redhat.com \
--cc=david@redhat.com \
--cc=dgilbert@redhat.com \
--cc=ehabkost@redhat.com \
--cc=groug@kaod.org \
--cc=imammedo@redhat.com \
--cc=mapfelba@redhat.com \
--cc=mst@redhat.com \
--cc=muriloo@linux.ibm.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=philmd@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=stefanha@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).