All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rahul Rameshbabu <rrameshbabu@nvidia.com>
To: "Keller, Jacob E" <jacob.e.keller@intel.com>
Cc: "Drewek, Wojciech" <wojciech.drewek@intel.com>,
	"Kitszel, Przemyslaw" <przemyslaw.kitszel@intel.com>,
	"Polchlopek,  Mateusz" <mateusz.polchlopek@intel.com>,
	"Nguyen, Anthony L" <anthony.l.nguyen@intel.com>,
	"horms@kernel.org" <horms@kernel.org>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"intel-wired-lan@lists.osuosl.org"
	<intel-wired-lan@lists.osuosl.org>
Subject: Re: [Intel-wired-lan] [PATCH iwl-next v5 08/12] iavf: periodically cache PHC time
Date: Thu, 25 Apr 2024 10:10:56 -0700	[thread overview]
Message-ID: <87wmol1i4j.fsf@nvidia.com> (raw)
In-Reply-To: <CO1PR11MB5089937991BD0CAD0FA21859D6172@CO1PR11MB5089.namprd11.prod.outlook.com>

On Thu, 25 Apr, 2024 16:28:22 +0000 "Keller, Jacob E" <jacob.e.keller@intel.com> wrote:
>> -----Original Message-----
>> From: Kitszel, Przemyslaw <przemyslaw.kitszel@intel.com>
>> Sent: Thursday, April 25, 2024 3:52 AM
>> To: Keller, Jacob E <jacob.e.keller@intel.com>; Polchlopek, Mateusz
>> <mateusz.polchlopek@intel.com>; Rahul Rameshbabu
>> <rrameshbabu@nvidia.com>
>> Cc: intel-wired-lan@lists.osuosl.org; netdev@vger.kernel.org; horms@kernel.org;
>> Nguyen, Anthony L <anthony.l.nguyen@intel.com>; Drewek, Wojciech
>> <wojciech.drewek@intel.com>
>> Subject: Re: [Intel-wired-lan] [PATCH iwl-next v5 08/12] iavf: periodically cache
>> PHC time
>> 
>> On 4/25/24 00:03, Keller, Jacob E wrote:
>> >
>> >
>> >> -----Original Message-----
>> >> From: Polchlopek, Mateusz <mateusz.polchlopek@intel.com>
>> >> Sent: Monday, April 22, 2024 2:23 AM
>> >> To: Rahul Rameshbabu <rrameshbabu@nvidia.com>
>> >> Cc: intel-wired-lan@lists.osuosl.org; netdev@vger.kernel.org;
>> horms@kernel.org;
>> >> Nguyen, Anthony L <anthony.l.nguyen@intel.com>; Keller, Jacob E
>> >> <jacob.e.keller@intel.com>; Drewek, Wojciech <wojciech.drewek@intel.com>
>> >> Subject: Re: [Intel-wired-lan] [PATCH iwl-next v5 08/12] iavf: periodically cache
>> >> PHC time
>> >>
>> >>
>> >>
>> >> On 4/18/2024 9:51 PM, Rahul Rameshbabu wrote:
>> >>> On Thu, 18 Apr, 2024 01:24:56 -0400 Mateusz Polchlopek
>> >> <mateusz.polchlopek@intel.com> wrote:
>> >>>> From: Jacob Keller <jacob.e.keller@intel.com>
>> >>>>
>> >>>> The Rx timestamps reported by hardware may only have 32 bits of storage
>> >>>> for nanosecond time. These timestamps cannot be directly reported to the
>> >>>> Linux stack, as it expects 64bits of time.
>> >>>>
>> >>>> To handle this, the timestamps must be extended using an algorithm that
>> >>>> calculates the corrected 64bit timestamp by comparison between the PHC
>> >>>> time and the timestamp. This algorithm requires the PHC time to be
>> >>>> captured within ~2 seconds of when the timestamp was captured.
>> >>>>
>> >>>> Instead of trying to read the PHC time in the Rx hotpath, the algorithm
>> >>>> relies on a cached value that is periodically updated.
>> >>>>
>> >>>> Keep this cached time up to date by using the PTP .do_aux_work kthread
>> >>>> function.
>> >>>
>> >>> Seems reasonable.
>> >>>
>> >>>>
>> >>>> The iavf_ptp_do_aux_work will reschedule itself about twice a second,
>> >>>> and will check whether or not the cached PTP time needs to be updated.
>> >>>> If so, it issues a VIRTCHNL_OP_1588_PTP_GET_TIME to request the time
>> >>>> from the PF. The jitter and latency involved with this command aren't
>> >>>> important, because the cached time just needs to be kept up to date
>> >>>> within about ~2 seconds.
>> >>>>
>> >>>> Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com>
>> >>>> Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
>> >>>> Co-developed-by: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
>> >>>> Signed-off-by: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
>> >>>> ---
>> >>>>    drivers/net/ethernet/intel/iavf/iavf_ptp.c | 52
>> ++++++++++++++++++++++
>> >>>>    drivers/net/ethernet/intel/iavf/iavf_ptp.h |  1 +
>> >>>>    2 files changed, 53 insertions(+)
>> >>>>
>> >>>> diff --git a/drivers/net/ethernet/intel/iavf/iavf_ptp.c
>> >> b/drivers/net/ethernet/intel/iavf/iavf_ptp.c
>> >>> <snip>
>> >>>> +/**
>> >>>> + * iavf_ptp_do_aux_work - Perform periodic work required for PTP support
>> >>>> + * @ptp: PTP clock info structure
>> >>>> + *
>> >>>> + * Handler to take care of periodic work required for PTP operation. This
>> >>>> + * includes the following tasks:
>> >>>> + *
>> >>>> + *   1) updating cached_phc_time
>> >>>> + *
>> >>>> + *      cached_phc_time is used by the Tx and Rx timestamp flows in order to
>> >>>> + *      perform timestamp extension, by carefully comparing the timestamp
>> >>>> + *      32bit nanosecond timestamps and determining the corrected 64bit
>> >>>> + *      timestamp value to report to userspace. This algorithm only works if
>> >>>> + *      the cached_phc_time is within ~1 second of the Tx or Rx timestamp
>> >>>> + *      event. This task periodically reads the PHC time and stores it, to
>> >>>> + *      ensure that timestamp extension operates correctly.
>> >>>> + *
>> >>>> + * Returns: time in jiffies until the periodic task should be re-scheduled.
>> >>>> + */
>> >>>> +long iavf_ptp_do_aux_work(struct ptp_clock_info *ptp)
>> >>>> +{
>> >>>> +	struct iavf_adapter *adapter = clock_to_adapter(ptp);
>> >>>> +
>> >>>> +	iavf_ptp_cache_phc_time(adapter);
>> >>>> +
>> >>>> +	/* Check work about twice a second */
>> >>>> +	return msecs_to_jiffies(500);
>> >>>
>> >>> HZ / 2 might be more intuitive?
>> >>>
>> >
>> > I've always found it more intuitive to think in terms of msecs myself, but HZ / 2 is
>> ok if other folks agree.
>> 
>> HZ/2 or HZ/3 as a timer period could be understood without thinking, but
>> the same stands for 400ms. Problems starts when one thinks about it ;)
>> 
>> For me HZ, which could be both literally and colloquially understood as
>> "per second" should not mean 1000ms (just evaluate to).
>> 2Hz is a frequency with half second period, but 2*HZ evaluates to 2000ms
>> which is 4 times more :/
>> 
>
> That’s part of why I switched ice over from using HZ generally to using
> jiffies_to_msec in a lot of cases. It really depends on what you personally find
> intuitive. Those used to seeing and reading HZ may find it easier.
>

