[Intel-wired-lan] [PATCH next-queue v1 0/3] igc: Add support for multiple TX tstamp requests

Vinicius Costa Gomes vinicius.gomes at intel.com
Tue Feb 28 05:45:31 UTC 2023


Hi,

Intel I225 and I226 have 4 sets of registers used to store the result
of transmission timestamp requests, until now only one those sets was
used.

Add support for using those extra registers, so the driver is able to
handle multiple applications doing requests at the same time. This
will become more useful when support for PTP multi-domain is more
common.

The series is divided into three parts:

Patch 1 - The idea is to use spinlocks to handle concurrent access to
      the resources, the original version of the patch was proposed
      here:
      
      https://lore.kernel.org/all/20200728233754.65747-5-andre.guedes@intel.com/
      
      It has received some modifications to make it easier to
      integrate with later patches, and some fixes for issues found
      with lockdep.

Patch 2 - Use the 4 registers sets, the idea is simple, we have a pool
      of registers, and we use the first one from the pool that's
      free. Each element of the pool is pre-allocated with the
      register address from each timestamp register set.

Patch 3 - More of an optimization. Use the ptp_aux_work kthread to do
      the work, and also try to do the work "inline" if the timestamp
      is ready already. Suggested by Vladimir Oltean and Kurt
      Kanzenbach.


Evaluation
----------

To do the evaluation I am using a simple application that sends
packets (and waits for the timestamp to be received before sending the
next packet) and takes two measurements:
  1. from the HW timestamp value and the time the application
  retrieves the timestamps (called "HW to Timestamp";
  2. from just before the sendto() being called in the application to
  the time the application retrieves the timestamp (called "Send to
  Timestamp"). I think this measurement is useful to make sure that
  the total time to send a packet and retrieve its timestamp hasn't
  degraded.

(all tests were done for 1M packets, and times are in nanoseconds)

Before:

HW to Timestamp
	min: 9130
	max: 143183
	percentile 99: 10379
	percentile 99.99: 11510
Send to Timestamp
	min: 18431
	max: 196798
	percentile 99: 19937
	percentile 99.99: 26066

After:

HW to Timestamp
	min: 7933
	max: 31934
	percentile 99: 8690
	percentile 99.99: 10598
Send to Timestamp
	min: 17291
	max: 46327
	percentile 99: 18268
	percentile 99.99: 21575

The minimum times are not that different, but we can see a big
improvement in the 'maximum' time.


Andre Guedes (1):
  igc: Fix race condition in PTP tx code

Vinicius Costa Gomes (2):
  igc: Add support for multiple in-flight TX timestamps
  igc: Use ptp->aux_worker to retrieve TX timestamps

 drivers/net/ethernet/intel/igc/igc.h         |  25 ++-
 drivers/net/ethernet/intel/igc/igc_base.h    |   3 +
 drivers/net/ethernet/intel/igc/igc_defines.h |   7 +
 drivers/net/ethernet/intel/igc/igc_main.c    |  58 ++++-
 drivers/net/ethernet/intel/igc/igc_ptp.c     | 225 +++++++++++++------
 drivers/net/ethernet/intel/igc/igc_regs.h    |  12 +
 6 files changed, 240 insertions(+), 90 deletions(-)

-- 
2.39.2



More information about the Intel-wired-lan mailing list