From: Anthony Liguori <anthony@codemonkey.ws>
To: Glauber Costa <glommer@gmail.com>
Cc: Glauber Costa <glommer@redhat.com>, Avi Kivity <avi@redhat.com>,
qemu-devel@nongnu.org, kvm-devel <kvm@vger.kernel.org>,
Gerd Hoffmann <kraxel@redhat.com>
Subject: Re: [Qemu-devel] Re: [PATCH 3/3] Add KVM support to QEMU
Date: Tue, 28 Oct 2008 18:36:26 -0500 [thread overview]
Message-ID: <4907A1FA.2060106@codemonkey.ws> (raw)
In-Reply-To: <5d6222a80810281604g39708040kf710725dce6413dd@mail.gmail.com>
Glauber Costa wrote:
> On Tue, Oct 28, 2008 at 7:51 PM, Anthony Liguori <anthony@codemonkey.ws> wrote:
>
>>
>> This is part of the reason for this exercise. I'd rather introduce KVM
>> support first and then look at abstracting things, than vice versa. A
>> number of the hooks in the current QEMUAccel tree are there for the wrong
>> reason (to support the out-of-tree IO thread, for instance).
>>
>> If you just introduce something with various hooks and say, these are hooks
>> we'll need, it's not possible to really evaluate whether the hooks are
>> needed because nothing in the tree makes use of them.
>>
>
> We talked extensively on monday about it, and I'm in agreement with it.
>
Something I was thinking about this morning, and I think the first place
where we'll definitely need a hook, is how to deal with
kvm_load_registers(). I think there's overlap between KVM and the IO
thread here.
There are two reasons (I can think of) that most of the device model
code can't run in conjunction with TCG. The first is that TCG may
modify CPUState in a non-atomic way. The device model may need to
access CPUState although there are very few places that it does. The
other reason is accessing guest memory. TCG does not preserve atomicity
when a guest accesses device memory. There are probably only a few
places in the device model (like virtio) that depend on atomicity.
If we implemented an API that implemented a lock/unlock for CPUState and
for portions of memory, then I think this could be used both as a hook
for kvm_load_registers and as a way to introduce an IO thread with TCG.
The CPUState lock/unlock is pretty straight forward. For the memory
implementation to be efficient, I think you would have to acquire the
lock when TCG brings a physical address into the TLB (preferrably, at a
page granularity), or whenever someone tries to access memory (via
cpu_physical_memory_rw). I think in the vast majority of the cases,
there wouldn't be any contention and both could TCG could run along side
the IO thread.
Another place "hook" is updating a slot's dirty bitmap. Right now, with
my patchset we don't have live migration or the VGA RAM optimization.
There's nothing about the VGA RAM optimization that wouldn't work for
QEMU. I'm not sure that it really is an optimization in the context of
TCG, but I certainly don't think it's any worse. The only thing you
really need is to query the KVM dirty bitmap when it comes time to
enable start over querying the VGA dirty bits.
The same is needed for live migration, so I think what we really need is
to change the memory dirty bit tracking API to have a concept of refresh
that we can use to hook for KVM.
FWIW, I included a TODO in my patch if people are interesting in
tackling any of these things.
Regards,
Anthony Liguori
Regards,
Anthony Liguori
>> Regards,
>>
>> Anthony Liguori
>>
>>
>>> surprised,
>>> Gerd
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe kvm" in
>>> the body of a message to majordomo@vger.kernel.org
>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>>
>>>
>>
>>
>>
>
>
>
>
next prev parent reply other threads:[~2008-10-28 23:36 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-28 20:13 [Qemu-devel] [PATCH 1/3] Add additional CPU flag definitions Anthony Liguori
2008-10-28 20:13 ` [Qemu-devel] [PATCH 2/3] Split CPUID from op_helper Anthony Liguori
2008-10-28 20:13 ` [Qemu-devel] [PATCH 3/3] Add KVM support to QEMU Anthony Liguori
2008-10-28 20:49 ` Hollis Blanchard
2008-10-28 21:10 ` Anthony Liguori
2008-10-28 20:57 ` Andreas Färber
2008-10-28 21:04 ` Glauber Costa
2008-10-28 21:16 ` Anthony Liguori
2008-10-28 21:05 ` Anthony Liguori
2008-11-04 13:25 ` Avi Kivity
2008-10-28 21:41 ` [Qemu-devel] " Gerd Hoffmann
2008-10-28 21:51 ` Anthony Liguori
2008-10-28 23:04 ` Glauber Costa
2008-10-28 23:36 ` Anthony Liguori [this message]
2008-10-29 9:54 ` Avi Kivity
2008-10-29 12:35 ` Glauber Costa
2008-10-29 12:39 ` Avi Kivity
2008-10-29 12:56 ` Glauber Costa
2008-10-29 13:07 ` Anthony Liguori
2008-10-29 13:23 ` Avi Kivity
2008-10-29 13:32 ` Anthony Liguori
2008-10-29 13:51 ` Hollis Blanchard
2008-10-29 14:09 ` Avi Kivity
2008-10-29 14:16 ` Fabrice Bellard
2008-10-29 14:23 ` Anthony Liguori
2008-10-29 19:13 ` Blue Swirl
2008-11-01 16:25 ` Blue Swirl
2008-10-29 14:58 ` Glauber Costa
2008-10-29 17:41 ` Glauber Costa
2008-10-29 19:01 ` Anthony Liguori
2008-11-04 13:24 ` Avi Kivity
2008-11-04 14:02 ` Anthony Liguori
2008-11-04 14:46 ` Avi Kivity
2008-11-04 14:50 ` Anthony Liguori
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=4907A1FA.2060106@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=avi@redhat.com \
--cc=glommer@gmail.com \
--cc=glommer@redhat.com \
--cc=kraxel@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=qemu-devel@nongnu.org \
/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).