Makes sense to stick with the same if ice is using jiffies_to_msec in
general. I, recently, was re-reading the Linux Device Drivers book,
which has a section that elaborates on HZ a bit.

--
Thanks,

Rahul Rameshbabu

WARNING: multiple messages have this Message-ID (diff)
From: Rahul Rameshbabu <rrameshbabu@nvidia.com>
To: "Keller, Jacob E" <jacob.e.keller@intel.com>
Cc: "Kitszel, Przemyslaw" <przemyslaw.kitszel@intel.com>,
	"Polchlopek, Mateusz" <mateusz.polchlopek@intel.com>,
	"intel-wired-lan@lists.osuosl.org"
	<intel-wired-lan@lists.osuosl.org>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"horms@kernel.org" <horms@kernel.org>,
	"Nguyen, Anthony L" <anthony.l.nguyen@intel.com>,
	"Drewek, Wojciech" <wojciech.drewek@intel.com>
Subject: Re: [Intel-wired-lan] [PATCH iwl-next v5 08/12] iavf: periodically cache PHC time
Date: Thu, 25 Apr 2024 10:10:56 -0700	[thread overview]
Message-ID: <87wmol1i4j.fsf@nvidia.com> (raw)
In-Reply-To: <CO1PR11MB5089937991BD0CAD0FA21859D6172@CO1PR11MB5089.namprd11.prod.outlook.com>

On Thu, 25 Apr, 2024 16:28:22 +0000 "Keller, Jacob E" <jacob.e.keller@intel.com> wrote:
>> -----Original Message-----
>> From: Kitszel, Przemyslaw <przemyslaw.kitszel@intel.com>
>> Sent: Thursday, April 25, 2024 3:52 AM
>> To: Keller, Jacob E <jacob.e.keller@intel.com>; Polchlopek, Mateusz
>> <mateusz.polchlopek@intel.com>; Rahul Rameshbabu
>> <rrameshbabu@nvidia.com>
>> Cc: intel-wired-lan@lists.osuosl.org; netdev@vger.kernel.org; horms@kernel.org;
>> Nguyen, Anthony L <anthony.l.nguyen@intel.com>; Drewek, Wojciech
>> <wojciech.drewek@intel.com>
>> Subject: Re: [Intel-wired-lan] [PATCH iwl-next v5 08/12] iavf: periodically cache
>> PHC time
>> 
>> On 4/25/24 00:03, Keller, Jacob E wrote:
>> >
>> >
>> >> -----Original Message-----
>> >> From: Polchlopek, Mateusz <mateusz.polchlopek@intel.com>
>> >> Sent: Monday, April 22, 2024 2:23 AM
>> >> To: Rahul Rameshbabu <rrameshbabu@nvidia.com>
>> >> Cc: intel-wired-lan@lists.osuosl.org; netdev@vger.kernel.org;
>> horms@kernel.org;
>> >> Nguyen, Anthony L <anthony.l.nguyen@intel.com>; Keller, Jacob E
>> >> <jacob.e.keller@intel.com>; Drewek, Wojciech <wojciech.drewek@intel.com>
>> >> Subject: Re: [Intel-wired-lan] [PATCH iwl-next v5 08/12] iavf: periodically cache
>> >> PHC time
>> >>
>> >>
>> >>
>> >> On 4/18/2024 9:51 PM, Rahul Rameshbabu wrote:
>> >>> On Thu, 18 Apr, 2024 01:24:56 -0400 Mateusz Polchlopek
>> >> <mateusz.polchlopek@intel.com> wrote:
>> >>>> From: Jacob Keller <jacob.e.keller@intel.com>
>> >>>>
>> >>>> The Rx timestamps reported by hardware may only have 32 bits of storage
>> >>>> for nanosecond time. These timestamps cannot be directly reported to the
>> >>>> Linux stack, as it expects 64bits of time.
>> >>>>
>> >>>> To handle this, the timestamps must be extended using an algorithm that
>> >>>> calculates the corrected 64bit timestamp by comparison between the PHC
>> >>>> time and the timestamp. This algorithm requires the PHC time to be
>> >>>> captured within ~2 seconds of when the timestamp was captured.
>> >>>>
>> >>>> Instead of trying to read the PHC time in the Rx hotpath, the algorithm
>> >>>> relies on a cached value that is periodically updated.
>> >>>>
>> >>>> Keep this cached time up to date by using the PTP .do_aux_work kthread
>> >>>> function.
>> >>>
>> >>> Seems reasonable.
>> >>>
>> >>>>
>> >>>> The iavf_ptp_do_aux_work will reschedule itself about twice a second,
>> >>>> and will check whether or not the cached PTP time needs to be updated.
>> >>>> If so, it issues a VIRTCHNL_OP_1588_PTP_GET_TIME to request the time
>> >>>> from the PF. The jitter and latency involved with this command aren't
>> >>>> important, because the cached time just needs to be kept up to date
>> >>>> within about ~2 seconds.
>> >>>>
>> >>>> Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com>
>> >>>> Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
>> >>>> Co-developed-by: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
>> >>>> Signed-off-by: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
>> >>>> ---
>> >>>>    drivers/net/ethernet/intel/iavf/iavf_ptp.c | 52
>> ++++++++++++++++++++++
>> >>>>    drivers/net/ethernet/intel/iavf/iavf_ptp.h |  1 +
>> >>>>    2 files changed, 53 insertions(+)
>> >>>>
>> >>>> diff --git a/drivers/net/ethernet/intel/iavf/iavf_ptp.c
>> >> b/drivers/net/ethernet/intel/iavf/iavf_ptp.c
>> >>> <snip>
>> >>>> +/**
>> >>>> + * iavf_ptp_do_aux_work - Perform periodic work required for PTP support
>> >>>> + * @ptp: PTP clock info structure
>> >>>> + *
>> >>>> + * Handler to take care of periodic work required for PTP operation. This
>> >>>> + * includes the following tasks:
>> >>>> + *
>> >>>> + *   1) updating cached_phc_time
>> >>>> + *
>> >>>> + *      cached_phc_time is used by the Tx and Rx timestamp flows in order to
>> >>>> + *      perform timestamp extension, by carefully comparing the timestamp
>> >>>> + *      32bit nanosecond timestamps and determining the corrected 64bit
>> >>>> + *      timestamp value to report to userspace. This algorithm only works if
>> >>>> + *      the cached_phc_time is within ~1 second of the Tx or Rx timestamp
>> >>>> + *      event. This task periodically reads the PHC time and stores it, to
>> >>>> + *      ensure that timestamp extension operates correctly.
>> >>>> + *
>> >>>> + * Returns: time in jiffies until the periodic task should be re-scheduled.
>> >>>> + */
>> >>>> +long iavf_ptp_do_aux_work(struct ptp_clock_info *ptp)
>> >>>> +{
>> >>>> +	struct iavf_adapter *adapter = clock_to_adapter(ptp);
>> >>>> +
>> >>>> +	iavf_ptp_cache_phc_time(adapter);
>> >>>> +
>> >>>> +	/* Check work about twice a second */
>> >>>> +	return msecs_to_jiffies(500);
>> >>>
>> >>> HZ / 2 might be more intuitive?
>> >>>
>> >
>> > I've always found it more intuitive to think in terms of msecs myself, but HZ / 2 is
>> ok if other folks agree.
>> 
>> HZ/2 or HZ/3 as a timer period could be understood without thinking, but
>> the same stands for 400ms. Problems starts when one thinks about it ;)
>> 
>> For me HZ, which could be both literally and colloquially understood as
>> "per second" should not mean 1000ms (just evaluate to).
>> 2Hz is a frequency with half second period, but 2*HZ evaluates to 2000ms
>> which is 4 times more :/
>> 
>
> That’s part of why I switched ice over from using HZ generally to using
> jiffies_to_msec in a lot of cases. It really depends on what you personally find
> intuitive. Those used to seeing and reading HZ may find it easier.
>

