qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v6 14/15] qmp: Include "reserve" property of memory backends


From: David Hildenbrand
Subject: Re: [PATCH v6 14/15] qmp: Include "reserve" property of memory backends
Date: Fri, 23 Apr 2021 14:29:43 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1

On 23.04.21 14:13, Markus Armbruster wrote:
David Hildenbrand <david@redhat.com> writes:

On 23.04.21 13:21, Markus Armbruster wrote:
David Hildenbrand <david@redhat.com> writes:

On 23.04.21 13:00, Markus Armbruster wrote:
David Hildenbrand <david@redhat.com> writes:

Let's include the new property.

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Cc: Eric Blake <eblake@redhat.com>
Cc: Markus Armbruster <armbru@redhat.com>
Cc: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
---
    hw/core/machine-qmp-cmds.c | 1 +
    qapi/machine.json          | 4 ++++
    2 files changed, 5 insertions(+)

diff --git a/hw/core/machine-qmp-cmds.c b/hw/core/machine-qmp-cmds.c
index d41db5b93b..2d135ecdd0 100644
--- a/hw/core/machine-qmp-cmds.c
+++ b/hw/core/machine-qmp-cmds.c
@@ -175,6 +175,7 @@ static int query_memdev(Object *obj, void *opaque)
            m->dump = object_property_get_bool(obj, "dump", &error_abort);
            m->prealloc = object_property_get_bool(obj, "prealloc", 
&error_abort);
            m->share = object_property_get_bool(obj, "share", &error_abort);
+        m->reserve = object_property_get_bool(obj, "reserve", &error_abort);
            m->policy = object_property_get_enum(obj, "policy", "HostMemPolicy",
                                                 &error_abort);
            host_nodes = object_property_get_qobject(obj,
diff --git a/qapi/machine.json b/qapi/machine.json
index 32650bfe9e..5932139d20 100644
--- a/qapi/machine.json
+++ b/qapi/machine.json
@@ -798,6 +798,9 @@
    #
    # @share: whether memory is private to QEMU or shared (since 6.1)
    #
+# @reserve: whether swap space (or huge pages) was reserved if applicable
+#           (since 6.1)
+#
    # @host-nodes: host nodes for its memory policy
    #
    # @policy: memory policy of memory backend
@@ -812,6 +815,7 @@
        'dump':       'bool',
        'prealloc':   'bool',
        'share':      'bool',
+    'reserve':    'bool',
        'host-nodes': ['uint16'],
        'policy':     'HostMemPolicy' }}

Double-checking: true means definitely reserved, and false means
definitely not reserved.  Correct?

True means "reserved if applicable" which means "not reserved if not
applicable". False means "definitely not reserved".

(any recommendation how to rephrase are appreciated; I tried my best --
this interface here makes it especially hard -- it's easier for the
property itself)

When is it "applicable"?

When the OS supports it for the memory type and it hasn't been disabled.

Linux handling as described in
   [PATCH v6 09/15] util/mmap-alloc: Support RAM_NORESERVE via
   MAP_NORESERVE under Linux
and

   https://www.kernel.org/doc/Documentation/vm/overcommit-accounting

Summary *without* MAP_NORESERVE:

a) !Hugetlbfs with Memory overcommit disabled via
     ("/proc/sys/vm/overcommit_memory == 2"): never

b) !Hugetlbfs with Memory overcommit enabled
   1) Shared mappings on files: never

   2) Private mappings on files: only when writable (for us always)

   3) Shared anonymous memory: always

   4) Private anonymous memory: only when writable (for us always)

c) Hugetlbfs: Always


Under Windows: always. On other POSIX besides Linux -- don't know.

Would working some of this into the doc comment help users of the
interface?  Up to you.


I'll give it a thought. Most people will only care about explicitly disabling it, where we'll bail out if that doesn't work. Otherwise, they just use the OS default (== reserve if supported/applicable/not explicitly disabled).

Thanks!

--
Thanks,

David / dhildenb




reply via email to

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