On Wed, 25 Dec 2019 at 20:10, Richard Cochran <[email protected]> wrote:
>
> When synchronizing a PHC to the Linux system clock (CLOCK_REALTIME),
> the phc2sys uses the sysoff method, reversing the master and slave
> roles.
>
> The offset between a master clock and a slave clock is given by
>
> offset = slave_ts - master_ts,
>
> and the call to sysoff_measure() provides the 'offset' and
> 'slave_timestamp' values. The needed local time stamp on the 'master'
> is given by
>
> master_ts = slave_ts - offset,
>
> but the code calcuates
>
> master_ts = slave_ts + offset.
>
> When passed to the servo, the local time stamp is used to estimate the
> frequency offset between the two clocks before starting the main
> synchronization loop. The effect of the bug may be seen with a simple
> test. Here is a sample output with the existing code.
>
> $ sudo testptp -d /dev/ptp1 -f 62400000
> frequency adjustment okay
> $ sudo ./phc2sys -m -q -c eth6 -s CLOCK_REALTIME -O0
> phc2sys[90221.239]: eth6 sys offset 191001318 s0 freq -62400000 delay
> 5547
> phc2sys[90222.239]: eth6 sys offset 253380897 s1 freq +8265884 delay
> 5507
> phc2sys[90223.239]: eth6 sys offset -8301685 s2 freq -35801 delay
> 5487
> phc2sys[90224.239]: eth6 sys offset -8297136 s2 freq -2521757 delay
> 5531
> phc2sys[90225.239]: eth6 sys offset -5806117 s2 freq -2519879 delay
> 5542
> phc2sys[90226.239]: eth6 sys offset -3317009 s2 freq -1772606 delay
> 5495
> phc2sys[90227.240]: eth6 sys offset -1575231 s2 freq -1025931 delay
> 5505
> phc2sys[90228.240]: eth6 sys offset -580249 s2 freq -503518 delay
> 5524
> phc2sys[90229.240]: eth6 sys offset -107770 s2 freq -205114 delay
> 5519
> phc2sys[90230.240]: eth6 sys offset 66298 s2 freq -63377 delay
> 5490
> phc2sys[90230.881]: eth6 sys offset 86942 s2 freq -22844 delay
> 5495
>
> And this is the output with the bug fix in place.
>
> $ sudo testptp -d /dev/ptp1 -f 62400000
> frequency adjustment okay
> $ sudo ./phc2sys -m -q -c eth6 -s CLOCK_REALTIME -O0
> phc2sys[90365.624]: eth6 sys offset 311912675 s0 freq -62400000 delay
> 5490
> phc2sys[90366.624]: eth6 sys offset 374292766 s1 freq -31098 delay 5642
> phc2sys[90367.624]: eth6 sys offset -3825 s2 freq -34923 delay 5617
> phc2sys[90368.625]: eth6 sys offset 6 s2 freq -32240 delay 5564
> phc2sys[90369.625]: eth6 sys offset 1241 s2 freq -31003 delay 5605
> phc2sys[90370.625]: eth6 sys offset 1131 s2 freq -30741 delay 5600
> phc2sys[90371.625]: eth6 sys offset 801 s2 freq -30732 delay 5621
> phc2sys[90372.625]: eth6 sys offset 458 s2 freq -30834 delay 5640
> phc2sys[90373.626]: eth6 sys offset 186 s2 freq -30969 delay 5598
> phc2sys[90374.626]: eth6 sys offset 134 s2 freq -30965 delay 5599
> phc2sys[90375.626]: eth6 sys offset 43 s2 freq -31016 delay 5595
> phc2sys[90375.681]: eth6 sys offset -32 s2 freq -31078 delay 5541
>
> This patch fixes the issue by correcting the calculation of the local
> time stamp value.
>
> Signed-off-by: Richard Cochran <[email protected]>
> Reported-by: Cliff Spradlin <[email protected]>
> Tested-by: Vladimir Oltean <[email protected]>
> ---
I'm not sure if it's a widespread convention in linuxptp or not, but
it doesn't hurt:
Fixes: 8142da41b61f ("phc2sys: Use reversed sysoff when synchronizing
to system clock.")
Thanks to both of you, and to Miroslav for the sysoff kernel mechanisms.
-Vladimir
_______________________________________________
Linuxptp-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel