On Fri, May 03, 2024 at 02:58:08PM -0700, Jakub Kicinski wrote: > On Fri, 3 May 2024 11:43:27 -0700 Joe Damato wrote: > > 1. it includes the PTP stats that I don't include in my qstats, and/or > > 2. some other reason I don't understand > > Can you add the PTP stats to the "base" values? > I.e. inside mlx5e_get_base_stats()? I tried adding them to rx and tx and mlx5e_get_base_stats (similar to what mlx5e_fold_sw_stats64 does) and the test still fails. Maybe something about the rtnl stats are what's off here and the queue stats are fine? FWIW: I spoke with the Mellanox folks off list several weeks ago and they seemed to suggest skipping the PTP stats made the most sense. I think at that time I didn't really understand get_base_stats that well, so maybe we'd have come to a different conclusion then. FWIW, here's what I tried and the rtnl vs qstat test still failed in exactly the same way: --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c @@ -5337,10 +5337,25 @@ static void mlx5e_get_base_stats(struct net_device *dev, rx->packets = 0; rx->bytes = 0; rx->alloc_fail = 0; + if (priv->rx_ptp_opened) { + struct mlx5e_rq_stats *rq_stats = &priv->ptp_stats.rq; + rx->packets = rq_stats->packets; + rx->bytes = rq_stats->bytes; + } } tx->packets = 0; tx->bytes = 0; + + if (priv->tx_ptp_opened) { + int i; + for (i = 0; i < priv->max_opened_tc; i++) { + struct mlx5e_sq_stats *sq_stats = &priv->ptp_stats.sq[i]; + + tx->packets += sq_stats->packets; + tx->bytes += sq_stats->bytes; + } + } } > We should probably touch up the kdoc a little bit, but it sounds like > the sort of thing which would fall into the realm of "misc delta" > values: > > diff --git a/include/net/netdev_queues.h b/include/net/netdev_queues.h > index c7ac4539eafc..f5d9f3ad5b66 100644 > --- a/include/net/netdev_queues.h > +++ b/include/net/netdev_queues.h > @@ -59,6 +59,8 @@ struct netdev_queue_stats_tx { > * statistics will not generally add up to the total number of events for > * the device. The @get_base_stats callback allows filling in the delta > * between events for currently live queues and overall device history. > + * @get_base_stats can also be used to report any miscellaneous packets > + * transferred outside of the main set of queues used by the networking stack. > * When the statistics for the entire device are queried, first @get_base_stats > * is issued to collect the delta, and then a series of per-queue callbacks. > * Only statistics which are set in @get_base_stats will be reported > > > SG? I think that sounds good and makes sense, yea. By that definition, then I should leave the PTP stats as shown above. If you agree, I'll add that to the v2. I feel like I should probably wait before sending a v2 with PTP included in get_base_stats to see if the Mellanox folks have any hints about why rtnl != queue stats on mlx5? What do you think?