Re: [patch 4/5] PTP: add PTP_SYS_OFFSET emulation via cross timestamps infrastructure

From: Marcelo Tosatti
Date: Tue Jan 24 2017 - 06:24:15 EST


On Mon, Jan 23, 2017 at 08:44:53PM +0100, Paolo Bonzini wrote:
>
>
> On 23/01/2017 19:44, Richard Cochran wrote:
> >> device clock |sample1P,deviceclock| |sample2P,deviceclock|
> >> -------------------------------------------------------------
> >> realtime clock |sample1P,realtimeclock| |sample2P,realtimeclock|
> >
> > Are |sample1P,deviceclock| and |sample1P,realtimeclock| taken at the
> > same instant in time?
> >
> > If not, then calling that PTP_SYS_OFFSET_PRECISE is misleading.
>
> Yes, of course. This was added for the e1000e drivers first, but chrony
> isn't using it yet. In the case of KVM, the same host TSC value is used
> to produce the host clock and (converted to guest TSC) the guest clock.
>
> If you just implement getclock64 the PTP_SYS_OFFSET output:
>
> device clock | |sample2| |sample4| |sample6| ...
> -------------------------------------------------------------
> realtime clock |sample1| |sample3| |sample5|
>
> has a very large distance between samples on the same line (about 1 us),
> and I think it is too noisy for userspace to make sense of the output.
>
> So, on one hand chrony only uses the mean of realtime clock samples, in
> an attempt to produce precise cross timestamps. On the other hand, even
> though KVM could produce those natively, chrony does not support
> PTP_SYS_OFFSET_PRECISE.
>
> Marcelo's patch then produces fake realtime clock samples that, however,
> let chrony derive the cross timestamps that KVM produced in the first
> place. The outcome is really great accuracy compared to previous
> versions of the patch, often just +/- 2 or 3 nanoseconds.
>
> Paolo

Nope, the clock offset is the value inside square brackets. The +/-
is the error. So the clock offset is actually up to 680ns.

Yes for greater accuracy userspace should implement _PRECISE
support.

I'm resending v5 with native support for ->gettime and
->getcrosststamps.