From: Peter Xu <peterx@redhat.com>
To: Vitaly Kuznetsov <vkuznets@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
Laszlo Ersek <lersek@redhat.com>,
qemu-devel@nongnu.org,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
Eduardo Habkost <ehabkost@redhat.com>
Subject: Re: [PATCH RFC] memory: pause all vCPUs for the duration of memory transactions
Date: Tue, 3 Nov 2020 11:37:18 -0500 [thread overview]
Message-ID: <20201103163718.GH20600@xz-x1> (raw)
In-Reply-To: <87v9emy4g2.fsf@vitty.brq.redhat.com>
On Tue, Nov 03, 2020 at 02:07:09PM +0100, Vitaly Kuznetsov wrote:
> In case it is a normal access from the guest, yes, but AFAIR here
> guest's CR3 is pointing to non existent memory and when KVM detects that
> it injects #PF by itself without a loop through userspace.
I see, thanks Vitaly. I think this kind of answered my previous confusion on
why we can't just bounce all these to QEMU since I thought QEMU should try to
take the bql if it's mmio access - probably because there're quite a lot of
references to guest memslots in kernel that cannot be naturally treated as
guest MMIO access (especially for nested, maybe?) so that maybe it's very hard
to cover all of them. Paolo has mentioned quite a few times that he'd prefer a
kernel solution for this; I feel like I understand better on the reason now..
Have any of us tried to collect the requirements on this new kernel interface
(if to be proposed)? I'm kind of thinking how it would look like to solve all
the pains we have right now.
Firstly, I think we'd likely want to have the capability to handle "holes" in
memslots, either to punch a hole, which iiuc is the problem behind this patch.
Or the reversed operation, which is to fill up a whole that we've just punched.
The other major one could be virtio-mem who would like to extend or shrink an
existing memslot. However IIUC that's also doable with the "hole" idea in that
we can create the memslot with the maximum supported size, then "punch a hole"
at the end of the memslot just like it shrinked. When extend, we shrink the
hole instead rather than the memslot.
Then there's the other case where we want to keep the dirty bitmap when
punching a hole on existing ram. If with the "hole" idea in the kernel, it
seems easy too - when we punch the hole, we drop dirty bitmaps only for the
range covered by the hole. Then we won't lose the rest bitmaps that where the
RAM still makes sense, since the memslot will use the same bitmap before/after
punching a hole.
So now an simple idea comes to my mind (I think we can have even more better,
or more complicated ideas, e.g., to make kvm memslot a tree? But I'll start
with the simple): maybe we just need to teach each kvm memslot to take "holes"
within itself. By default, there's no holes with KVM_SET_USER_MEMORY_REGION
configured kvm memslots, then we can configure holes for each memslot using a
new flag (assuming, KVM_MEM_SET_HOLE) of the same ioctl (after LOG_DIRTY_PAGES
and READ_ONLY). Initially we may add a restriction on how many holes we need,
so the holes can also be an array.
Thoughts?
Thanks,
--
Peter Xu
next prev parent reply other threads:[~2020-11-03 16:38 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-26 8:49 [PATCH RFC] memory: pause all vCPUs for the duration of memory transactions Vitaly Kuznetsov
2020-10-26 10:43 ` David Hildenbrand
2020-10-26 11:17 ` David Hildenbrand
2020-10-27 12:36 ` Vitaly Kuznetsov
2020-10-27 12:42 ` David Hildenbrand
2020-10-27 13:02 ` Vitaly Kuznetsov
2020-10-27 13:08 ` David Hildenbrand
2020-10-27 13:19 ` Vitaly Kuznetsov
2020-10-27 13:35 ` David Hildenbrand
2020-10-27 13:47 ` Vitaly Kuznetsov
2020-10-27 14:20 ` Igor Mammedov
2020-11-02 19:57 ` Peter Xu
2020-11-03 13:07 ` Vitaly Kuznetsov
2020-11-03 16:37 ` Peter Xu [this message]
2020-11-04 18:09 ` Laszlo Ersek
2020-11-04 19:23 ` Peter Xu
2020-11-05 15:36 ` Vitaly Kuznetsov
2020-11-05 16:35 ` Peter Xu
2020-11-04 17:58 ` Laszlo Ersek
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=20201103163718.GH20600@xz-x1 \
--to=peterx@redhat.com \
--cc=dgilbert@redhat.com \
--cc=ehabkost@redhat.com \
--cc=lersek@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=vkuznets@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).