[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 9/9] hostmem-file: support POSIX shm_open()
From: |
Markus Armbruster |
Subject: |
Re: [PATCH 9/9] hostmem-file: support POSIX shm_open() |
Date: |
Wed, 28 Feb 2024 13:32:17 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
Stefano Garzarella <sgarzare@redhat.com> writes:
> Add a new `shm` bool option for `-object memory-backend-file`.
>
> When this option is set to true, the POSIX shm_open(3) is used instead
> of open(2).
>
> So a file will not be created in the filesystem, but a "POSIX shared
> memory object" will be instantiated. In Linux this turns into a file
> in /dev/shm, but in other OSes this may not happen (for example in
> macOS or FreeBSD nothing is shown in any filesystem).
>
> This new feature is useful when we need to share guest memory with
> another process (e.g. vhost-user backend), but we don't have
> memfd_create() or any special filesystems (e.g. /dev/shm) available
> as in macOS.
>
> Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
> ---
> I am not sure this is the best way to support shm_open() in QEMU.
>
> Other solutions I had in mind were:
>
> - create a new memory-backend-shm
How would that look like? Would it involve duplicating code?
> - extend memory-backend-memfd to use shm_open() on systems where memfd is
> not available (problem: shm_open wants a name to assign to the object, but
> we can do a workaround by using a random name and do the unlink right away)
Hmm. Too much magic? I don't know...
> Any preference/suggestion?
[...]
> diff --git a/qapi/qom.json b/qapi/qom.json
> index 2a6e49365a..bfb01b909f 100644
> --- a/qapi/qom.json
> +++ b/qapi/qom.json
> @@ -682,6 +682,9 @@
# @mem-path: the path to either a shared memory or huge page
# filesystem mount
Does this need adjustment?
[...]
> # writable RAM instead of ROM, and want to set this property to 'off'.
> # (default: auto, since 8.2)
> #
> +# @shm: if true, shm_open(3) is used to create/open POSIX shared memory
> +# object; if false, an open(2) is used. (default: false) (since 9.0)
> +#
Please format like this for consistency:
# @shm: if true, shm_open(3) is used to create/open POSIX shared memory
# object; if false, an open(2) is used (default: false) (since 9.0)
> # Since: 2.1
> ##
> { 'struct': 'MemoryBackendFileProperties',
> @@ -692,6 +695,7 @@
> 'mem-path': 'str',
> '*pmem': { 'type': 'bool', 'if': 'CONFIG_LIBPMEM' },
> '*readonly': 'bool',
> + '*shm': 'bool',
> '*rom': 'OnOffAuto' } }
>
> ##
[...]
- [PATCH 3/9] libvhost-user: mask F_INFLIGHT_SHMFD if memfd is not supported, (continued)
- [PATCH 3/9] libvhost-user: mask F_INFLIGHT_SHMFD if memfd is not supported, Stefano Garzarella, 2024/02/28
- [PATCH 5/9] contrib/vhost-user-blk: fix bind() using the right size of the address, Stefano Garzarella, 2024/02/28
- [PATCH 6/9] vhost-user: enable frontends on any POSIX system, Stefano Garzarella, 2024/02/28
- [PATCH 7/9] libvhost-user: enable it on any POSIX system, Stefano Garzarella, 2024/02/28
- [PATCH 8/9] contrib/vhost-user-blk: enabled it on any POSIX system, Stefano Garzarella, 2024/02/28
- [PATCH 9/9] hostmem-file: support POSIX shm_open(), Stefano Garzarella, 2024/02/28
Re: [PATCH 0/9] vhost-user: support any POSIX system (tested on macOS and FreeBSD), Stefano Garzarella, 2024/02/28