From: Gleb Natapov <gleb@redhat.com>
To: Blue Swirl <blauwirbel@gmail.com>
Cc: Anthony Liguori <aliguori@us.ibm.com>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
Jan Kiszka <jan.kiszka@siemens.com>,
Marcelo Tosatti <mtosatti@redhat.com>,
qemu-devel <qemu-devel@nongnu.org>, Avi Kivity <avi@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v2 5/8] kvmvapic: Introduce TPR access optimization for Windows guests
Date: Mon, 13 Feb 2012 21:11:56 +0200 [thread overview]
Message-ID: <20120213191156.GC7532@redhat.com> (raw)
In-Reply-To: <CAAu8pHuqpSMnuO+3O-yBmXniNs5+Qze=5X8xj0-yt2Xk7QDMNQ@mail.gmail.com>
On Mon, Feb 13, 2012 at 06:50:08PM +0000, Blue Swirl wrote:
> On Mon, Feb 13, 2012 at 10:16, Jan Kiszka <jan.kiszka@siemens.com> wrote:
> > On 2012-02-11 16:25, Blue Swirl wrote:
> >> On Fri, Feb 10, 2012 at 18:31, Jan Kiszka <jan.kiszka@siemens.com> wrote:
> >>> This enables acceleration for MMIO-based TPR registers accesses of
> >>> 32-bit Windows guest systems. It is mostly useful with KVM enabled,
> >>> either on older Intel CPUs (without flexpriority feature, can also be
> >>> manually disabled for testing) or any current AMD processor.
> >>>
> >>> The approach introduced here is derived from the original version of
> >>> qemu-kvm. It was refactored, documented, and extended by support for
> >>> user space APIC emulation, both with and without KVM acceleration. The
> >>> VMState format was kept compatible, so was the ABI to the option ROM
> >>> that implements the guest-side para-virtualized driver service. This
> >>> enables seamless migration from qemu-kvm to upstream or, one day,
> >>> between KVM and TCG mode.
> >>>
> >>> The basic concept goes like this:
> >>> - VAPIC PV interface consisting of I/O port 0x7e and (for KVM in-kernel
> >>> irqchip) a vmcall hypercall is registered
> >>> - VAPIC option ROM is loaded into guest
> >>> - option ROM activates TPR MMIO access reporting via port 0x7e
> >>> - TPR accesses are trapped and patched in the guest to call into option
> >>> ROM instead, VAPIC support is enabled
> >>> - option ROM TPR helpers track state in memory and invoke hypercall to
> >>> poll for pending IRQs if required
> >>>
> >>> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
> >>
> >> I must say that I find the approach horrible, patching guests and ROMs
> >> and looking up Windows internals. Taking the same approach to extreme,
> >> we could for example patch Xen guest to become a KVM guest. Not that I
> >> object merging.
> >
> > Yes, this is horrible. But there is no real better way in the absence of
> > hardware assisted virtualization of the TPR. I think MS is recommending
> > this patching approach as well.
>
> Maybe instead of routing via ROM and the hypercall, the TPR accesses
> could be handled directly with guest invisible breakpoints (like GDB
> breakpoints, but for QEMU internal use), much like other
> instrumentation could be handled.
>
Hypercall is rarely called. The idea behind patching is to not
have exit on each TPR update. Breakpoint will cause exit making the
whole exercise pointless.
--
Gleb.
next prev parent reply other threads:[~2012-02-13 19:12 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-10 18:31 [Qemu-devel] [PATCH v2 0/8] uq/master: TPR access optimization for Windows guests Jan Kiszka
2012-02-10 18:31 ` [Qemu-devel] [PATCH v2 1/8] kvm: Set cpu_single_env only once Jan Kiszka
2012-02-11 10:02 ` Blue Swirl
2012-02-11 10:06 ` Jan Kiszka
2012-02-11 11:25 ` Blue Swirl
2012-02-11 11:49 ` Andreas Färber
2012-02-11 12:43 ` Jan Kiszka
2012-02-11 13:06 ` Andreas Färber
2012-02-11 13:07 ` Jan Kiszka
2012-02-11 13:21 ` Andreas Färber
2012-02-11 13:35 ` Jan Kiszka
2012-02-11 13:59 ` Andreas Färber
2012-02-11 14:02 ` Jan Kiszka
2012-02-11 14:12 ` Andreas Färber
2012-02-11 14:24 ` Jan Kiszka
2012-02-11 14:49 ` Andreas Färber
2012-02-13 8:17 ` Paolo Bonzini
2012-02-11 13:54 ` Blue Swirl
2012-02-11 14:00 ` Jan Kiszka
2012-02-11 14:11 ` Blue Swirl
2012-02-11 14:18 ` Jan Kiszka
2012-02-11 14:23 ` Blue Swirl
2012-02-11 12:41 ` Jan Kiszka
2012-02-10 18:31 ` [Qemu-devel] [PATCH v2 2/8] Allow to use pause_all_vcpus from VCPU context Jan Kiszka
2012-02-11 14:16 ` Blue Swirl
2012-02-11 14:31 ` Jan Kiszka
2012-02-10 18:31 ` [Qemu-devel] [PATCH v2 3/8] target-i386: Add infrastructure for reporting TPR MMIO accesses Jan Kiszka
2012-02-11 14:32 ` Blue Swirl
2012-02-10 18:31 ` [Qemu-devel] [PATCH v2 4/8] kvmvapic: Add option ROM Jan Kiszka
2012-02-10 18:31 ` [Qemu-devel] [PATCH v2 5/8] kvmvapic: Introduce TPR access optimization for Windows guests Jan Kiszka
2012-02-11 15:25 ` Blue Swirl
2012-02-13 10:16 ` Jan Kiszka
2012-02-13 18:50 ` Blue Swirl
2012-02-13 19:11 ` Gleb Natapov [this message]
2012-02-13 19:22 ` Jan Kiszka
2012-02-14 7:54 ` Gleb Natapov
2012-02-14 8:55 ` Jan Kiszka
2012-02-14 8:59 ` Gleb Natapov
2012-02-10 18:31 ` [Qemu-devel] [PATCH v2 6/8] kvmvapic: Simplify mp/up_set_tpr Jan Kiszka
2012-02-10 18:31 ` [Qemu-devel] [PATCH v2 7/8] optionsrom: Reserve space for checksum Jan Kiszka
2012-02-11 11:46 ` Andreas Färber
2012-02-11 12:45 ` Jan Kiszka
2012-02-11 12:51 ` Andreas Färber
2012-02-11 12:57 ` Jan Kiszka
2012-02-10 18:31 ` [Qemu-devel] [PATCH v2 8/8] kvmvapic: Use optionrom helpers Jan Kiszka
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=20120213191156.GC7532@redhat.com \
--to=gleb@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=avi@redhat.com \
--cc=blauwirbel@gmail.com \
--cc=jan.kiszka@siemens.com \
--cc=kvm@vger.kernel.org \
--cc=mtosatti@redhat.com \
--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).