On Tue, Jan 28, 2014 at 02:08:09AM -0500, Brad Smith wrote:
> On Tue, Jan 28, 2014 at 01:21:46PM +1000, David Gwynne wrote:
> > 
> > On 26 Jan 2014, at 11:31 am, Brad Smith <[email protected]> wrote:
> > 
> > > On 31/12/13 5:50 AM, Mike Belopuhov wrote:
> > >> On 31 December 2013 09:46, Brad Smith <[email protected]> wrote:
> > >>> On 31/12/13 3:14 AM, Mark Kettenis wrote:
> > >>>>> 
> > >>>>> Date: Tue, 31 Dec 2013 01:28:04 -0500
> > >>>>> From: Brad Smith <[email protected]>
> > >>>>> 
> > >>>>> Don't count RX overruns and missed packets as inputs errors. They're
> > >>>>> expected to increment when using MCLGETI.
> > >>>>> 
> > >>>>> OK?
> > >>>> 
> > >>>> 
> > >>>> These may be "expected", but they're still packets that were not
> > >>>> received.  And it is useful to know about these, for example when
> > >>>> debugging TCP performance issues.
> > >>> 
> > >>> 
> > >>> Well do we want to keep just the missed packets or both? Part of the
> > >>> diff was inspired by this commit when I was looking at what counters
> > >>> were incrementing..
> > >>> 
> > >>> for bge(4)..
> > >>> 
> > >>> revision 1.334
> > >>> date: 2013/06/06 00:05:30;  author: dlg;  state: Exp;  lines: +2 -4;
> > >>> dont count rx ring overruns as input errors. with MCLGETI controlling 
> > >>> the
> > >>> ring we expect to run out of rx descriptors as a matter of course, its 
> > >>> not
> > >>> an error.
> > >>> 
> > >>> ok mikeb@
> > >>> 
> > >>> 
> > >> 
> > >> it does screws up statistics big time.  does mpc counter follow 
> > >> rx_overruns?
> > >> why did we add them up both previously?
> > > 
> > > Yes, it does. I can't say why exactly but before MCLGETI for most 
> > > environments
> > > it was unlikely to have RX overruns.
> > 
> > its not obvious?
> > 
> > rx rings are usually massively over provisioned. eg, my myx has 512 entries 
> > in its
> > rx ring. however, its interrupt mitigation is currently configured for 
> > approximately
> > 16k interrupts a second. if you're sustaining 1m pps, then you can divide 
> > that by the
> > interrupt rate to figure out the average usage of the rx ring. so 1000 / 16 
> > is about
> > 60-65 descriptors per interrupt. 512 is roughly an order of magnitude more 
> > than what
> > you need for that workload.
> > 
> > if you were hitting the ring limits before MCLGETI, then that means you 
> > dont have
> > enough cpu to process the pps. increasing the ring size would make it worse 
> > cos you'd
> > spend more time freeing mbufs because you were too far behind on the pps 
> > you could
> > deal with.
> 
> Ya, I don't know why I ultimately said I can't say why exactly as I was 
> thinking about
> what you said regaring having a lot of buffers allocated and that's why I 
> said it was
> unlikely to have RX overruns.
> 
> Since this was changed for bge(4) then the other drivers using MCLGETI should 
> be changed
> as well if there is consensus about not adding the RX overruns to the 
> interfaces input
> errors counter. But I think kettenis has a point as well that this 
> information is useful
> its just we don't have any way of exposing that info to userland.

Ok, so I looked at the other drivers using MCLGETI and there are a few others 
also
counting FIFO overruns towards input errors.


Index: arch/socppc/dev/if_tsec.c
===================================================================
RCS file: /home/cvs/src/sys/arch/socppc/dev/if_tsec.c,v
retrieving revision 1.29
diff -u -p -u -p -r1.29 if_tsec.c
--- arch/socppc/dev/if_tsec.c   29 Nov 2012 21:10:31 -0000      1.29
+++ arch/socppc/dev/if_tsec.c   28 Jan 2014 05:16:24 -0000
@@ -779,7 +779,6 @@ tsec_errintr(void *arg)
                 */
                tsec_rx_proc(sc);
                tsec_write(sc, TSEC_RSTAT, TSEC_RSTAT_QHLT);
-               ifp->if_ierrors++;
        }
 
        return (1);
Index: dev/pci/if_se.c
===================================================================
RCS file: /home/cvs/src/sys/dev/pci/if_se.c,v
retrieving revision 1.9
diff -u -p -u -p -r1.9 if_se.c
--- dev/pci/if_se.c     28 Dec 2013 03:34:54 -0000      1.9
+++ dev/pci/if_se.c     28 Jan 2014 04:49:53 -0000
@@ -939,7 +939,8 @@ se_rxeof(struct se_softc *sc)
                                printf("%s: rx error %b\n",
                                    ifp->if_xname, rxstat, RX_ERR_BITS);
                        se_discard_rxbuf(sc, i);
-                       ifp->if_ierrors++;
+                       if ((rxstat & RDS_OVRUN) == 0)
+                               ifp->if_ierrors++;
                        continue;
                }
 
Index: dev/pci/if_sis.c
===================================================================
RCS file: /home/cvs/src/sys/dev/pci/if_sis.c,v
retrieving revision 1.115
diff -u -p -u -p -r1.115 if_sis.c
--- dev/pci/if_sis.c    28 Dec 2013 03:34:54 -0000      1.115
+++ dev/pci/if_sis.c    28 Jan 2014 04:51:53 -0000
@@ -1378,7 +1378,8 @@ sis_rxeof(struct sis_softc *sc)
                    total_len <= (ETHER_MAX_DIX_LEN - ETHER_CRC_LEN))
                        rxstat &= ~SIS_RXSTAT_GIANT;
                if (SIS_RXSTAT_ERROR(rxstat)) {
-                       ifp->if_ierrors++;
+                       if ((rxstat & SIS_RXSTAT_OVERRUN) == 0)
+                               ifp->if_ierrors++;
                        if (rxstat & SIS_RXSTAT_COLL)
                                ifp->if_collisions++;
                        m_freem(m);
Index: dev/pci/if_vr.c
===================================================================
RCS file: /home/cvs/src/sys/dev/pci/if_vr.c,v
retrieving revision 1.132
diff -u -p -u -p -r1.132 if_vr.c
--- dev/pci/if_vr.c     28 Dec 2013 03:34:54 -0000      1.132
+++ dev/pci/if_vr.c     28 Jan 2014 04:56:19 -0000
@@ -858,7 +858,8 @@ vr_rxeof(struct vr_softc *sc)
                 * comes up in the ring.
                 */
                if ((rxstat & VR_RXSTAT_RX_OK) == 0) {
-                       ifp->if_ierrors++;
+                       if ((rxstat & VR_RXSTAT_FIFOOFLOW) == 0)
+                               ifp->if_ierrors++;
 #ifdef VR_DEBUG
                        printf("%s: rx error (%02x):",
                            sc->sc_dev.dv_xname, rxstat & 0x000000ff);

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.

Reply via email to