Messages in this thread Patch in this message | | | From | Alexander Lobakin <> | Subject | Re: [PATCH v3 1/1] net: fec: add xdp and page pool statistics | Date | Wed, 16 Nov 2022 15:33:36 +0100 |
| |
From: Shenwei Wang <shenwei.wang@nxp.com> Date: Mon, 14 Nov 2022 21:17:48 +0000
> > -----Original Message----- > > From: Alexander Lobakin <alexandr.lobakin@intel.com> > > Sent: Monday, November 14, 2022 9:23 AM > > To: Shenwei Wang <shenwei.wang@nxp.com> > > Cc: Alexander Lobakin <alexandr.lobakin@intel.com>; Andrew Lunn > > <andrew@lunn.ch>; David S. Miller <davem@davemloft.net>; Eric Dumazet > > <edumazet@google.com>; Jakub Kicinski <kuba@kernel.org>; Paolo Abeni > > <pabeni@redhat.com>; Alexei Starovoitov <ast@kernel.org>; Daniel Borkmann > > <daniel@iogearbox.net>; Jesper Dangaard Brouer <hawk@kernel.org>; John > > Fastabend <john.fastabend@gmail.com>; Wei Fang <wei.fang@nxp.com>; > > netdev@vger.kernel.org; linux-kernel@vger.kernel.org; imx@lists.linux.dev; > > kernel test robot <lkp@intel.com> > > Subject: [EXT] Re: [PATCH v3 1/1] net: fec: add xdp and page pool statistics
[...]
> Did some testing with the atomic64_t counter, with the following codes to update > the u64 counter in the end of every NAPI poll cycle. > > @@ -1764,7 +1768,13 @@ fec_enet_rx_queue(struct net_device *ndev, int budget, u16 queue_id) > > if (xdp_result & FEC_ENET_XDP_REDIR) > xdp_do_flush_map(); > +#if 1 > + if (xdp_prog) { > + int i; > + for(i = 0; i < XDP_STATS_TOTAL; i++) > + atomic64_add(xdp_stats[i], &rxq->stats[i]); > + } > +#endif > return pkt_received; > } > > With the codes above, the testing result is below: > root@imx8qxpc0mek:~/bpf# ./xdpsock -i eth0 > sock0@eth0:0 rxdrop xdp-drv > pps pkts 1.00 > rx 349399 1035008 > tx 0 0 > > sock0@eth0:0 rxdrop xdp-drv > pps pkts 1.00 > rx 349407 1384640 > tx 0 0 > > Without the atomic_add codes above, the testing result is below: > root@imx8qxpc0mek:~/bpf# ./xdpsock -i eth0 > sock0@eth0:0 rxdrop xdp-drv > pps pkts 1.00 > rx 350109 1989130 > tx 0 0 > > sock0@eth0:0 rxdrop xdp-drv > pps pkts 1.00 > rx 350425 2339786 > tx 0 0 > > And regarding the u32 counter solution, the testing result is below: > root@imx8qxpc0mek:~/bpf# ./xdpsock -i eth0 > sock0@eth0:0 rxdrop xdp-drv > pps pkts 1.00 > rx 361347 2637796 > tx 0 0 > > There are about 10K pkts/s difference here. Do we really want the u64 counters?
Where did those atomic64_t come from? u64_stats_t use either plain u64 for 32-bit platforms or local64_t for 64-bit ones. Take a look at [0] for the example of how x86_64 does this, it is far from atomic64_t.
> > Regards, > Shenwei > > >> > >> Thanks, > >> Shenwei > >> > >>> > >>> Andrew > > > > Thanks, > > Olek
[0] https://elixir.bootlin.com/linux/v6.1-rc5/source/arch/x86/include/asm/local.h#L31
Thanks, Olek
| |