qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: Eric Blake <eblake@redhat.com>
Cc: lvivier@redhat.com, thuth@redhat.com, pkrempa@redhat.com,
	berrange@redhat.com, ehabkost@redhat.com, qemu-block@nongnu.org,
	libvir-list@redhat.com, armbru@redhat.com, jasowang@redhat.com,
	qemu-devel@nongnu.org, mreitz@redhat.com, kraxel@redhat.com,
	pbonzini@redhat.com, dgilbert@redhat.com
Subject: Re: [PATCH v2 07/31] qapi/qom: Add ObjectOptions for memory-backend-*
Date: Tue, 2 Mar 2021 19:11:27 +0100	[thread overview]
Message-ID: <20210302181127.GE5527@merkur.fritz.box> (raw)
In-Reply-To: <cbb010a0-0d41-7a21-0130-d56d18942b5e@redhat.com>

Am 26.02.2021 um 17:23 hat Eric Blake geschrieben:
> On 2/24/21 7:52 AM, Kevin Wolf wrote:
> > This adds a QAPI schema for the properties of the memory-backend-*
> > objects.
> > 
> > HostMemPolicy has to be moved to an include file that can be used by the
> > storage daemon, too, because ObjectOptions must be the same in all
> > binaries if we don't want to compile the whole code multiple times.
> > 
> > Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> > ---
> >  qapi/common.json  |  20 ++++++++
> >  qapi/machine.json |  22 +--------
> >  qapi/qom.json     | 118 +++++++++++++++++++++++++++++++++++++++++++++-
> >  3 files changed, 138 insertions(+), 22 deletions(-)
> > 
> 
> > +++ b/qapi/qom.json
> 
> > +##
> > +# @MemoryBackendProperties:
> > +#
> > +# Properties for objects of classes derived from memory-backend.
> > +#
> > +# @merge: if true, mark the memory as mergeable (default depends on the machine
> > +#         type)
> > +#
> > +# @dump: if true, include the memory in core dumps (default depends on the
> > +#        machine type)
> 
> Interesting choice to flip the description text from its previous
> wording, but fine by me:
>     object_class_property_set_description(oc, "dump",
>         "Set to 'off' to exclude from core dump");

I feel that for booleans, describing what happens if they are false
often turns out a bit confusing with double negatives etc. But if you
think that in some cases, describing the negative is actually better,
I'm open for that.

> > +#
> > +# @host-nodes: the list of NUMA host nodes to bind the memory to
> > +#
> > +# @policy: the NUMA policy (default: 'default')
> > +#
> > +# @prealloc: if true, preallocate memory (default: false)
> 
> Not quite in the same order as
> backends/hostmem.c:host_memory_backend_class_init() (alphabetic here
> instead of matching the C code declaration order), but that doesn't
> impact QMP semantics, and I was able to match everything up in the end.
> 
> > +#
> > +# @prealloc-threads: number of CPU threads to use for prealloc (default: 1)
> > +#
> > +# @share: if false, the memory is private to QEMU; if true, it is shared
> > +#         (default: false)
> > +#
> > +# @size: size of the memory region in bytes
> > +#
> > +# @x-use-canonical-path-for-ramblock-id: if true, the canoncial path is used
> > +#                                        for ramblock-id. Disable this for 4.0
> > +#                                        machine types or older to allow
> > +#                                        migration with newer QEMU versions.
> > +#                                        (default: false generally, but true
> > +#                                        for machine types <= 4.0)
> 
> The comment in the C code mentions that in spite of the x- prefix, we
> have to treat this as a stable interface until 4.0 machines disappear.
> Do we need any of that sentiment in the documentation here?

"This option is considered stable despite the x- prefix."

Does this work or should I be more verbose? (The indentation makes me
want to keep it terse... :-))

> > +#
> > +# Since: 2.1
> > +##
> > +{ 'struct': 'MemoryBackendProperties',
> > +  'data': { '*dump': 'bool',
> > +            '*host-nodes': ['uint16'],
> > +            '*merge': 'bool',
> > +            '*policy': 'HostMemPolicy',
> > +            '*prealloc': 'bool',
> > +            '*prealloc-threads': 'uint32',
> > +            '*share': 'bool',
> > +            'size': 'size',
> > +            '*x-use-canonical-path-for-ramblock-id': 'bool' } }
> > +
> > +##
> > +# @MemoryBackendFileProperties:
> > +#
> > +# Properties for memory-backend-file objects.
> > +#
> > +# @align: the base address alignment when QEMU mmap(2) @mem-path. Some
> > +#         backend store specified by @mem-path requires an alignment different
> 
> Grammar feels off.  Would it read better as
> 
> ...when QEMU mmap(2)s @mem-path.  Some backend stores specified by
> @mem-path require an...

