Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 6 Aug 2012 17:00:58 -0400
From:      Andrew Boyer <aboyer@averesystems.com>
To:        freebsd-net@freebsd.org
Subject:   [patch] ixgbe stats cleanup
Message-ID:  <C3008412-4F1E-4166-B7FF-1FA5E2F3F53E@averesystems.com>

next in thread | raw e-mail | index | archive | help

--Apple-Mail=_74B83304-D2B0-407D-A5AF-A78C022F5F90
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=us-ascii

This patch fixes some nits in the ixgbe driver statistics:
 - Only read FCCRC and FCLAST on 82599+
 - Store total_missed_rx in stats.mpctotal, and display it in a sysctl
 - Don't increment if_opackets and if_ipackets every packet; they're =
overwritten by hw stats collection
 - Increment adapter->dropped_pkts instead of if_ierrors; if_ierrors is =
overwritten by hw stats collection
 - Include adapter->dropped_pkts in the calculation of if_ierrors
 - Increment rxr->packets so that AIM works

Comments welcome.

-Andrew


--Apple-Mail=_74B83304-D2B0-407D-A5AF-A78C022F5F90
Content-Disposition: attachment;
	filename=ixgbe_stats.diff
Content-Type: application/octet-stream;
	name="ixgbe_stats.diff"
Content-Transfer-Encoding: 7bit

Index: sys/dev/ixgbe/ixgbe.c
===================================================================
--- sys/dev/ixgbe/ixgbe.c	(revision 239102)
+++ sys/dev/ixgbe/ixgbe.c	(working copy)
@@ -3519,7 +3519,6 @@
 ixgbe_txeof(struct tx_ring *txr)
 {
 	struct adapter	*adapter = txr->adapter;
-	struct ifnet	*ifp = adapter->ifp;
 	u32	first, last, done, processed;
 	struct ixgbe_tx_buf *tx_buffer;
 	struct ixgbe_legacy_tx_desc *tx_desc, *eop_desc;
@@ -3527,8 +3526,8 @@
 	mtx_assert(&txr->tx_mtx, MA_OWNED);
 
 #ifdef DEV_NETMAP
-	if (ifp->if_capenable & IFCAP_NETMAP) {
-		struct netmap_adapter *na = NA(ifp);
+	if (adapter->ifp->if_capenable & IFCAP_NETMAP) {
+		struct netmap_adapter *na = NA(adapter->ifp);
 		struct netmap_kring *kring = &na->tx_rings[txr->me];
 
 		tx_desc = (struct ixgbe_legacy_tx_desc *)txr->tx_base;
@@ -3630,7 +3629,6 @@
 			    (struct ixgbe_legacy_tx_desc *)&txr->tx_base[first];
 		}
 		++txr->packets;
-		++ifp->if_opackets;
 		/* See if there is more work now */
 		last = tx_buffer->eop_index;
 		if (last != -1) {
@@ -4503,7 +4501,7 @@
 		/* Make sure bad packets are discarded */
 		if (((staterr & IXGBE_RXDADV_ERR_FRAME_ERR_MASK) != 0) ||
 		    (rxr->discard)) {
-			ifp->if_ierrors++;
+			adapter->dropped_pkts++;
 			rxr->rx_discarded++;
 			if (eop)
 				rxr->discard = FALSE;
@@ -4644,11 +4642,12 @@
 		/* Sending this frame? */
 		if (eop) {
 			sendmp->m_pkthdr.rcvif = ifp;
-			ifp->if_ipackets++;
 			rxr->rx_packets++;
+			rxr->rx_bytes += sendmp->m_pkthdr.len;
+
 			/* capture data for AIM */
+			rxr->packets++;
 			rxr->bytes += sendmp->m_pkthdr.len;
-			rxr->rx_bytes += sendmp->m_pkthdr.len;
 			if ((ifp->if_capenable & IFCAP_RXCSUM) != 0)
 				ixgbe_rx_checksum(staterr, sendmp, ptype);
 #if __FreeBSD_version >= 800000
@@ -5168,6 +5167,8 @@
 		adapter->stats.pxon2offc[i] +=
 		    IXGBE_READ_REG(hw, IXGBE_PXON2OFFCNT(i));
 	}
+	adapter->stats.mpctotal = total_missed_rx;
+
 	for (int i = 0; i < 16; i++) {
 		adapter->stats.qprc[i] += IXGBE_READ_REG(hw, IXGBE_QPRC(i));
 		adapter->stats.qptc[i] += IXGBE_READ_REG(hw, IXGBE_QPTC(i));
@@ -5252,10 +5253,10 @@
 	adapter->stats.ptc1522 += IXGBE_READ_REG(hw, IXGBE_PTC1522);
 	adapter->stats.bptc += IXGBE_READ_REG(hw, IXGBE_BPTC);
 	adapter->stats.xec += IXGBE_READ_REG(hw, IXGBE_XEC);
-	adapter->stats.fccrc += IXGBE_READ_REG(hw, IXGBE_FCCRC);
-	adapter->stats.fclast += IXGBE_READ_REG(hw, IXGBE_FCLAST);
 	/* Only read FCOE on 82599 */
 	if (hw->mac.type != ixgbe_mac_82598EB) {
+		adapter->stats.fccrc += IXGBE_READ_REG(hw, IXGBE_FCCRC);
+		adapter->stats.fclast += IXGBE_READ_REG(hw, IXGBE_FCLAST);
 		adapter->stats.fcoerpdc += IXGBE_READ_REG(hw, IXGBE_FCOERPDC);
 		adapter->stats.fcoeprc += IXGBE_READ_REG(hw, IXGBE_FCOEPRC);
 		adapter->stats.fcoeptc += IXGBE_READ_REG(hw, IXGBE_FCOEPTC);
@@ -5273,7 +5274,7 @@
 
 	/* Rx Errors */
 	ifp->if_ierrors = total_missed_rx + adapter->stats.crcerrs +
-		adapter->stats.rlec;
+		adapter->stats.rlec + adapter->dropped_pkts;
 }
 
 /** ixgbe_sysctl_tdh_handler - Handler function
@@ -5484,8 +5485,7 @@
 				"LRO Flushed");
 	}
 
-	/* MAC stats get the own sub node */
-
+	/* MAC stats get their own sub node */
 	stat_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "mac_stats", 
 				    CTLFLAG_RD, NULL, "MAC Statistics");
 	stat_list = SYSCTL_CHILDREN(stat_node);
@@ -5502,6 +5502,9 @@
 	SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "short_discards",
 			CTLFLAG_RD, &stats->mspdc,
 			"MAC Short Packets Discarded");
+	SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "missed_packets",
+			CTLFLAG_RD, &stats->mpctotal,
+			"Missed Packets");
 	SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "local_faults",
 			CTLFLAG_RD, &stats->mlfc,
 			"MAC Local Faults");

--Apple-Mail=_74B83304-D2B0-407D-A5AF-A78C022F5F90
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
	charset=us-ascii



--------------------------------------------------
Andrew Boyer	aboyer@averesystems.com





--Apple-Mail=_74B83304-D2B0-407D-A5AF-A78C022F5F90--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?C3008412-4F1E-4166-B7FF-1FA5E2F3F53E>