public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
From: Vladimir Oltean <vladimir.oltean@nxp.com>
To: Jakub Kicinski <kuba@kernel.org>
Cc: "Köry Maincent" <kory.maincent@bootlin.com>,
	"Florian Fainelli" <florian.fainelli@broadcom.com>,
	"Broadcom internal kernel review list"
	<bcm-kernel-feedback-list@broadcom.com>,
	"Andrew Lunn" <andrew@lunn.ch>,
	"Heiner Kallweit" <hkallweit1@gmail.com>,
	"Russell King" <linux@armlinux.org.uk>,
	"David S. Miller" <davem@davemloft.net>,
	"Eric Dumazet" <edumazet@google.com>,
	"Paolo Abeni" <pabeni@redhat.com>,
	"Richard Cochran" <richardcochran@gmail.com>,
	"Radu Pirea" <radu-nicolae.pirea@oss.nxp.com>,
	"Jay Vosburgh" <j.vosburgh@gmail.com>,
	"Andy Gospodarek" <andy@greyhouse.net>,
	"Nicolas Ferre" <nicolas.ferre@microchip.com>,
	"Claudiu Beznea" <claudiu.beznea@tuxon.dev>,
	"Willem de Bruijn" <willemdebruijn.kernel@gmail.com>,
	"Jonathan Corbet" <corbet@lwn.net>,
	"Horatiu Vultur" <horatiu.vultur@microchip.com>,
	UNGLinuxDriver@microchip.com, "Simon Horman" <horms@kernel.org>,
	"Thomas Petazzoni" <thomas.petazzoni@bootlin.com>,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-doc@vger.kernel.org,
	"Maxime Chevallier" <maxime.chevallier@bootlin.com>
Subject: Re: [PATCH net-next v7 15/16] net: ethtool: ts: Let the active time stamping layer be selectable
Date: Mon, 20 Nov 2023 23:17:59 +0200	[thread overview]
Message-ID: <20231120211759.j5uvijsrgt2jqtwx@skbuf> (raw)
In-Reply-To: <20231120115839.74ee5492@kernel.org>

On Mon, Nov 20, 2023 at 11:58:39AM -0800, Jakub Kicinski wrote:
> Rx time stamping is configured by filters. Is there a problem with user
> specifying that they want "true" timestamps for PTP/NTP packets, and
> "dma" timestamps for all the rest?

There is, because enum hwtstamp_rx_filters is NIC-wide, and there is
only one of those - corresponding to the single hwtstamp (ts[2]) provider.
There were never talks in this patch set, AFAIR, about multiple hwtstamp
providers active simultaneously (for different traffic streams) and
configuring them independently, with separate RX filters.