This description is stolen from qemu-options.hx (I actually tried to
copy existing documentation whenever it seemed to explain things well),
but that's no reason not to improve it.

> > +#         than the default one used by QEMU, e.g. the device DAX /dev/dax0.0
> > +#         requires 2M alignment rather than 4K. In such cases, users can
> > +#         specify the required alignment via this option.
> > +#         0 selects a default alignment (currently the page size). (default: 0)
> 
> Again, not in the same order as
> backends/hostmem-file.c:file_backend_class_init(), but it matches up.
> 
> > +#
> > +# @discard-data: if true, the file contents can be destroyed when QEMU exits,
> > +#                to avoid unnecessarily flushing data to the backing file. Note
> > +#                that ``discard-data`` is only an optimization, and QEMU might
> > +#                not discard file contents if it aborts unexpectedly or is
> > +#                terminated using SIGKILL. (default: false)
> > +#
> > +# @mem-path: the path to either a shared memory or huge page filesystem mount
> > +#
> > +# @pmem: specifies whether the backing file specified by @mem-path is in
> > +#        host persistent memory that can be accessed using the SNIA NVM
> > +#        programming model (e.g. Intel NVDIMM).
> > +#
> > +# @readonly: if true, the backing file is opened read-only; if false, it is
> > +#            opened read-write. (default: false)
> > +#
> > +# Since: 2.1
> > +##
> > +{ 'struct': 'MemoryBackendFileProperties',
> > +  'base': 'MemoryBackendProperties',
> > +  'data': { '*align': 'size',
> > +            '*discard-data': 'bool',
> > +            'mem-path': 'str',
> > +            '*pmem': 'bool',
> 
> To match the C code, this should be
>  '*pmem': { 'type':'bool', 'if':'defined(CONFIG_LIBPMEM)' },

Good catch, will fix.

> > +            '*readonly': 'bool' } }
> > +
> > +##
> > +# @MemoryBackendMemfdProperties:
> > +#
> > +# Properties for memory-backend-memfd objects.
> > +#
> > +# The @share boolean option is true by default with memfd.
> > +#
> > +# @hugetlb: if true, the file to be created resides in the hugetlbfs filesystem
> > +#           (default: false)
> > +#
> > +# @hugetlbsize: the hugetlb page size on systems that support multiple hugetlb
> > +#               page sizes (it must be a power of 2 value supported by the
> > +#               system). 0 selects a default page size. This option is ignored
> > +#               if @hugetlb is false. (default: 0)
> > +#
> > +# @seal: if true, create a sealed-file, which will block further resizing of
> > +#        the memory (default: true)
> > +#
> > +# Since: 2.12
> > +##
> > +{ 'struct': 'MemoryBackendMemfdProperties',
> > +  'base': 'MemoryBackendProperties',
> > +  'data': { '*hugetlb': 'bool',
> > +            '*hugetlbsize': 'size',
> > +            '*seal': 'bool' } }
> 
> backends/hostmem-memfd.c makes 'hugetlb' and 'hugetlbsize' conditional
> on qemu_memfd_check(MFD_HUGETLB), and only registers the overal type
> based on qemu_memfd_check(MFD_ALLOW_SEALING).  In turn, qemu_memfd_check
> returns false except for CONFIG_LINUX,...
> 
> > +
> >  ##
> >  # @ObjectType:
> >  #
> > @@ -287,7 +395,10 @@
> >      'cryptodev-backend-builtin',
> >      'cryptodev-vhost-user',
> >      'dbus-vmstate',
> > -    'iothread'
> > +    'iothread',
> > +    'memory-backend-file',
> > +    'memory-backend-memfd',
> > +    'memory-backend-ram'
> >    ] }
> >  
> >  ##
> > @@ -314,7 +425,10 @@
> >        'cryptodev-backend-builtin':  'CryptodevBackendProperties',
> >        'cryptodev-vhost-user':       'CryptodevVhostUserProperties',
> >        'dbus-vmstate':               'DBusVMStateProperties',
> > -      'iothread':                   'IothreadProperties'
> > +      'iothread':                   'IothreadProperties',
> > +      'memory-backend-file':        'MemoryBackendFileProperties',
> > +      'memory-backend-memfd':       'MemoryBackendMemfdProperties',
> 
> ...so I'm wondering if this branch should be:
> 
> 'memory-backend-memfd', { 'type':'MemoryBackendMemfdProperties',
>   'if': 'defined(CONFIG_LINUX)' },
> 
> and whether we are risking problems by always having the 'hugetlb*'
> fields even when the runtime does not register them.

