Hi,

I ran a deeper investigation with a simple experiment.

   - I ran my test twice - with and without traffic.
   - I ran it on two different setups (both master and slave are using HW
   timestamping):
      - Master (Banana Pi with embedded KSZ9477 switch) <--> Slave (Banana
      Pi with embedded KSZ9477 switch)
      - Master (Intel NUC) <--> Slave (Banana Pi with embedded KSZ9477
      switch)
   - On each test, I trace after the ptp4l logs (master offset and path
   delay).
   - On each test, I've also added additional info: the difference between
   the current t1-timestamps and the previous t1-timestamps (and the same for
   t2, t3 and t4). Then, if the timestamps are accurate enough (and if there
   is no switches or other devices in the path between master and slave) we
   should see that the difference between <current_t1 - previous_t1> -
   <current_t2 - previous_t2> should be very small (same for t3 and t4).

So now let's have a look at the results.

*First Setup: NUC vs KSZ *
Here I trace after offset and path delay:

*----------- no traffic yet -----------*
ptp4l[2307.831]: master offset       -547 s2 freq  -17060 path delay
 7378
ptp4l[2308.892]: master offset       -869 s2 freq  -17307 path delay
 7378
ptp4l[2309.831]: master offset       -296 s2 freq  -17050 path delay
 7378
ptp4l[2310.832]: master offset         77 s2 freq  -16857 path delay
 7357
ptp4l[2311.832]: master offset        236 s2 freq  -16753 path delay
 7357
ptp4l[2312.832]: master offset        260 s2 freq  -16716 path delay
 7378
ptp4l[2314.080]: master offset        278 s2 freq  -16678 path delay
 7378
ptp4l[2314.898]: master offset         61 s2 freq  -16781 path delay
 7378
ptp4l[2315.832]: master offset        123 s2 freq  -16738 path delay
 7357
ptp4l[2316.923]: master offset        141 s2 freq  -16715 path delay
 7357
ptp4l[2317.832]: master offset         95 s2 freq  -16728 path delay
 7349
ptp4l[2318.832]: master offset        115 s2 freq  -16707 path delay
 7349
ptp4l[2319.832]: master offset       -528 s2 freq  -17080 path delay
 7253
ptp4l[2320.971]: master offset       -832 s2 freq  -17315 path delay
 7253
ptp4l[2321.832]: master offset       -324 s2 freq  -17094 path delay
 7253
ptp4l[2323.004]: master offset       -575 s2 freq  -17277 path delay
 7253
ptp4l[2323.868]: master offset         10 s2 freq  -16984 path delay
 7226
*----------- start traffic  -----------*
ptp4l[2324.832]: master offset        343 s2 freq  -16784 path delay
 7226
ptp4l[2325.832]: master offset        495 s2 freq  -16658 path delay
 7226
ptp4l[2326.832]: master offset       2754 s2 freq  -15253 path delay
 5022
ptp4l[2327.832]: master offset       1291 s2 freq  -15856 path delay
 5022
ptp4l[2328.833]: master offset        431 s2 freq  -16243 path delay
 5022
ptp4l[2329.832]: master offset       1036 s2 freq  -15836 path delay
 5022
ptp4l[2330.832]: master offset       1484 s2 freq  -15464 path delay
 5022
ptp4l[2331.845]: master offset        260 s2 freq  -16050 path delay
 5022
ptp4l[2332.833]: master offset       -396 s2 freq  -16417 path delay
 5022
ptp4l[2333.861]: master offset       -691 s2 freq  -16634 path delay
 5022
ptp4l[2334.832]: master offset        164 s2 freq  -16191 path delay
 4151
ptp4l[2335.877]: master offset       5863 s2 freq  -12755 path delay
875
ptp4l[2336.832]: master offset       2143 s2 freq  -14401 path delay
875
ptp4l[2337.832]: master offset       -165 s2 freq  -15570 path delay
875
ptp4l[2338.832]: master offset      -1295 s2 freq  -16265 path delay
875
ptp4l[2339.832]: master offset       3157 s2 freq  -13724 path delay
875
ptp4l[2340.833]: master offset       4187 s2 freq  -12792 path delay
875
ptp4l[2341.832]: master offset        248 s2 freq  -14735 path delay
875
ptp4l[2342.832]: master offset       2175 s2 freq  -13555 path delay
875
ptp4l[2343.987]: master offset       -951 s2 freq  -15212 path delay
875
ptp4l[2344.832]: master offset      -1805 s2 freq  -15819 path delay
875
ptp4l[2345.832]: master offset       1465 s2 freq  -14039 path delay
850

