From: "Michael S. Tsirkin" <mst@redhat.com>
To: Avi Kivity <avi@redhat.com>
Cc: kvm@vger.kernel.org
Subject: Re: [PATCHv0 dont apply] RFC: kvm eoi PV using shared memory
Date: Tue, 10 Apr 2012 17:53:51 +0300 [thread overview]
Message-ID: <20120410145351.GE19556@redhat.com> (raw)
In-Reply-To: <4F8444AE.4020504@redhat.com>
On Tue, Apr 10, 2012 at 05:33:18PM +0300, Avi Kivity wrote:
> On 04/10/2012 05:26 PM, Michael S. Tsirkin wrote:
> > > > u64 status;
> > > > } osvw;
> > > > +
> > > > + struct {
> > > > + u64 msr_val;
> > > > + struct gfn_to_hva_cache data;
> > > > + int vector;
> > > > + } eoi;
> > > > };
> > >
> > > Needs to be cleared on INIT.
> >
> > You mean kvm_arch_vcpu_reset?
>
> Yes, or kvm_lapic_reset().
>
> > > >
> > > >
> > > > @@ -307,6 +308,9 @@ void __cpuinit kvm_guest_cpu_init(void)
> > > > smp_processor_id());
> > > > }
> > > >
> > > > + wrmsrl(MSR_KVM_EOI_EN, __pa(this_cpu_ptr(apic_eoi)) |
> > > > + MSR_KVM_EOI_ENABLED);
> > > > +
> > >
> > > Clear on kexec.
> >
> > With register_reboot_notifier?
>
> Yes, we already clear some kvm msrs there.
>
> > > >
> > > > - apic_set_vector(vector, apic->regs + APIC_ISR);
> > > > + if (eoi_enabled(vcpu)) {
> > > > + /* Anything pending? If yes disable eoi optimization. */
> > > > + if (unlikely(apic_find_highest_isr(apic) >= 0)) {
> > > > + int v = eoi_clr_pending_vector(vcpu);
> > >
> > > ISR != pending, that's IRR. If ISR vector has lower priority than the
> > > new vector, then we don't need to disable eoi avoidance.
> >
> > Yes. But we can and it's easier than figuring out priorities.
> > I am guessing such collisions are rare, right?
>
> It's pretty easy, if there is something in IRR but
> kvm_lapic_has_interrupt() returns -1, then we need to disable eoi avoidance.
I only see kvm_apic_has_interrupt - is this what you mean?
> > I'll add a trace to make sure.
> >
> > > > + if (v != -1)
> > > > + apic_set_vector(v, apic->regs + APIC_ISR);
> > > > + } else {
> > > > + eoi_set_pending_vector(vcpu, vector);
> > > > + set_isr = false;
> > >
> > > Weird. Just set it normally. Remember that reading the ISR needs to
> > > return the correct value.
> >
> > Marcelo said linux does not normally read ISR - not true?
>
> It's true and it's irrelevant. We aren't coding a feature to what linux
> does now, but for what linux or another guest may do in the future.
Right. So you think reading ISR has value
in combination with PV EOI for future guests?
I'm not arguing either way just curious.
> > Note this has no effect if the PV optimization is not enabled.
> >
> > > We need to process the avoided EOI before any APIC read/writes, to be
> > > sure the guest sees the updated values. Same for IOAPIC, EOI affects
> > > remote_irr. That may been we need to sample it after every exit, or
> > > perhaps disable the feature for level-triggered interrupts.
> >
> > Disabling would be very sad. Can we sample on remote irr read?
>
> That can be done from another vcpu.
We still can handle it, right? Where's the code that handles that read?
> Why do we care about
> level-triggered interrupts? Everything uses MSI or edge-triggered
> IOAPIC interrupts these days.
Well lots of emulated devices don't yet.
They probably should but it's nice to be able to
test with e.g. e1000 emulation not just virtio.
Besides, kvm_get_apic_interrupt
simply doesn't know about the triggering mode at the moment.
--
MST
next prev parent reply other threads:[~2012-04-10 14:53 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-10 13:27 [PATCHv0 dont apply] RFC: kvm eoi PV using shared memory Michael S. Tsirkin
2012-04-10 14:03 ` Avi Kivity
2012-04-10 14:26 ` Michael S. Tsirkin
2012-04-10 14:33 ` Avi Kivity
2012-04-10 14:53 ` Michael S. Tsirkin [this message]
2012-04-10 15:00 ` Avi Kivity
2012-04-10 15:14 ` Michael S. Tsirkin
2012-04-10 16:08 ` Avi Kivity
2012-04-10 17:06 ` Michael S. Tsirkin
2012-04-10 17:59 ` Gleb Natapov
2012-04-10 19:30 ` Michael S. Tsirkin
2012-04-10 19:33 ` Gleb Natapov
2012-04-10 19:40 ` Michael S. Tsirkin
2012-04-10 19:42 ` Gleb Natapov
2012-04-15 16:18 ` [PATCHv1 " Michael S. Tsirkin
2012-04-16 10:08 ` Gleb Natapov
2012-04-16 11:09 ` Michael S. Tsirkin
2012-04-16 11:24 ` Gleb Natapov
2012-04-16 12:18 ` Michael S. Tsirkin
2012-04-16 12:30 ` Gleb Natapov
2012-04-16 13:13 ` Michael S. Tsirkin
2012-04-16 15:10 ` Gleb Natapov
2012-04-16 16:33 ` Michael S. Tsirkin
2012-04-16 17:51 ` Gleb Natapov
2012-04-16 19:01 ` Michael S. Tsirkin
2012-04-17 8:45 ` Gleb Natapov
2012-04-16 17:24 ` Michael S. Tsirkin
2012-04-16 17:37 ` Gleb Natapov
2012-04-16 18:56 ` Michael S. Tsirkin
2012-04-17 8:59 ` Gleb Natapov
2012-04-17 9:24 ` Avi Kivity
2012-04-17 9:22 ` Avi Kivity
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=20120410145351.GE19556@redhat.com \
--to=mst@redhat.com \
--cc=avi@redhat.com \
--cc=kvm@vger.kernel.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