From: Fabiano Rosas <farosas@suse.de>
To: Peter Xu <peterx@redhat.com>, qemu-devel@nongnu.org
Cc: Vitaly Kuznetsov <vkuznets@redhat.com>,
peterx@redhat.com, Prasad Pandit <ppandit@redhat.com>,
Julia Suvorova <jusual@redhat.com>,
Juraj Marcin <jmarcin@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
David Hildenbrand <david@redhat.com>,
qemu-stable <qemu-stable@nongnu.org>,
Zhiyi Guo <zhguo@redhat.com>
Subject: Re: [PATCH v4 1/4] KVM: Dynamic sized kvm memslots array
Date: Tue, 17 Sep 2024 14:46:44 -0300 [thread overview]
Message-ID: <87cyl2yxyz.fsf@suse.de> (raw)
In-Reply-To: <20240917163835.194664-2-peterx@redhat.com>
Peter Xu <peterx@redhat.com> writes:
> Zhiyi reported an infinite loop issue in VFIO use case. The cause of that
> was a separate discussion, however during that I found a regression of
> dirty sync slowness when profiling.
>
> Each KVMMemoryListerner maintains an array of kvm memslots. Currently it's
> statically allocated to be the max supported by the kernel. However after
> Linux commit 4fc096a99e ("KVM: Raise the maximum number of user memslots"),
> the max supported memslots reported now grows to some number large enough
> so that it may not be wise to always statically allocate with the max
> reported.
>
> What's worse, QEMU kvm code still walks all the allocated memslots entries
> to do any form of lookups. It can drastically slow down all memslot
> operations because each of such loop can run over 32K times on the new
> kernels.
>
> Fix this issue by making the memslots to be allocated dynamically.
>
> Here the initial size was set to 16 because it should cover the basic VM
> usages, so that the hope is the majority VM use case may not even need to
> grow at all (e.g. if one starts a VM with ./qemu-system-x86_64 by default
> it'll consume 9 memslots), however not too large to waste memory.
>
> There can also be even better way to address this, but so far this is the
> simplest and should be already better even than before we grow the max
> supported memslots. For example, in the case of above issue when VFIO was
> attached on a 32GB system, there are only ~10 memslots used. So it could
> be good enough as of now.
>
> In the above VFIO context, measurement shows that the precopy dirty sync
> shrinked from ~86ms to ~3ms after this patch applied. It should also apply
> to any KVM enabled VM even without VFIO.
>
> NOTE: we don't have a FIXES tag for this patch because there's no real
> commit that regressed this in QEMU. Such behavior existed for a long time,
> but only start to be a problem when the kernel reports very large
> nr_slots_max value. However that's pretty common now (the kernel change
> was merged in 2021) so we attached cc:stable because we'll want this change
> to be backported to stable branches.
>
> Cc: qemu-stable <qemu-stable@nongnu.org>
> Reported-by: Zhiyi Guo <zhguo@redhat.com>
> Tested-by: Zhiyi Guo <zhguo@redhat.com>
> Signed-off-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Fabiano Rosas <farosas@suse.de>
next prev parent reply other threads:[~2024-09-17 17:47 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-17 16:38 [PATCH v4 0/4] KVM: Dynamic sized memslots array Peter Xu
2024-09-17 16:38 ` [PATCH v4 1/4] KVM: Dynamic sized kvm " Peter Xu
2024-09-17 17:46 ` Fabiano Rosas [this message]
2024-09-19 8:15 ` David Hildenbrand
2024-10-18 15:38 ` Michael Tokarev
2024-10-21 14:37 ` Peter Xu
2024-10-21 19:05 ` Michael Tokarev
2024-10-21 21:18 ` Peter Xu
2024-09-17 16:38 ` [PATCH v4 2/4] KVM: Define KVM_MEMSLOTS_NUM_MAX_DEFAULT Peter Xu
2024-09-17 16:38 ` [PATCH v4 3/4] KVM: Rename KVMMemoryListener.nr_used_slots to nr_slots_used Peter Xu
2024-09-17 16:38 ` [PATCH v4 4/4] KVM: Rename KVMState->nr_slots to nr_slots_max Peter Xu
2024-10-09 12:44 ` [PATCH v4 0/4] KVM: Dynamic sized memslots array Peter Xu
2024-10-10 7:53 ` Paolo Bonzini
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=87cyl2yxyz.fsf@suse.de \
--to=farosas@suse.de \
--cc=david@redhat.com \
--cc=jmarcin@redhat.com \
--cc=jusual@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=ppandit@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-stable@nongnu.org \
--cc=vkuznets@redhat.com \
--cc=zhguo@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.