Let's summarize what we see:

   - Even with no traffic the offset correction is not so good (with HW
   timestaming I would expect to get sub 100 nsec offsets).
   - When traffic starts, path delays change (no switch is in between
   master and slave) and offsets are getting much bigger.

Here in the logs below, we are still with the same setup (NUC vs KSZ), but
now I measure the difference between <current_t1 - previous_t1> -
<current_t2 - previous_t2>, which should be with small jitter, *but it's
NOT* (and I measure the same for t3 and t4).

diff_t1t2_err(23), diff_t3t4_err(-151)
diff_t1t2_err(7), diff_t3t4_err(127)
diff_t1t2_err(30), diff_t3t4_err(-1157)
diff_t1t2_err(884), diff_t3t4_err(-749)
diff_t1t2_err(-277), diff_t3t4_err(1059)
diff_t1t2_err(450), diff_t3t4_err(-301)
diff_t1t2_err(-781), diff_t3t4_err(-450)
diff_t1t2_err(462), diff_t3t4_err(-25)
diff_t1t2_err(-1036), diff_t3t4_err(697)
diff_t1t2_err(-129), diff_t3t4_err(885)
diff_t1t2_err(493), diff_t3t4_err(-1243)
diff_t1t2_err(0), diff_t3t4_err(1030)
diff_t1t2_err(879), diff_t3t4_err(-1959)
diff_t1t2_err(-445), diff_t3t4_err(603)
diff_t1t2_err(320), diff_t3t4_err(-298)
diff_t1t2_err(86), diff_t3t4_err(969)
diff_t1t2_err(-1061), diff_t3t4_err(736)
diff_t1t2_err(625), diff_t3t4_err(-1494)
diff_t1t2_err(326), diff_t3t4_err(-269)
diff_t1t2_err(82), diff_t3t4_err(1847)
diff_t1t2_err(-838), diff_t3t4_err(315)
diff_t1t2_err(-626), diff_t3t4_err(-1781)
diff_t1t2_err(1500), diff_t3t4_err(-593)
diff_t1t2_err(85), diff_t3t4_err(97)
diff_t1t2_err(-1466), diff_t3t4_err(2093)
diff_t1t2_err(658), diff_t3t4_err(-556)
diff_t1t2_err(-1320), diff_t3t4_err(1614)
diff_t1t2_err(1315), diff_t3t4_err(-2557)
diff_t1t2_err(0), diff_t3t4_err(944)
diff_t1t2_err(0), diff_t3t4_err(-1255)
diff_t1t2_err(0), diff_t3t4_err(799)
diff_t1t2_err(901), diff_t3t4_err(-1219)
diff_t1t2_err(-1843), diff_t3t4_err(2344)
diff_t1t2_err(432), diff_t3t4_err(-941)
diff_t1t2_err(-320), diff_t3t4_err(-199)
diff_t1t2_err(376), diff_t3t4_err(1095)
diff_t1t2_err(0), diff_t3t4_err(-358)
diff_t1t2_err(1308), diff_t3t4_err(-2081)
diff_t1t2_err(118), diff_t3t4_err(556)
diff_t1t2_err(0), diff_t3t4_err(389)
diff_t1t2_err(-485), diff_t3t4_err(-154)
diff_t1t2_err(-902), diff_t3t4_err(986)
diff_t1t2_err(793), diff_t3t4_err(-200)
diff_t1t2_err(349), diff_t3t4_err(-553)
diff_t1t2_err(-1861), diff_t3t4_err(1571)

We can see here huge jitters. It can reach above 2 usec.

*Second Setup: KSZ vs KSZ *
Here I trace after offset and path delay:

*----------- no traffic yet -----------*
ptp4l[3343.167]: master offset         62 s2 freq  -16440 path delay
 22
ptp4l[3344.167]: master offset         71 s2 freq  -16428 path delay
 22
ptp4l[3345.167]: master offset         75 s2 freq  -16419 path delay
 22
ptp4l[3346.167]: master offset         61 s2 freq  -16419 path delay
 22
ptp4l[3347.167]: master offset         49 s2 freq  -16421 path delay
 22
ptp4l[3348.167]: master offset         30 s2 freq  -16427 path delay
 22
