From: Gleb Natapov <gleb@redhat.com>
To: Blue Swirl <blauwirbel@gmail.com>
Cc: Jan Kiszka <jan.kiszka@siemens.com>, Avi Kivity <avi@redhat.com>,
Marcelo Tosatti <mtosatti@redhat.com>,
Anthony Liguori <aliguori@us.ibm.com>,
qemu-devel <qemu-devel@nongnu.org>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>
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.
WARNING: multiple messages have this Message-ID (diff)
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: 90+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-10 18:31 [PATCH v2 0/8] uq/master: TPR access optimization for Windows guests Jan Kiszka
2012-02-10 18:31 ` [Qemu-devel] " Jan Kiszka
2012-02-10 18:31 ` [PATCH v2 1/8] kvm: Set cpu_single_env only once Jan Kiszka
2012-02-10 18:31 ` [Qemu-devel] " Jan Kiszka
2012-02-11 10:02 ` Blue Swirl
2012-02-11 10:02 ` [Qemu-devel] " Blue Swirl
2012-02-11 10:06 ` Jan Kiszka
2012-02-11 10:06 ` [Qemu-devel] " Jan Kiszka
2012-02-11 11:25 ` Blue Swirl
2012-02-11 11:25 ` [Qemu-devel] " Blue Swirl
2012-02-11 11:49 ` Andreas Färber
2012-02-11 11:49 ` [Qemu-devel] " Andreas Färber
2012-02-11 12:43 ` Jan Kiszka
2012-02-11 12:43 ` Jan Kiszka
2012-02-11 13:06 ` Andreas Färber
2012-02-11 13:06 ` [Qemu-devel] " Andreas Färber
2012-02-11 13:07 ` Jan Kiszka
2012-02-11 13:07 ` Jan Kiszka
2012-02-11 13:21 ` Andreas Färber
2012-02-11 13:21 ` Andreas Färber
2012-02-11 13:35 ` Jan Kiszka
2012-02-11 13:35 ` [Qemu-devel] " Jan Kiszka
2012-02-11 13:59 ` Andreas Färber
2012-02-11 13:59 ` [Qemu-devel] " Andreas Färber
2012-02-11 14:02 ` Jan Kiszka
2012-02-11 14:02 ` [Qemu-devel] " Jan Kiszka
2012-02-11 14:12 ` Andreas Färber
2012-02-11 14:12 ` Andreas Färber
2012-02-11 14:24 ` Jan Kiszka
2012-02-11 14:24 ` Jan Kiszka
2012-02-11 14:49 ` Andreas Färber
2012-02-11 14:49 ` [Qemu-devel] " Andreas Färber
2012-02-13 8:17 ` Paolo Bonzini
2012-02-13 8:17 ` Paolo Bonzini
2012-02-11 13:54 ` Blue Swirl
2012-02-11 13:54 ` Blue Swirl
2012-02-11 14:00 ` Jan Kiszka
2012-02-11 14:00 ` [Qemu-devel] " Jan Kiszka
2012-02-11 14:11 ` Blue Swirl
2012-02-11 14:11 ` Blue Swirl
2012-02-11 14:18 ` Jan Kiszka
2012-02-11 14:18 ` Jan Kiszka
2012-02-11 14:23 ` Blue Swirl
2012-02-11 14:23 ` Blue Swirl
2012-02-11 12:41 ` Jan Kiszka
2012-02-11 12:41 ` [Qemu-devel] " Jan Kiszka
2012-02-10 18:31 ` [PATCH v2 2/8] Allow to use pause_all_vcpus from VCPU context Jan Kiszka
2012-02-10 18:31 ` [Qemu-devel] " Jan Kiszka
2012-02-11 14:16 ` Blue Swirl
2012-02-11 14:16 ` [Qemu-devel] " Blue Swirl
2012-02-11 14:31 ` Jan Kiszka
2012-02-11 14:31 ` [Qemu-devel] " Jan Kiszka
2012-02-10 18:31 ` [PATCH v2 3/8] target-i386: Add infrastructure for reporting TPR MMIO accesses Jan Kiszka
2012-02-10 18:31 ` [Qemu-devel] " Jan Kiszka
2012-02-11 14:32 ` Blue Swirl
2012-02-11 14:32 ` Blue Swirl
2012-02-10 18:31 ` [PATCH v2 4/8] kvmvapic: Add option ROM Jan Kiszka
2012-02-10 18:31 ` [Qemu-devel] " Jan Kiszka
2012-02-10 18:31 ` [PATCH v2 5/8] kvmvapic: Introduce TPR access optimization for Windows guests Jan Kiszka
2012-02-10 18:31 ` [Qemu-devel] " Jan Kiszka
2012-02-11 15:25 ` Blue Swirl
2012-02-11 15:25 ` [Qemu-devel] " Blue Swirl
2012-02-13 10:16 ` Jan Kiszka
2012-02-13 10:16 ` Jan Kiszka
2012-02-13 18:50 ` Blue Swirl
2012-02-13 18:50 ` Blue Swirl
2012-02-13 19:11 ` Gleb Natapov [this message]
2012-02-13 19:11 ` Gleb Natapov
2012-02-13 19:22 ` Jan Kiszka
2012-02-13 19:22 ` [Qemu-devel] " Jan Kiszka
2012-02-14 7:54 ` Gleb Natapov
2012-02-14 7:54 ` [Qemu-devel] " Gleb Natapov
2012-02-14 8:55 ` Jan Kiszka
2012-02-14 8:55 ` [Qemu-devel] " Jan Kiszka
2012-02-14 8:59 ` Gleb Natapov
2012-02-14 8:59 ` [Qemu-devel] " Gleb Natapov
2012-02-10 18:31 ` [PATCH v2 6/8] kvmvapic: Simplify mp/up_set_tpr Jan Kiszka
2012-02-10 18:31 ` [Qemu-devel] " Jan Kiszka
2012-02-10 18:31 ` [PATCH v2 7/8] optionsrom: Reserve space for checksum Jan Kiszka
2012-02-10 18:31 ` [Qemu-devel] " Jan Kiszka
2012-02-11 11:46 ` Andreas Färber
2012-02-11 11:46 ` [Qemu-devel] " Andreas Färber
2012-02-11 12:45 ` Jan Kiszka
2012-02-11 12:45 ` [Qemu-devel] " Jan Kiszka
2012-02-11 12:51 ` Andreas Färber
2012-02-11 12:51 ` [Qemu-devel] " Andreas Färber
2012-02-11 12:57 ` Jan Kiszka
2012-02-11 12:57 ` [Qemu-devel] " Jan Kiszka
2012-02-10 18:31 ` [PATCH v2 8/8] kvmvapic: Use optionrom helpers Jan Kiszka
2012-02-10 18:31 ` [Qemu-devel] " 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 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.