Makes sense to stick with the same if ice is using jiffies_to_msec in
general. I, recently, was re-reading the Linux Device Drivers book,
which has a section that elaborates on HZ a bit.

--
Thanks,

Rahul Rameshbabu

  reply	other threads:[~2024-04-25 17:12 UTC|newest]

Thread overview: 84+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-18  5:24 [Intel-wired-lan] [PATCH iwl-next v5 00/12] Add support for Rx timestamping for both ice and iavf drivers Mateusz Polchlopek
2024-04-18  5:24 ` Mateusz Polchlopek
2024-04-18  5:24 ` [Intel-wired-lan] [PATCH iwl-next v5 01/12] virtchnl: add support for enabling PTP on iAVF Mateusz Polchlopek
2024-04-18  5:24   ` Mateusz Polchlopek
2024-04-18 18:49   ` Rahul Rameshbabu
2024-04-18 18:49     ` Rahul Rameshbabu
2024-04-18  5:24 ` [Intel-wired-lan] [PATCH iwl-next v5 02/12] ice: support Rx timestamp on flex descriptor Mateusz Polchlopek
2024-04-18  5:24   ` Mateusz Polchlopek
2024-04-18 18:57   ` Rahul Rameshbabu
2024-04-18 18:57     ` Rahul Rameshbabu
2024-04-22  9:34     ` Mateusz Polchlopek
2024-04-22  9:34       ` Mateusz Polchlopek
2024-04-18  5:24 ` [Intel-wired-lan] [PATCH iwl-next v5 03/12] virtchnl: add enumeration for the rxdid format Mateusz Polchlopek
2024-04-18  5:24   ` Mateusz Polchlopek
2024-04-18 19:05   ` Rahul Rameshbabu
2024-04-18 19:05     ` Rahul Rameshbabu
2024-04-18  5:24 ` [Intel-wired-lan] [PATCH iwl-next v5 04/12] iavf: add support for negotiating flexible RXDID format Mateusz Polchlopek
2024-04-18  5:24   ` Mateusz Polchlopek
2024-04-18 19:11   ` Rahul Rameshbabu
2024-04-18 19:11     ` Rahul Rameshbabu
2024-04-22  9:34     ` Mateusz Polchlopek
2024-04-22  9:34       ` Mateusz Polchlopek
2024-04-18  5:24 ` [Intel-wired-lan] [PATCH iwl-next v5 05/12] iavf: negotiate PTP capabilities Mateusz Polchlopek
2024-04-18  5:24   ` Mateusz Polchlopek
2024-04-18 19:16   ` Rahul Rameshbabu
2024-04-18 19:16     ` Rahul Rameshbabu
2024-04-22  9:33     ` Mateusz Polchlopek
2024-04-22  9:33       ` Mateusz Polchlopek
2024-04-18  5:24 ` [Intel-wired-lan] [PATCH iwl-next v5 06/12] iavf: add initial framework for registering PTP clock Mateusz Polchlopek
2024-04-18  5:24   ` Mateusz Polchlopek
2024-04-18 19:28   ` Rahul Rameshbabu
2024-04-18 19:28     ` Rahul Rameshbabu
2024-04-22  9:29     ` Mateusz Polchlopek
2024-04-22  9:29       ` Mateusz Polchlopek
2024-04-18  5:24 ` [Intel-wired-lan] [PATCH iwl-next v5 07/12] iavf: add support for indirect access to PHC time Mateusz Polchlopek
2024-04-18  5:24   ` Mateusz Polchlopek
2024-04-18 19:43   ` Rahul Rameshbabu
2024-04-18 19:43     ` Rahul Rameshbabu
2024-04-18  5:24 ` [Intel-wired-lan] [PATCH iwl-next v5 08/12] iavf: periodically cache " Mateusz Polchlopek
2024-04-18  5:24   ` Mateusz Polchlopek
2024-04-18 19:51   ` Rahul Rameshbabu
2024-04-18 19:51     ` Rahul Rameshbabu
2024-04-22  9:23     ` Mateusz Polchlopek
2024-04-22  9:23       ` Mateusz Polchlopek
2024-04-24 22:03       ` Keller, Jacob E
2024-04-24 22:03         ` Keller, Jacob E
2024-04-25 10:52         ` Przemek Kitszel
2024-04-25 10:52           ` Przemek Kitszel
2024-04-25 16:28           ` Keller, Jacob E
2024-04-25 16:28             ` Keller, Jacob E
2024-04-25 17:10             ` Rahul Rameshbabu [this message]
2024-04-25 17:10               ` Rahul Rameshbabu
2024-04-18  5:24 ` [Intel-wired-lan] [PATCH iwl-next v5 09/12] iavf: refactor iavf_clean_rx_irq to support legacy and flex descriptors Mateusz Polchlopek
2024-04-18  5:24   ` Mateusz Polchlopek
2024-04-18 20:00   ` Rahul Rameshbabu
2024-04-18 20:00     ` Rahul Rameshbabu
2024-04-22  9:22     ` Mateusz Polchlopek
2024-04-22  9:22       ` Mateusz Polchlopek
2024-04-23 10:51   ` Sunil Kovvuri Goutham
2024-04-23 10:51     ` Sunil Kovvuri Goutham
2024-04-26  7:15     ` Mateusz Polchlopek
2024-04-26  7:15       ` Mateusz Polchlopek
2024-04-18  5:24 ` [Intel-wired-lan] [PATCH iwl-next v5 10/12] iavf: Implement checking DD desc field Mateusz Polchlopek
2024-04-18  5:24   ` Mateusz Polchlopek
2024-04-18 20:07   ` Rahul Rameshbabu
2024-04-18 20:07     ` Rahul Rameshbabu
2024-04-18  5:24 ` [Intel-wired-lan] [PATCH iwl-next v5 11/12] iavf: handle SIOCSHWTSTAMP and SIOCGHWTSTAMP Mateusz Polchlopek
2024-04-18  5:24   ` Mateusz Polchlopek
2024-04-18 20:08   ` Rahul Rameshbabu
2024-04-18 20:08     ` Rahul Rameshbabu
2024-04-18  5:25 ` [Intel-wired-lan] [PATCH iwl-next v5 12/12] iavf: add support for Rx timestamps to hotpath Mateusz Polchlopek
2024-04-18  5:25   ` Mateusz Polchlopek
2024-04-18 20:12   ` Rahul Rameshbabu
2024-04-18 20:12     ` Rahul Rameshbabu
2024-04-23 10:47   ` Sunil Kovvuri Goutham
2024-04-23 10:47     ` Sunil Kovvuri Goutham
2024-04-18 20:19 ` [Intel-wired-lan] [PATCH iwl-next v5 00/12] Add support for Rx timestamping for both ice and iavf drivers Rahul Rameshbabu
2024-04-18 20:19   ` Rahul Rameshbabu
2024-04-22  9:37   ` Mateusz Polchlopek
2024-04-22  9:37     ` Mateusz Polchlopek
2024-04-23  5:57     ` Rahul Rameshbabu
2024-04-23  5:57       ` Rahul Rameshbabu
2024-04-23  6:08       ` Mateusz Polchlopek
2024-04-23  6:08         ` Mateusz Polchlopek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87wmol1i4j.fsf@nvidia.com \
    --to=rrameshbabu@nvidia.com \
    --cc=anthony.l.nguyen@intel.com \
    --cc=horms@kernel.org \
    --cc=intel-wired-lan@lists.osuosl.org \
    --cc=jacob.e.keller@intel.com \
    --cc=mateusz.polchlopek@intel.com \
    --cc=netdev@vger.kernel.org \
    --cc=przemyslaw.kitszel@intel.com \
    --cc=wojciech.drewek@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.