ptp4l[3349.167]: master offset        -30 s2 freq  -16459 path delay
 22
ptp4l[3350.167]: master offset        -10 s2 freq  -16451 path delay
 22
ptp4l[3351.167]: master offset          9 s2 freq  -16441 path delay
 22
ptp4l[3352.167]: master offset         19 s2 freq  -16434 path delay
 22
ptp4l[3353.168]: master offset         13 s2 freq  -16436 path delay
 22
ptp4l[3354.167]: master offset         17 s2 freq  -16432 path delay
 22
ptp4l[3355.168]: master offset          9 s2 freq  -16435 path delay
 22
ptp4l[3356.170]: master offset          5 s2 freq  -16436 path delay
 22
*----------- start traffic  -----------*


ptp4l[3357.168]: master offset        -37 s2 freq  -16461 path delay
 22
ptp4l[3358.168]: master offset        -40 s2 freq  -16467 path delay
 22
ptp4l[3359.168]: master offset        -22 s2 freq  -16459 path delay
 22
ptp4l[3360.168]: master offset        -10 s2 freq  -16455 path delay
 22
ptp4l[3361.168]: master offset       -114 s2 freq  -16517 path delay
 22
ptp4l[3362.268]: master offset       -165 s2 freq  -16560 path delay
 22
ptp4l[3363.168]: master offset       -177 s2 freq  -16583 path delay
 22
ptp4l[3364.168]: master offset       -161 s2 freq  -16592 path delay
 22
ptp4l[3365.168]: master offset       -129 s2 freq  -16588 path delay
 22
ptp4l[3366.168]: master offset       -109 s2 freq  -16589 path delay
 22
ptp4l[3367.169]: master offset        -56 s2 freq  -16568 path delay
 22
ptp4l[3368.168]: master offset         73 s2 freq  -16497 path delay
 22
ptp4l[3369.180]: master offset         18 s2 freq  -16523 path delay
 22
ptp4l[3370.169]: master offset        -27 s2 freq  -16548 path delay
 22
ptp4l[3371.169]: master offset        -47 s2 freq  -16562 path delay
 22
ptp4l[3372.169]: master offset        -53 s2 freq  -16570 path delay
 22
ptp4l[3373.169]: master offset          5 s2 freq  -16542 path delay
 22
ptp4l[3374.169]: master offset        -21 s2 freq  -16556 path delay
 22
ptp4l[3375.169]: master offset        -31 s2 freq  -16564 path delay
 22

Let's summarize what we see:

   - Even with heavy traffic, path delay is stable and the offsets are
   almost in the sub 100-150 nsec units.

Here in the logs below, we are still with the same setup (KSZ vs KSZ), but
now I measure the difference between <current_t1 - previous_t1> -
<current_t2 - previous_t2>, which should be with small jitter, but it's NOT
(and I measure the same for t3 and t4).

diff_t1t2_err(-3), diff_t3t4_err(4)
diff_t1t2_err(2), diff_t3t4_err(3)
diff_t1t2_err(0), diff_t3t4_err(1)
diff_t1t2_err(-7), diff_t3t4_err(-1)
diff_t1t2_err(11), diff_t3t4_err(-4)
diff_t1t2_err(14), diff_t3t4_err(-10)
diff_t1t2_err(-1), diff_t3t4_err(-3)
diff_t1t2_err(-5), diff_t3t4_err(-4)
diff_t1t2_err(0), diff_t3t4_err(4)
diff_t1t2_err(5), diff_t3t4_err(-5)
diff_t1t2_err(8), diff_t3t4_err(-4)
diff_t1t2_err(-23), diff_t3t4_err(24)
diff_t1t2_err(-7), diff_t3t4_err(11)
diff_t1t2_err(0), diff_t3t4_err(-3)
diff_t1t2_err(-1), diff_t3t4_err(-7)
diff_t1t2_err(20), diff_t3t4_err(-13)
diff_t1t2_err(-3), diff_t3t4_err(0)
diff_t1t2_err(5), diff_t3t4_err(-2)
diff_t1t2_err(-9), diff_t3t4_err(6)
diff_t1t2_err(-3), diff_t3t4_err(0)
diff_t1t2_err(2), diff_t3t4_err(0)
diff_t1t2_err(9), diff_t3t4_err(-8)
diff_t1t2_err(3), diff_t3t4_err(0)
diff_t1t2_err(2), diff_t3t4_err(-11)
diff_t1t2_err(11), diff_t3t4_err(-4)
diff_t1t2_err(-5), diff_t3t4_err(2)
diff_t1t2_err(-8), diff_t3t4_err(12)
diff_t1t2_err(-2), diff_t3t4_err(6)
diff_t1t2_err(8), diff_t3t4_err(-9)
diff_t1t2_err(-1), diff_t3t4_err(-9)

