From: Vinicius Costa Gomes <vinicius.gomes@intel.com>
To: Vladimir Oltean <vladimir.oltean@nxp.com>,
Ferenc Fejes <ferenc.fejes@ericsson.com>
Cc: "netdev@vger.kernel.org" <netdev@vger.kernel.org>,
"marton12050@gmail.com" <marton12050@gmail.com>,
"peti.antal99@gmail.com" <peti.antal99@gmail.com>
Subject: Re: igc: missing HW timestamps at TX
Date: Mon, 15 Aug 2022 14:39:33 -0700 [thread overview]
Message-ID: <87v8qti3u2.fsf@intel.com> (raw)
In-Reply-To: <20220812201654.qx7e37otu32pxnbk@skbuf>
Hi Vladimir,
Vladimir Oltean <vladimir.oltean@nxp.com> writes:
> Hi Ferenc,
>
> On Fri, Aug 12, 2022 at 02:13:52PM +0000, Ferenc Fejes wrote:
>> Ethtool after the measurement:
>> ethtool -S enp3s0 | grep hwtstamp
>> tx_hwtstamp_timeouts: 1
>> tx_hwtstamp_skipped: 419
>> rx_hwtstamp_cleared: 0
>>
>> Which is inline with what the isochron see.
>>
>> But thats only happens if I forcingly put the affinity of the sender
>> different CPU core than the ptp worker of the igc. If those running on
>> the same core I doesnt lost any HW timestam even for 10 million
>> packets. Worth to mention actually I see many lost timestamp which
>> confused me a little bit but those are lost because of the small
>> MSG_ERRQUEUE. When I increased that from few kbytes to 20 mbytes I got
>> every timestamp successfully.
>
> I have zero knowledge of Intel hardware. That being said, I've looked at
> the driver for about 5 minutes, and the design seems to be that where
> the timestamp is not available in band from the TX completion NAPI as
> part of BD ring metadata, but rather, a TX timestamp complete is raised,
> and this results in igc_tsync_interrupt() being called. However there
> are 2 paths in the driver which call this, one is igc_msix_other() and
> the other is igc_intr_msi() - this latter one is also the interrupt that
> triggers the napi_schedule(). It would be interesting to see exactly
> which MSI-X interrupt is the one that triggers igc_tsync_interrupt().
Just some aditional information (note that I know very little about
interrupt internal workings), igc_intr_msi() is called when MSI-X is not
enabled (i.e. "MSI only" system), igc_msix_other() is called when MSI-X
is available. When MSI-X is available, i225/i226 sets up a separate
interrupt handler for "general" events, the TX timestamp being available
to be read from the registers is one those events.
>
> It's also interesting to understand what you mean precisely by affinity
> of isochron. It has a main thread (used for PTP monitoring and for TX
> timestamps) and a pthread for the sending process. The main thread's
> affinity is controlled via taskset; the sender thread via --cpu-mask.
> Is it the *sender* thread the one who makes the TX timestamps be
> available quicker to user space, rather than the main thread, who
> actually dequeues them from the error queue? If so, it might be because
> the TX packets will trigger the TX completion interrupt, and this will
> accelerate the processing of the TX timestamps. I'm unclear what happens
> when the sender thread runs on a different CPU core than the TX
> timestamp thread.
>
> Your need to increase the SO_RCVBUF is also interesting. Keep in mind
> that isochron at that scheduling priority and policy is a CPU hog, and
> that igc_tsync_interrupt() calls schedule_work() - which uses the system
> workqueue that runs at a very low priority (this begs the question, how
> do you know how to match the CPU on which isochron runs with the CPU of
> the system workqueue?). So isochron, high priority, competes for CPU
> time with igc_ptp_tx_work(), low priority. One produces data, one
> consumes it; queues are bound to get full at some point.
> On the other hand, other drivers use the ptp_aux_kworker() that the PTP
> core creates specifically for this purpose. It is a dedicated kthread
> whose scheduling policy and priority can be adjusted using chrt. I think
> it would be interesting to see how things behave when you replace
> schedule_work() with ptp_schedule_worker().
I was planning to do the conversion to use the PTP aux worker thread at
some point, perhaps this is the "excuse" I was looking for.
Cheers,
--
Vinicius
next prev parent reply other threads:[~2022-08-16 1:47 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-17 14:42 igc: missing HW timestamps at TX Ferenc Fejes
2022-07-17 14:46 ` Ferenc Fejes
2022-07-18 14:46 ` Vinicius Costa Gomes
2022-07-19 7:40 ` Ferenc Fejes
2022-08-11 8:54 ` Ferenc Fejes
2022-08-11 13:33 ` Vinicius Costa Gomes
2022-08-12 14:13 ` Ferenc Fejes
2022-08-12 20:16 ` Vladimir Oltean
2022-08-15 6:47 ` Ferenc Fejes
2022-08-15 22:04 ` Vinicius Costa Gomes
2022-08-16 9:33 ` Vladimir Oltean
2022-08-17 7:44 ` Ferenc Fejes
2022-08-15 21:39 ` Vinicius Costa Gomes [this message]
2022-08-15 22:26 ` Vladimir Oltean
2022-08-15 23:07 ` Vinicius Costa Gomes
2022-08-16 8:51 ` Kurt Kanzenbach
2022-08-16 20:45 ` Vinicius Costa Gomes
2022-08-17 6:10 ` Kurt Kanzenbach
2022-08-17 19:24 ` Vinicius Costa Gomes
2022-08-16 9:10 ` Vladimir Oltean
2022-08-16 18:11 ` Vinicius Costa Gomes
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=87v8qti3u2.fsf@intel.com \
--to=vinicius.gomes@intel.com \
--cc=ferenc.fejes@ericsson.com \
--cc=marton12050@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=peti.antal99@gmail.com \
--cc=vladimir.oltean@nxp.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).