From: Radim Krcmar <rkrcmar@redhat.com>
To: Marcelo Tosatti <mtosatti@redhat.com>
Cc: kvm@vger.kernel.org, Luiz Capitulino <lcapitulino@redhat.com>,
Rik van Riel <riel@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [patch 2/3] KVM: x86: add option to advance tscdeadline hrtimer expiration
Date: Wed, 17 Dec 2014 20:36:27 +0100 [thread overview]
Message-ID: <20141217193626.GA3082@potion.brq.redhat.com> (raw)
In-Reply-To: <20141217174139.GA31721@amt.cnet>
2014-12-17 15:41-0200, Marcelo Tosatti:
> On Wed, Dec 17, 2014 at 03:58:13PM +0100, Radim Krcmar wrote:
> > 2014-12-16 09:08-0500, Marcelo Tosatti:
> > > + tsc_deadline = apic->lapic_timer.expired_tscdeadline;
> > > + apic->lapic_timer.expired_tscdeadline = 0;
> > > + guest_tsc = kvm_x86_ops->read_l1_tsc(vcpu, native_read_tsc());
> > > +
> > > + while (guest_tsc < tsc_deadline) {
> > > + int delay = min(tsc_deadline - guest_tsc, 1000ULL);
> >
> > Why break the __delay() loop into smaller parts?
>
> So that you can handle interrupts, in case this code ever moves
> outside IRQ protected region.
__delay() works only if it is delay_tsc(), which has this handled ...
(It even considers rescheduling with unsynchronized TSC.)
delay_tsc(delay) translates roughly to
end = read_tsc() + delay;
while (read_tsc() < end);
so the code of our while loop has a structure like
while ((guest_tsc = read_tsc()) < tsc_deadline) {
end = read_tsc() + min(tsc_deadline - guest_tsc, 1000);
while (read_tsc() < end);
}
which complicates our original idea of
while (read_tsc() < tsc_deadline);
(but I'm completely fine with it.)
> > > + __delay(delay);
> >
> > (Does not have to call delay_tsc, but I guess it won't change.)
> >
> > > + guest_tsc = kvm_x86_ops->read_l1_tsc(vcpu, native_read_tsc());
> > > + }
> > > }
> > >
> >
> > Btw. simple automatic delta tuning had worse results?
>
> Haven't tried automatic tuning.
>
> So what happens on a realtime environment is this: you execute the fixed
> number of instructions from interrupt handling all the way to VM-entry.
>
> Well, almost fixed. Fixed is the number of apic_timer_fn plus KVM
> instructions. You can also execute host scheduler and timekeeping
> processing.
>
> In practice, the length to execute that instruction sequence is a bell
> shaped normal distribution around the average (the right side is
> slightly higher due to host scheduler and timekeeping processing).
>
> You want to advance the timer by the rightmost bucket, that way you
> guarantee lower possible latencies (which is the interest here).
(Lower latencies would likely be achieved by having a timer that issues
posted interrupts from another CPU, and the guest set to busy idle.)
> That said, i don't see advantage in automatic tuning for the usecase
> which this targets.
Thanks, it doesn't make much difference in the long RT setup checklist.
---
I was asking just because I consider programming to equal automation ...
If we know that we will always set this to the rightmost bucket anyway,
it could be done like this
if ((s64)(delta = guest_tsc - tsc_deadline) > 0)
tsc_deadline_delta += delta;
...
advance_ns = kvm_tsc_to_ns(tsc_deadline_delta);
instead of a script that runs a test and sets the variable.
(On the other hand, it would probably have to be more complicated to
reach the same level of flexibility.)
next prev parent reply other threads:[~2014-12-17 19:36 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-16 14:08 [patch 0/3] KVM: add option to advance tscdeadline hrtimer expiration (v5) Marcelo Tosatti
2014-12-16 14:08 ` [patch 1/3] KVM: x86: add method to test PIR bitmap vector Marcelo Tosatti
2014-12-17 14:45 ` Radim Krcmar
2014-12-16 14:08 ` [patch 2/3] KVM: x86: add option to advance tscdeadline hrtimer expiration Marcelo Tosatti
2014-12-17 14:58 ` Radim Krcmar
2014-12-17 17:41 ` Marcelo Tosatti
2014-12-17 17:48 ` Paolo Bonzini
2014-12-17 19:36 ` Radim Krcmar [this message]
2014-12-18 12:24 ` Marcelo Tosatti
2014-12-23 13:18 ` Paolo Bonzini
2014-12-16 14:08 ` [patch 3/3] KVM: x86: add tracepoint to wait_lapic_expire Marcelo Tosatti
2014-12-17 15:06 ` Radim Krcmar
-- strict thread matches above, loose matches on Subject: below --
2014-12-23 20:58 [patch 0/3] KVM: add option to advance tscdeadline hrtimer expiration (v6) Marcelo Tosatti
2014-12-23 20:58 ` [patch 2/3] KVM: x86: add option to advance tscdeadline hrtimer expiration Marcelo Tosatti
2015-01-05 18:12 ` Radim Krcmar
2015-01-05 18:20 ` Radim Krcmar
2015-01-08 17:41 ` Marcelo Tosatti
2015-01-08 21:44 ` Paolo Bonzini
2014-12-15 22:06 [patch 0/3] KVM: add option to advance tscdeadline hrtimer expiration (v4) Marcelo Tosatti
2014-12-15 22:06 ` [patch 2/3] KVM: x86: add option to advance tscdeadline hrtimer expiration Marcelo Tosatti
2014-12-16 14:34 ` Paolo Bonzini
2014-12-16 15:13 ` Marcelo Tosatti
2014-12-16 15:18 ` Paolo Bonzini
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=20141217193626.GA3082@potion.brq.redhat.com \
--to=rkrcmar@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=lcapitulino@redhat.com \
--cc=mtosatti@redhat.com \
--cc=pbonzini@redhat.com \
--cc=riel@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 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.