Re: [patch 3/3] PTP: add kvm PTP driver

Marcelo Tosatti
2017-01-16T20:02:06Z

On Mon, Jan 16, 2017 at 05:47:15PM -0200, Marcelo Tosatti wrote:
> On Mon, Jan 16, 2017 at 05:36:55PM -0200, Marcelo Tosatti wrote:
> > On Mon, Jan 16, 2017 at 07:01:48PM +0100, Radim Krcmar wrote:
> > > > Sorry the clock difference is 10ns now. So the guest clock is off by _10 ns_
> > > > of the host clock.
> > >
> > > That is pretty good.
> >
> > Yes.
> >
> > > > You are suggesting to use getcrosststamp instead, to drop the (rdtsc() -
> > > > guest_tsc) part ?
> > >
> > > Yes, it results in simpler code, doesn't create dependency on the
> > > dreaded kvmclock, and is the best we can currently do wrt. precision.
>
> Even if the PHC sync algorithm manages to detect that the clock read is
> incorrect, consider the following:
>
> Variability in the VM-entry code path, such as cache effects and interrupts would cause
> certain readings to be longer then the average (assuming an average
> where cache is hot).
>
> Using the TSC removes this variability, which can be large in case of
> non realtime guests, where you do:
>
> 1. kvm_hypercall.
> 2. read host realtime clock.
> 3. schedule out qemu-kvm vcpu.
> 4. schedule in qemu-kvm vcpu.
>
> So using the delta between read host realtime and
> ->gettime64 increases precision and decreases variability.
>
> > Sorry, unless i am misunderstanding how this works, it'll get the guest clock
> > 2us behind, which is something not wanted.
> >
> > Miroslav, if ->gettime64 returns the host realtime at 2us in the past,
> > this means Chrony will sync the guest clock to
> >
> > host realtime - 2us
> >
> > Is that correct?

Drop the offset correction and the following happens:

Clock offset seems to vary between negative hundreds of ns:

210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
#* PHC0 0 3 377 11 -131ns[ -309ns] +/-
3ns

And positive:

210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
#* PHC0 0 3 377 4 +79ns[ +155ns] +/-
3ns