On 12/16/2021 9:04 AM, Martin Pecka wrote: > Hi PTP users. > > We bought a few PCIe network cards for testing, all with Intel chipsets > and supposedly supporting PTP. I succeeded running HW-stamping PTP L2 > client on a card with I350 chipset and igb driver. > > However, two of the cards have a problem. The symptoms are the same, > although one is 1GbE with Intel 82576 chipset running igb driver and the > other is 10GbE with Intel X540 running ixgbe driver. > > The timestamping capabilities for both look like this: >
What version of the kernel and drivers are you using? > $ ethtool -T eth2 > Time stamping parameters for eth2: > 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: 1 > Hardware Transmit Timestamp Modes: > off (HWTSTAMP_TX_OFF) > on (HWTSTAMP_TX_ON) > Hardware Receive Filter Modes: > none (HWTSTAMP_FILTER_NONE) > ptpv1-l4-sync (HWTSTAMP_FILTER_PTP_V1_L4_SYNC) > ptpv1-l4-delay-req (HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ) > ptpv2-event (HWTSTAMP_FILTER_PTP_V2_EVENT) > > Most importantly, ptpv2-event is there, as well as HW stamping and HW > clock. So PTP should be satisfied, shouldn't it? But the synchronization > never happens. This is what I see running the client: > > $ sudo /usr/local/sbin/ptp4l -H -i eth2 -f > /etc/linuxptp/automotive-slave.cfg --step_threshold=0.001 -m -l7 | grep > -v config > ptp4l[1127.941]: interface index 5 is up > ptp4l[1127.941]: selected /dev/ptp1 as PTP clock > ptp4l[1127.941]: section item /var/run/ptp4l.announceReceiptTimeout now 0 > ptp4l[1127.941]: section item /var/run/ptp4l.delay_mechanism now 0 > ptp4l[1127.941]: section item /var/run/ptp4l.network_transport now 0 > ptp4l[1127.941]: section item /var/run/ptp4l.delay_filter_length now 1 > ptp4l[1127.941]: section item /var/run/ptp4lro.announceReceiptTimeout now 0 > ptp4l[1127.941]: section item /var/run/ptp4lro.delay_mechanism now 0 > ptp4l[1127.941]: section item /var/run/ptp4lro.network_transport now 0 > ptp4l[1127.941]: section item /var/run/ptp4lro.delay_filter_length now 1 > ptp4l[1127.942]: PI servo: sync interval 1.000 kp 0.700 ki 0.300000 > ptp4l[1128.000]: port 1 (eth2): INITIALIZING to SLAVE on INIT_COMPLETE > ptp4l[1128.001]: port 0 (/var/run/ptp4l): INITIALIZING to LISTENING on > INIT_COMPLETE > ptp4l[1128.002]: port 0 (/var/run/ptp4lro): INITIALIZING to LISTENING on > INIT_COMPLETE > ptp4l[1128.002]: port 1 (eth2): received link status notification > ptp4l[1128.002]: interface index 5 is up > ptp4l[1128.532]: port 1 (eth2): received SYNC without timestamp > ptp4l[1129.097]: port 1 (eth2): delay timeout > ptp4l[1129.532]: port 1 (eth2): received SYNC without timestamp > ptp4l[1129.532]: port 1 (eth2): have FOLLOW_UP 59819, expecting SYNC but > got FOLLOW_UP 59820, dropping So this is the X540 which is receiving the frames? The "SYNC without timestamp" means that the packet is received without a timestamp. Could you check the ethtool stats output and see if rx_hwtstamp_cleared is incrementing? Another possible check would be to use the test utility testptp and verify that the network device clock is actually incrementing. I believe "SYNC without timestamp" can occur if the reported timestamp is 0? > ptp4l[1130.282]: port 1 (eth2): delay timeout > ptp4l[1130.468]: port 1 (eth2): delay timeout > ptp4l[1130.532]: port 1 (eth2): received SYNC without timestamp > ptp4l[1130.532]: port 1 (eth2): have FOLLOW_UP 59820, expecting SYNC but > got FOLLOW_UP 59821, dropping > ptp4l[1130.866]: port 1 (eth2): delay timeout > ptp4l[1131.532]: port 1 (eth2): received SYNC without timestamp > ptp4l[1131.533]: port 1 (eth2): have FOLLOW_UP 59821, expecting SYNC but > got FOLLOW_UP 59822, dropping > ptp4l[1132.269]: port 1 (eth2): delay timeout > ptp4l[1132.532]: port 1 (eth2): received SYNC without timestamp > ptp4l[1132.533]: port 1 (eth2): have FOLLOW_UP 59822, expecting SYNC but > got FOLLOW_UP 59823, dropping > ptp4l[1132.770]: port 1 (eth2): delay timeout > > So SYNC packets are coming in, FOLLOW_UP packets are coming in (I see > them in wireshark), 2-step sync is on, yet ptp still isn't working. Why > is that? As I said, if I just swap the card in the client for another > one with I350 chipset, it works. So the master should be okay. The two > computers are directly connected via a cable, no switch in between them. > > I'm testing this with both server and client running the master branch > of linuxptp from sourceforge. > > To avoid out-of-order packets to be the source of the above mismatch, I > also decreased the number of RX queues to 1: > The root cause is likely that the packets are being received but not timestamped. So I don't think out of order packets is the problem. > $ sudo ethtool -L eth2 combined 1 > $ ethtool -l eth2 > Channel parameters for eth2: > Pre-set maximums: > RX: 0 > TX: 0 > Other: 1 > Combined: 8 > Current hardware settings: > RX: 0 > TX: 0 > Other: 1 > Combined: 1 > > That did not change anything. > > These are the master and slave configs: > > $ cat /etc/linuxptp/automotive-master.cfg > [global] > gmCapable 1 > priority1 248 > priority2 248 > logSyncInterval -3 > syncReceiptTimeout 3 > neighborPropDelayThresh 800 > min_neighbor_prop_delay -20000000 > assume_two_step 1 > path_trace_enabled 1 > follow_up_info 1 > transportSpecific 0x1 > ptp_dst_mac 01:80:C2:00:00:0E > network_transport L2 > delay_mechanism E2E > BMCA noop > serverOnly 1 > inhibit_announce 1 > asCapable true > inhibit_delay_req 1 > > $ cat /etc/linuxptp/automotive-slave.cfg > [global] > gmCapable 1 > priority1 248 > priority2 248 > logSyncInterval -3 > syncReceiptTimeout 3 > neighborPropDelayThresh 800 > min_neighbor_prop_delay -20000000 > assume_two_step 1 > path_trace_enabled 1 > follow_up_info 1 > transportSpecific 0x1 > ptp_dst_mac 01:80:C2:00:00:0E > network_transport L2 > delay_mechanism E2E > BMCA noop > clientOnly 1 > inhibit_announce 1 > asCapable true > ignore_source_id 1 > step_threshold 1 > operLogSyncInterval 0 > operLogPdelayReqInterval 2 > msg_interval_request 1 > servo_offset_threshold 30 > servo_num_offset_values 10 > hwts_filter normal > Could you try layer 3 UDP packets instead of L2? > I'm a bit clueless here. I checked by adding a log message that the > ioctl setting HWTSTAMP_FILTER_PTP_V2_EVENT does not error out. So > everything seems okay, yet the sync does not work. > > Thank you for any help or hint. > > Martin Pecka > Thanks, Jake _______________________________________________ Linuxptp-users mailing list Linuxptp-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-users