I don't think that's necessarily a problem.

Later in the series we'll have some more object types in here that don't
actually work: Some of them are target dependent, but the code generated
from the schema is compiled only once. So if you configured multiple
targets, you'll get all of them in the schema for all system emulators,
even those that emulate a different target.

I'm hesitant to change this one because it feels a bit indirect. It
would be a much clearer case if we only compiled the source file for
CONFIG_LINUX instead of deciding at runtime.

*checks meson.build*

Wait, scratch that... We already do that in addition, so you can get
your 'if'. :-)

And while I'm at it, cryptodev-vhost-user is conditional on
CONFIG_VIRTIO_CRYPTO and CONFIG_VHOST_CRYPTO. The QAPI schema language
doesn't have a way to split strings across multiple lines? Because I'll
need more than 80 characters for this line then...

Kevin



  reply	other threads:[~2021-03-02 19:01 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-24 13:52 [PATCH v2 00/31] qapi/qom: QAPIfy --object and object-add Kevin Wolf
2021-02-24 13:52 ` [PATCH v2 01/31] tests: Drop 'props' from object-add calls Kevin Wolf
2021-02-25 22:40   ` Eric Blake
2021-02-24 13:52 ` [PATCH v2 02/31] qapi/qom: Drop deprecated 'props' from object-add Kevin Wolf
2021-02-25 22:42   ` Eric Blake
2021-02-24 13:52 ` [PATCH v2 03/31] qapi/qom: Add ObjectOptions for iothread Kevin Wolf
2021-02-25 22:55   ` Eric Blake
2021-03-02 17:27     ` Kevin Wolf
2021-02-24 13:52 ` [PATCH v2 04/31] qapi/qom: Add ObjectOptions for authz-* Kevin Wolf
2021-02-26 14:02   ` Eric Blake
2021-02-24 13:52 ` [PATCH v2 05/31] qapi/qom: Add ObjectOptions for cryptodev-* Kevin Wolf
2021-02-26 14:36   ` Eric Blake
2021-02-24 13:52 ` [PATCH v2 06/31] qapi/qom: Add ObjectOptions for dbus-vmstate Kevin Wolf
2021-02-26 15:58   ` Eric Blake
2021-03-02 17:36     ` Kevin Wolf
2021-02-24 13:52 ` [PATCH v2 07/31] qapi/qom: Add ObjectOptions for memory-backend-* Kevin Wolf
2021-02-26 16:23   ` Eric Blake
2021-03-02 18:11     ` Kevin Wolf [this message]
2021-02-24 13:52 ` [PATCH v2 08/31] qapi/qom: Add ObjectOptions for rng-*, deprecate 'opened' Kevin Wolf
2021-02-26 16:54   ` Eric Blake
2021-02-24 13:52 ` [PATCH v2 09/31] qapi/qom: Add ObjectOptions for throttle-group Kevin Wolf
2021-02-26 17:26   ` Eric Blake
2021-03-02 18:18     ` Kevin Wolf
2021-02-24 13:52 ` [PATCH v2 10/31] qapi/qom: Add ObjectOptions for secret*, deprecate 'loaded' Kevin Wolf
2021-02-26 19:17   ` Eric Blake
2021-03-02 18:23     ` Kevin Wolf
2021-02-24 13:52 ` [PATCH v2 11/31] qapi/qom: Add ObjectOptions for tls-*, " Kevin Wolf
2021-02-26 19:33   ` Eric Blake
2021-03-02 18:27     ` Kevin Wolf
2021-02-24 13:52 ` [PATCH v2 12/31] qapi/qom: Add ObjectOptions for can-* Kevin Wolf
2021-02-26 19:42   ` Eric Blake
2021-03-02 18:32     ` Kevin Wolf
2021-03-02 20:03       ` Eric Blake
2021-02-24 13:52 ` [PATCH v2 13/31] qapi/qom: Add ObjectOptions for colo-compare Kevin Wolf
2021-02-26 19:46   ` Eric Blake
2021-02-24 13:52 ` [PATCH v2 14/31] qapi/qom: Add ObjectOptions for filter-* Kevin Wolf
2021-02-26 20:03   ` Eric Blake
2021-02-24 13:52 ` [PATCH v2 15/31] qapi/qom: Add ObjectOptions for pr-manager-helper Kevin Wolf
2021-02-26 20:04   ` Eric Blake
2021-02-24 13:52 ` [PATCH v2 16/31] qapi/qom: Add ObjectOptions for confidential-guest-support Kevin Wolf
2021-02-24 15:21   ` Dr. David Alan Gilbert
2021-02-24 16:25     ` Kevin Wolf
2021-02-26 20:27   ` Eric Blake
2021-02-24 13:52 ` [PATCH v2 17/31] qapi/qom: Add ObjectOptions for input-* Kevin Wolf
2021-02-26 20:55   ` Eric Blake
2021-03-02 18:42     ` Kevin Wolf
2021-02-24 13:52 ` [PATCH v2 18/31] qapi/qom: Add ObjectOptions for x-remote-object Kevin Wolf
2021-02-26 21:01   ` Eric Blake
2021-02-24 13:52 ` [PATCH v2 19/31] qapi/qom: QAPIfy object-add Kevin Wolf
2021-02-26 11:30   ` Paolo Bonzini
2021-03-01 11:54     ` Kevin Wolf
2021-03-01 12:03       ` Paolo Bonzini
2021-02-26 21:18   ` Eric Blake
2021-03-02 18:54     ` Kevin Wolf
2021-02-24 13:52 ` [PATCH v2 20/31] qom: Make "object" QemuOptsList optional Kevin Wolf
2021-02-26 21:20   ` Eric Blake
2021-02-24 13:52 ` [PATCH v2 21/31] qemu-storage-daemon: Implement --object with qmp_object_add() Kevin Wolf
2021-02-26 21:22   ` Eric Blake
2021-02-24 13:52 ` [PATCH v2 22/31] qom: Remove user_creatable_add_dict() Kevin Wolf
2021-02-26 21:23   ` Eric Blake
2021-02-24 13:52 ` [PATCH v2 23/31] qom: Factor out user_creatable_process_cmdline() Kevin Wolf
2021-02-26 21:26   ` Eric Blake
2021-02-24 13:52 ` [PATCH v2 24/31] qemu-io: Use user_creatable_process_cmdline() for --object Kevin Wolf
2021-02-26 21:27   ` Eric Blake
2021-02-24 13:52 ` [PATCH v2 25/31] qemu-img: " Kevin Wolf
2021-02-26 21:56   ` Eric Blake
2021-02-26 22:17     ` Eric Blake
2021-02-24 13:52 ` [PATCH v2 26/31] qemu-nbd: " Kevin Wolf
2021-02-26 22:18   ` Eric Blake
2021-02-24 13:52 ` [PATCH v2 27/31] qom: Add user_creatable_add_from_str() Kevin Wolf
2021-02-26 22:21   ` Eric Blake
2021-03-02 19:39     ` Kevin Wolf
2021-02-24 13:52 ` [PATCH v2 28/31] hmp: QAPIfy object_add Kevin Wolf
2021-02-24 15:31   ` Dr. David Alan Gilbert
2021-02-26 22:23   ` Eric Blake
2021-02-24 13:52 ` [PATCH v2 29/31] qom: Add user_creatable_parse_str() Kevin Wolf
2021-02-26 22:24   ` Eric Blake
2021-02-24 13:52 ` [PATCH v2 30/31] vl: QAPIfy -object Kevin Wolf
2021-02-26 22:40   ` Eric Blake
2021-02-24 13:52 ` [PATCH v2 31/31] qom: Drop QemuOpts based interfaces Kevin Wolf
2021-02-26 22:42   ` Eric Blake
2021-02-24 16:01 ` [PATCH v2 00/31] qapi/qom: QAPIfy --object and object-add Peter Krempa

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=20210302181127.GE5527@merkur.fritz.box \
    --to=kwolf@redhat.com \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=eblake@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=jasowang@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=libvir-list@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=pkrempa@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --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 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).