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
[-- Attachment #1 --]
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
[-- Attachment #2 --]
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");
[-- Attachment #3 --]
--------------------------------------------------
Andrew Boyer aboyer@averesystems.com
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?C3008412-4F1E-4166-B7FF-1FA5E2F3F53E>
