2018-05-18 16:55+0100, David Vrabel: > Since 4.10, commit 8003c9ae204e (KVM: LAPIC: add APIC Timer > periodic/oneshot mode VMX preemption timer support), guests using > periodic LAPIC timers (such as FreeBSD 8.4) would see their timers > drift significantly over time. > > Differences in the underlying clocks and numerical errors means the > periods of the two timers (hv and sw) are not the same. This > difference will accumulate with every expiry resulting in a large > error between the hv and sw timer. > > This means the sw timer may be running slow when compared to the hv > timer. When the timer is switched from hv to sw, the now active sw > timer will expire late. The guest VCPU is reentered and it switches to > using the hv timer. This timer catches up, injecting multiple IRQs > into the guest (of which the guest only sees one as it does not get to > run until the hv timer has caught up) and thus the guest's timer rate > is low (and becomes increasing slower over time as the sw timer lags > further and further behind). > > I believe a similar problem would occur if the hv timer is the slower > one, but I have not observed this. > > Fix this by synchronizing the deadlines for both timers to the same > time source on every tick. This prevents the errors from accumulating. > > Fixes: 8003c9ae204e21204e49816c5ea629357e283b06 > Cc: Wanpeng Li <wanpeng.li@xxxxxxxxxxx> > Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxxx> > --- > Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx> > Cc: "Radim Krčmář" <rkrcmar@xxxxxxxxxx> > --- Added Cc stable and applied, thanks.