[dpdk-stable] [dpdk-dev] [DPDK] net/ice: fix Rx statistics

David Marchand david.marchand at redhat.com
Thu Apr 25 09:34:22 CEST 2019


On Thu, Apr 25, 2019 at 9:30 AM Zhang, Qi Z <qi.z.zhang at intel.com> wrote:

> Hi David:
>
> > -----Original Message-----
> > From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of David Marchand
> > Sent: Thursday, April 25, 2019 3:13 PM
> > To: Su, Simei <simei.su at intel.com>
> > Cc: qi.zi.zhang at intel.com; Lu, Wenzhuo <wenzhuo.lu at intel.com>; Yang,
> > Qiming <qiming.yang at intel.com>; dev <dev at dpdk.org>; dpdk stable
> > <stable at dpdk.org>
> > Subject: Re: [dpdk-dev] [DPDK] net/ice: fix Rx statistics
> >
> > On Wed, Apr 24, 2019 at 9:47 AM simei <simei.su at intel.com> wrote:
> >
> > > The RX stats will increase even no packets sent, this patch fix this
> > > issue by modifying ipackets and ibytes statistics based on vsi instead
> > > of port to avoid statistics error.
> > >
> > > Fixes: a37bde56314d ("net/ice: support statistics")
> > > Cc: stable at dpdk.org
> > >
> > > Signed-off-by: Simei Su <simei.su at intel.com>
> > > ---
> > >  drivers/net/ice/ice_ethdev.c | 9 ++++-----
> > >  1 file changed, 4 insertions(+), 5 deletions(-)
> > >
> > > diff --git a/drivers/net/ice/ice_ethdev.c
> > > b/drivers/net/ice/ice_ethdev.c index 0946b19..1c851ac 100644
> > > --- a/drivers/net/ice/ice_ethdev.c
> > > +++ b/drivers/net/ice/ice_ethdev.c
> > > @@ -3305,15 +3305,14 @@ static int ice_rx_queue_intr_disable(struct
> > > rte_eth_dev *dev,
> > >         /* call read registers - updates values, now write them to
> > > struct */
> > >         ice_read_stats_registers(pf, hw);
> > >
> > > -       stats->ipackets = ns->eth.rx_unicast +
> > > -                         ns->eth.rx_multicast +
> > > -                         ns->eth.rx_broadcast -
> > > -                         ns->eth.rx_discards -
> > > +       stats->ipackets = pf->main_vsi->eth_stats.rx_unicast +
> > > +                         pf->main_vsi->eth_stats.rx_multicast +
> > > +                         pf->main_vsi->eth_stats.rx_broadcast -
> > >                           pf->main_vsi->eth_stats.rx_discards;
> > >         stats->opackets = ns->eth.tx_unicast +
> > >                           ns->eth.tx_multicast +
> > >                           ns->eth.tx_broadcast;
> > > -       stats->ibytes   = ns->eth.rx_bytes;
> > > +       stats->ibytes   = pf->main_vsi->eth_stats.rx_bytes;
> > >         stats->obytes   = ns->eth.tx_bytes;
> > >         stats->oerrors  = ns->eth.tx_errors +
> > >                           pf->main_vsi->eth_stats.tx_errors;
> > > --
> > > 1.8.3.1
> > >
> > >
> > I don't know this hw nor this code.
> > However, from the description and this snippet, it looks like
> > opackets/obytes/oerrors are still referring to port stats instead of the
> pf stats.
> > Can you elaborate ?
>
> For Rx, packet comes to port then vsi,  so we count vsi->rx for how many
> valid packet we received.
> For Tx, packet comes to vsi then port,  so we count port->tx for how many
> packet we exactly sent out?
>
> Does this make sense?
>

Well, sorry, but no :-)
But if you are sure this is the right way, go with it.


-- 
David Marchand


More information about the stable mailing list