As we can see the jitter is very low (sub 50 nsec).

*Test results:*

   - In the KSZ <--> KSZ test, the path delay and offsets were very small
   (path delay stable, offsets are below 100 nsec).
   - In the NUC <--> KSZ test, the path delay and offsets were very high
   (path delay veray between 7.5 usec to <1 usec. offsets can reach up to 5 or
   6 usec).

*Conclusions:*
I guess it's something with the NUC :)

*Question:*
Are you familiar with a PTP HW issue with Intel NUC or maybe some driver
issue ?

Here is a bit more details:

uname -r

4.15.0-144-generic


ethtool -i enp0s25

driver: e1000e
version: 3.2.6-k
firmware-version: 0.2-4
expansion-rom-version:
bus-info: 0000:00:19.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no


ethtool -T enp0s25

Time stamping parameters for enp0s25:
Capabilities:
hardware-transmit     (SOF_TIMESTAMPING_TX_HARDWARE)
software-transmit     (SOF_TIMESTAMPING_TX_SOFTWARE)
hardware-receive      (SOF_TIMESTAMPING_RX_HARDWARE)
software-receive      (SOF_TIMESTAMPING_RX_SOFTWARE)
software-system-clock (SOF_TIMESTAMPING_SOFTWARE)
hardware-raw-clock    (SOF_TIMESTAMPING_RAW_HARDWARE)
PTP Hardware Clock: 0
Hardware Transmit Timestamp Modes:
off                   (HWTSTAMP_TX_OFF)
on                    (HWTSTAMP_TX_ON)
Hardware Receive Filter Modes:
none                  (HWTSTAMP_FILTER_NONE)
all                   (HWTSTAMP_FILTER_ALL)
ptpv1-l4-sync         (HWTSTAMP_FILTER_PTP_V1_L4_SYNC)
ptpv1-l4-delay-req    (HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ)
ptpv2-l4-sync         (HWTSTAMP_FILTER_PTP_V2_L4_SYNC)
ptpv2-l4-delay-req    (HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ)
ptpv2-l2-sync         (HWTSTAMP_FILTER_PTP_V2_L2_SYNC)
ptpv2-l2-delay-req    (HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ)
ptpv2-event           (HWTSTAMP_FILTER_PTP_V2_EVENT)
ptpv2-sync            (HWTSTAMP_FILTER_PTP_V2_SYNC)
ptpv2-delay-req       (HWTSTAMP_FILTER_PTP_V2_DELAY_REQ)

Thanks,
Joseph

On Sat, Jun 5, 2021 at 11:52 PM Joseph Matan <joseph.matan...@gmail.com>
wrote:

> Hi Richard,
>
> First, my setup description was wrong, so please let me update it:
>
> Master <--> Slave (with embedded KSZ switch)
>
>    - Master is using HW timestamps.
>    - Slave has an embedded ptp switch (KSZ9477) which provides the Slave
>    device HW timestamps.
>
> 1. Is your answer still valid after my setup description update ?
> 2. To use TC, do I need to run both master and slave in P2P mode ?
>
> Thanks,
> Joseph
>
> On Fri, Jun 4, 2021 at 4:27 PM Richard Cochran <richardcoch...@gmail.com>
> wrote:
>
>> On Thu, Jun 03, 2021 at 10:17:41PM +0300, Joseph Matan wrote:
>> > When there is only ptp traffic, the path delay is almost constant (very
>> low
>> > jitter).
>> > The weird thing (to me anyway...) is that under heavy traffic the path
>> > delay is getting smaller - how does that make sense?
>>
>> Because the network traffic affects the residence time in the switch.
>>
>> > If the switch is not ptp-aware I was expecting the path delay to get
>> bigger.
>>
>> A TC will add the (still variable) residence time into the correction
>> field, and as a result the path delay will remain constant.
>>
>> HTH,
>> Richard
>>
>
_______________________________________________
Linuxptp-users mailing list
Linuxptp-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-users

Reply via email to