> Maybe we can extend struct scm_timestamping to carry an indication
> which stamp ended up in ts[2] but that's less important to me than
> the ability to configure the thing. Right now, as I said, mlx5 uses
> an ethtool priv flag :(

No, you misunderstood me. I didn't suggest (at least not here) to add an
indication to struct scm_timestamping of "what's the source of ts[2]
(the hwtstamp)".

I was just _asking_ (collecting data) whether it's ultimately desirable
for DMA timestamps to be visible in ts[2] (indistinguishable from a
better hwtstamp, as they currently are, I guess) rather than their
own thing. Like for example, in a congestion control algorithm, where
does TCP really get them from.

If they'd rather be their own thing in a fully developed API, then the
whole discussion is rather off-topic to Köry, because here, we're
beating the dead horse of "where does ts[2] come from" - _still_ a
single source, just selectable, that is.

> > But maybe I'm wrong and there are NICs which can do that filtering.
> > If such NIC exists, then I guess a SOF_TIMESTAMPING_RX_DMA flag should
> > be added to the socket layer, and the NIC driver provides timestamps
> > according to the skb->sk->sk_tsflags, and that problem is completely out
> > of scope for Köry's patch set - and implicitly compatible with it, since
> > as you say, the device-wide timestamping layer - PHC index - does not
> > really change.
> 
> IDK. Maybe the sniffles I picked up at LPC are clouding my judgment
> but to me this patch set is shaped too much by current implementation
> and not enough by what it's modeling. It basically exposes to user
> space the "mux" for choosing NETDEV vs PHYLIB.

The last sentence I agree with.

> There are multiple time stamping points as the packet moves thru 
> the pipeline. Expose them so that SIOC[GS]HWTSTAMP can target each
> on individually.

Ok, that is rather vague and complex.

You will forever have to contend with the fact that struct scm_timestamping
can contain a single hwtstamp per packet: ts[2]. So you need complex
control path logic to ensure that the sum of RX filters for all
timestamping points in the packet data path doesn't actually request
more than one ts[2] for any skb.

I understand how that could scrath your itch, but here, it sounds
off-topic?

This is actually starting to get close, in a way, to my feedback to
Richard to allow multiple hwtstamp sources for an skb, and to just give
an indication in the cmsg of what's their source, leaving user space to
figure out the rest.
https://lore.kernel.org/netdev/20220120164832.xdebp5vykib6h6dp@skbuf/

But his response was "There was a fair amount of discussion, and it
seemed to me that everyone wanted a pony."
https://lore.kernel.org/netdev/Y%2F0Idkhy27TObawi@hoboy.vegasvil.org/

I mean, IDK, maybe it's not off-topic, but it's a round-about way of
achieving what they think they can achieve in a more straightforward way.

Rephrased in my own words, you're saying:

Forget the concept of an active hwtstamp provider, just open up the
knobs of _all_ possible hwtstamp providers for a NIC. Simultaneously!
To make one active and all the others inactive, just use
HWTSTAMP_FILTER_NONE/HWTSTAMP_TX_OFF for all except one, and the desired
enum hwtstamp_rx_filters / enum hwtstamp_tx_types for the active one.
Live with this expanded configuration model for a while, just restricted
for a single active timestamping layer, and then, once user space is
ready for an enhanced struct scm_timestamping which supports potentially
multiple cmsgs with distinct hwtstamps, remove the restriction and let
it all rip! Everybody gets their pony!

Additionally, SIOCSHWTSTAMP is kinda rusty, has a fixed binary format,
and is not extensible to target a specific hwtstamp provider. So a
netlink conversion of that, as a first step, would of course be great.

Is it an accurate summary?

If it is, I'll let Köry comment on the feasibility :)

> > If I'm not wrong and the MAC-or-DMA timestamp selection is NIC-wide
> > (which diverges from your problem description),
> 
> Nope.
> 
> > then neither Köry's work
> > nor my "everything is a phc_index" proposal will bring your use case to
> > fruition without further work. Here I would avoid speculating, because a
> > lot will depend upon the details which you haven't really given.
> 
> What are the details you'd like? PTP gets stamped at the PHY/MAC, 
> the rest gets stamped at DMA. mlx5 achieves this by splitting the
> PTP traffic to a separate queue pair, and configuring that qp to
> capture PHY/MAC stamps, AFAIU.

That's enough, thanks.

> > One question will be whether, in the case of "NIC-wide DMA timestamps",
> > DMA timestamps should be presented as hardware timestamps - struct
> > scm_timestamping[2] from CMSG_DATA() - or as their own thing, that user
> > space needs explicit support for - by parsing a new cmsg level/type.
> > If DMA timestamps won't look to user space like hardware timestamps,
> > then the use case is again out of scope for Köry's work, as far as I see
> > it.
> > 
> > Another simple question is - if NICs do this today - probably by giving
> > the "unrepresentable mix" to user space in an implicit, hardcoded and
> > very fine tuned way such that nobody bats an eye - then what is there
> > more to support? Are you looking at extra UAPI as a way to legitimize
> > hacks, or do you feel there is extra control that applications can gain?
> 
> I don't understand what you're asking me.

You've partially answered above. The mix of timestamps coming from the
PHY/MAC and those coming from the DMA is unrepresentable in today's
UAPI, and is just fine-tuned to work for the existing use case of "PTP
gets PHY/MAC, everything else gets DMA".

Still not 100% clear what would the proper UAPI (separate user-controllable
RX filters for PHY, MAC and DMA) gain, in addition to what exists in mlx5.

> DMA timestamping is becoming increasingly important. Ready any
> congestion control paper from the last 5 years and chances are
> it will be using delay as a signal. If we're extending uAPI
> for Hw stamping we should make sure to cater to CC use cases.

I'll stop commenting here for a while and go read some of those papers and
RFCs, in the hope that I find some info about the way in which TCP expects
hwtstamps from a NIC. It's quite evident to me that I don't have enough
information to help this discussion reach a conclusion.

  reply	other threads:[~2023-11-20 21:18 UTC|newest]

Thread overview: 79+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-14 11:28 [PATCH net-next v7 00/16] net: Make timestamping selectable Kory Maincent
2023-11-14 11:28 ` [PATCH net-next v7 01/16] net: Convert PHYs hwtstamp callback to use kernel_hwtstamp_config Kory Maincent
2023-11-14 11:28 ` [PATCH net-next v7 02/16] net: phy: Remove the call to phy_mii_ioctl in phy_hwstamp_get/set Kory Maincent
2023-11-14 11:28 ` [PATCH net-next v7 03/16] net: ethtool: Refactor identical get_ts_info implementations Köry Maincent
2023-11-14 11:28 ` [PATCH net-next v7 04/16] net: macb: Convert to ndo_hwtstamp_get() and ndo_hwtstamp_set() Kory Maincent
2023-11-14 11:28 ` [PATCH net-next v7 05/16] net: Make dev_set_hwtstamp_phylib accessible Kory Maincent
2023-11-14 11:28 ` [PATCH net-next v7 06/16] net: phy: micrel: fix ts_info value in case of no phc Kory Maincent
2023-11-14 11:28 ` [PATCH net-next v7 07/16] net_tstamp: Add TIMESTAMPING SOFTWARE and HARDWARE mask Kory Maincent
2023-11-14 15:52   ` Willem de Bruijn
2023-11-19  2:22   ` Jakub Kicinski
2023-11-20  9:05     ` Köry Maincent
2023-11-20 16:48       ` Jakub Kicinski
2023-11-20 16:51         ` Willem de Bruijn
2023-11-14 11:28 ` [PATCH net-next v7 08/16] net: ethtool: Add a command to expose current time stamping layer Kory Maincent
2023-11-19  2:24   ` Jakub Kicinski
2023-11-20  9:17     ` Köry Maincent
2023-11-20 10:40       ` Köry Maincent
2023-11-14 11:28 ` [PATCH net-next v7 09/16] netlink: specs: Introduce new netlink command to get current timestamp Kory Maincent
2023-11-19  2:25   ` Jakub Kicinski
2023-11-14 11:28 ` [PATCH net-next v7 10/16] net: ethtool: Add a command to list available time stamping layers Kory Maincent
2023-11-19  2:26   ` Jakub Kicinski
2023-11-14 11:28 ` [PATCH net-next v7 11/16] netlink: specs: Introduce new netlink " Kory Maincent
2023-11-14 11:28 ` [PATCH net-next v7 12/16] net: Replace hwtstamp_source by timestamping layer Kory Maincent
2023-11-14 11:28 ` [PATCH net-next v7 13/16] net: Change the API of PHY default timestamp to MAC Kory Maincent
2023-11-14 11:28 ` [PATCH net-next v7 14/16] net: ethtool: ts: Update GET_TS to reply the current selected timestamp Kory Maincent
2023-11-14 11:28 ` [PATCH net-next v7 15/16] net: ethtool: ts: Let the active time stamping layer be selectable Kory Maincent
2023-11-19  2:34   ` Jakub Kicinski
2023-11-20  9:44     ` Köry Maincent
2023-11-20 10:52       ` Vladimir Oltean
2023-11-20 11:14         ` Köry Maincent
2023-11-20 12:06           ` Vladimir Oltean
2023-11-20 13:49             ` Köry Maincent
2023-11-20 14:23               ` Vladimir Oltean
2023-11-20 14:53                 ` Köry Maincent
2023-11-20 16:10                   ` Vladimir Oltean
2023-11-20 17:17                     ` Köry Maincent
2023-11-20 17:37                 ` Jakub Kicinski
2023-11-20 18:39                   ` Andrew Lunn
2023-11-20 18:51                     ` Jakub Kicinski
2023-11-20 19:58                       ` Vladimir Oltean
2023-11-20 21:45                         ` Jakub Kicinski
2023-11-29 20:09                           ` Köry Maincent
2023-11-29 20:37                             ` Vladimir Oltean
2023-11-29 22:00                               ` Köry Maincent
2023-11-29 23:56                                 ` Jakub Kicinski
2023-11-30  0:06                                   ` Rahul Rameshbabu
2023-11-20 19:09                     ` Russell King (Oracle)
2023-11-20 19:00                   ` Vladimir Oltean
2023-11-20 19:58                     ` Jakub Kicinski
2023-11-20 21:17                       ` Vladimir Oltean [this message]
2023-11-20 21:37                         ` Jakub Kicinski
2023-11-20 22:05                           ` Vladimir Oltean
2023-11-21 17:31                             ` Köry Maincent
2023-11-21 17:43                               ` Jakub Kicinski
2023-11-22 13:44                                 ` Köry Maincent
2023-11-22 14:08                                   ` Vladimir Oltean
2023-11-22 14:19                                     ` Vladimir Oltean
2023-11-22 14:36                                     ` Vladimir Oltean
2023-11-22 16:54                                       ` Jakub Kicinski
2023-11-22 16:59                                         ` Vladimir Oltean
2023-11-22 17:55                                           ` Jakub Kicinski
2023-11-22 18:11                                             ` Willem de Bruijn
2023-11-24 17:27                                               ` Vladimir Oltean
2023-11-24 19:45                                                 ` Willem de Bruijn
2023-11-25 19:41                                                   ` Richard Cochran
2023-11-22 14:57                                     ` Köry Maincent
2023-11-22 16:50                                     ` Jakub Kicinski
2023-11-22 16:55                                       ` Vladimir Oltean
2023-11-22 18:01                                         ` Jakub Kicinski
2023-11-23 15:00                                           ` Köry Maincent
2023-11-23 17:32                                             ` Jakub Kicinski
2023-11-24 15:43                                               ` Vladimir Oltean
2023-11-24 17:34                                                 ` Köry Maincent
2023-11-24 19:57                                                   ` Vladimir Oltean
2023-11-24 20:47                                                   ` Willem de Bruijn
2023-11-21 23:40                               ` Richard Cochran
2023-11-14 11:28 ` [PATCH net-next v7 16/16] netlink: specs: Introduce time stamping set command Kory Maincent
2023-11-18 15:10 ` [PATCH net-next v7 00/16] net: Make timestamping selectable patchwork-bot+netdevbpf
2023-11-19  2:35   ` Jakub Kicinski

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=20231120211759.j5uvijsrgt2jqtwx@skbuf \
    --to=vladimir.oltean@nxp.com \
    --cc=UNGLinuxDriver@microchip.com \
    --cc=andrew@lunn.ch \
    --cc=andy@greyhouse.net \
    --cc=bcm-kernel-feedback-list@broadcom.com \
    --cc=claudiu.beznea@tuxon.dev \
    --cc=corbet@lwn.net \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=florian.fainelli@broadcom.com \
    --cc=hkallweit1@gmail.com \
    --cc=horatiu.vultur@microchip.com \
    --cc=horms@kernel.org \
    --cc=j.vosburgh@gmail.com \
    --cc=kory.maincent@bootlin.com \
    --cc=kuba@kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=maxime.chevallier@bootlin.com \
    --cc=netdev@vger.kernel.org \
    --cc=nicolas.ferre@microchip.com \
    --cc=pabeni@redhat.com \
    --cc=radu-nicolae.pirea@oss.nxp.com \
    --cc=richardcochran@gmail.com \
    --cc=thomas.petazzoni@bootlin.com \
    --cc=willemdebruijn.kernel@gmail.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