From: David Hildenbrand <david@redhat.com>
To: qemu-devel@nongnu.org
Cc: David Hildenbrand <david@redhat.com>,
"Michael S . Tsirkin" <mst@redhat.com>,
Jason Wang <jasowang@redhat.com>,
Stefan Hajnoczi <stefanha@redhat.com>,
Stefano Garzarella <sgarzare@redhat.com>,
Germano Veit Michel <germano@redhat.com>,
Raphael Norwitz <raphael.norwitz@nutanix.com>
Subject: [PATCH v2 00/14] libvhost-user: support more memslots and cleanup memslot handling code
Date: Wed, 14 Feb 2024 16:16:47 +0100 [thread overview]
Message-ID: <20240214151701.29906-1-david@redhat.com> (raw)
This series adds support for more memslots (509) to libvhost-user, to
make it fully compatible with virtio-mem that uses up to 256 memslots
accross all memory devices in "dynamic-memslot" mode (more details
in patch #2).
With that in place, this series optimizes and extends memory region
handling in libvhost-user:
* Heavily deduplicate and clean up the memory region handling code
* Speeds up GPA->VA translation with many memslots using binary search
* Optimize mmap_offset handling to use it as fd_offset for mmap()
* Avoid ring remapping when adding a single memory region
* Avoid dumping all guest memory, possibly allocating memory in sparse
memory mappings when the process crashes
I'm being very careful to not break some weird corner case that modern
QEMU might no longer trigger, but older one could have triggered or some
other frontend might trigger.
The only thing where I am not careful is to forbid memory regions that
overlap in GPA space: it doesn't make any sense.
With this series, virtio-mem (with dynamic-memslots=on) +
qemu-storage-daemon works flawlessly and as expected in my tests.
v1 -> v2:
* Drop "libvhost-user: Fix msg_region->userspace_addr computation"
-> Not actually required
* "libvhost-user: Factor out adding a memory region"
-> Make debug output more consistent (add missing ":")
* "libvhost-user: Use most of mmap_offset as fd_offset"
-> get_fd_pagesize -> get_fd_hugepagesize; remove getpagesize()
-> "mmap_offset:" to "old mmap_offset:" in debug message
-> "adj mmap_offset:" to "new mmap_offset:" in debug message
-> Use "(unsigned int)fs.f_type"; the man page of fstatfs() calls out
that the type of f_type can vary depending on the architecture.
"unsigned int" is sufficient here.
-> Updated patch description
* Added RBs+ACKs
* Did a Gitlab CI run, seems to be happy reagrding libvhost-user
Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Jason Wang <jasowang@redhat.com>
Cc: Stefan Hajnoczi <stefanha@redhat.com>
Cc: Stefano Garzarella <sgarzare@redhat.com>
Cc: Germano Veit Michel <germano@redhat.com>
Cc: Raphael Norwitz <raphael.norwitz@nutanix.com>
David Hildenbrand (14):
libvhost-user: Dynamically allocate memory for memory slots
libvhost-user: Bump up VHOST_USER_MAX_RAM_SLOTS to 509
libvhost-user: Factor out removing all mem regions
libvhost-user: Merge vu_set_mem_table_exec_postcopy() into
vu_set_mem_table_exec()
libvhost-user: Factor out adding a memory region
libvhost-user: No need to check for NULL when unmapping
libvhost-user: Don't zero out memory for memory regions
libvhost-user: Don't search for duplicates when removing memory
regions
libvhost-user: Factor out search for memory region by GPA and simplify
libvhost-user: Speedup gpa_to_mem_region() and vu_gpa_to_va()
libvhost-user: Use most of mmap_offset as fd_offset
libvhost-user: Factor out vq usability check
libvhost-user: Dynamically remap rings after (temporarily?) removing
memory regions
libvhost-user: Mark mmap'ed region memory as MADV_DONTDUMP
subprojects/libvhost-user/libvhost-user.c | 595 ++++++++++++----------
subprojects/libvhost-user/libvhost-user.h | 10 +-
2 files changed, 334 insertions(+), 271 deletions(-)
--
2.43.0
next reply other threads:[~2024-02-14 15:19 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-14 15:16 David Hildenbrand [this message]
2024-02-14 15:16 ` [PATCH v2 01/14] libvhost-user: Dynamically allocate memory for memory slots David Hildenbrand
2024-02-14 15:16 ` [PATCH v2 02/14] libvhost-user: Bump up VHOST_USER_MAX_RAM_SLOTS to 509 David Hildenbrand
2024-02-14 15:16 ` [PATCH v2 03/14] libvhost-user: Factor out removing all mem regions David Hildenbrand
2024-02-14 15:16 ` [PATCH v2 04/14] libvhost-user: Merge vu_set_mem_table_exec_postcopy() into vu_set_mem_table_exec() David Hildenbrand
2024-02-14 15:16 ` [PATCH v2 05/14] libvhost-user: Factor out adding a memory region David Hildenbrand
2024-02-14 15:16 ` [PATCH v2 06/14] libvhost-user: No need to check for NULL when unmapping David Hildenbrand
2024-02-14 15:16 ` [PATCH v2 07/14] libvhost-user: Don't zero out memory for memory regions David Hildenbrand
2024-02-14 15:16 ` [PATCH v2 08/14] libvhost-user: Don't search for duplicates when removing " David Hildenbrand
2024-02-14 15:16 ` [PATCH v2 09/14] libvhost-user: Factor out search for memory region by GPA and simplify David Hildenbrand
2024-02-14 15:16 ` [PATCH v2 10/14] libvhost-user: Speedup gpa_to_mem_region() and vu_gpa_to_va() David Hildenbrand
2024-02-14 15:16 ` [PATCH v2 11/14] libvhost-user: Use most of mmap_offset as fd_offset David Hildenbrand
2024-02-14 15:16 ` [PATCH v2 12/14] libvhost-user: Factor out vq usability check David Hildenbrand
2024-02-14 15:17 ` [PATCH v2 13/14] libvhost-user: Dynamically remap rings after (temporarily?) removing memory regions David Hildenbrand
2024-02-14 15:17 ` [PATCH v2 14/14] libvhost-user: Mark mmap'ed region memory as MADV_DONTDUMP David Hildenbrand
2024-03-11 20:00 ` [PATCH v2 00/14] libvhost-user: support more memslots and cleanup memslot handling code Mario Casquero
2024-03-11 20:03 ` Mario Casquero
2024-03-12 8:26 ` David Hildenbrand
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=20240214151701.29906-1-david@redhat.com \
--to=david@redhat.com \
--cc=germano@redhat.com \
--cc=jasowang@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=raphael.norwitz@nutanix.com \
--cc=sgarzare@redhat.com \
--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).