From: Eliezer Tamir <eliezer.tamir@linux.intel.com> To: Dave Miller <davem@davemloft.net> Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Jesse Brandeburg <jesse.brandeburg@intel.com>, Don Skidmore <donald.c.skidmore@intel.com>, e1000-devel@lists.sourceforge.net, Willem de Bruijn <willemb@google.com>, Andi Kleen <andi@firstfloor.org>, HPA <hpa@zytor.com>, Eliezer Tamir <eliezer@tamir.org.il> Subject: [PATCH v3 net-next 4/4] ixgbe: add extra stats for ndo_ll_poll Date: Mon, 20 May 2013 13:16:31 +0300 [thread overview] Message-ID: <20130520101631.14133.63784.stgit@ladj378.jer.intel.com> (raw) In-Reply-To: <20130520101552.14133.45953.stgit@ladj378.jer.intel.com> Add additional statistics to the ixgbe driver for ndo_ll_poll Defined under LL_EXTENDED_STATS Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com> Tested-by: Willem de Bruijn <willemb@google.com> Signed-off-by: Eliezer Tamir <eliezer.tamir@linux.intel.com> --- drivers/net/ethernet/intel/ixgbe/ixgbe.h | 14 ++++++++ drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 40 ++++++++++++++++++++++ drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 6 +++ 3 files changed, 60 insertions(+), 0 deletions(-) diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe.h b/drivers/net/ethernet/intel/ixgbe/ixgbe.h index 72be661..2a7de7c 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h @@ -52,6 +52,9 @@ #include <linux/dca.h> #endif +#ifdef CONFIG_INET_LL_RX_POLL +#define LL_EXTENDED_STATS +#endif /* CONFIG_INET_LL_RX_POLL */ /* common prefix used by pr_<> macros */ #undef pr_fmt #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt @@ -182,6 +185,11 @@ struct ixgbe_rx_buffer { struct ixgbe_queue_stats { u64 packets; u64 bytes; +#ifdef LL_EXTENDED_STATS + u64 yields; + u64 misses; + u64 cleaned; +#endif /* LL_EXTENDED_STATS */ }; struct ixgbe_tx_queue_stats { @@ -389,6 +397,9 @@ static inline int ixgbe_qv_lock_napi(struct ixgbe_q_vector *q_vector) WARN_ON(q_vector->state & IXGBE_QV_STATE_NAPI); q_vector->state |= IXGBE_QV_STATE_NAPI_YIELD; rc = false; +#ifdef LL_EXTENDED_STATS + q_vector->tx.ring->stats.yields++; +#endif } else /* we don't care if someone yielded */ q_vector->state = IXGBE_QV_STATE_NAPI; @@ -419,6 +430,9 @@ static inline int ixgbe_qv_lock_poll(struct ixgbe_q_vector *q_vector) if ((q_vector->state & IXGBE_QV_LOCKED)) { q_vector->state |= IXGBE_QV_STATE_POLL_YIELD; rc = false; +#ifdef LL_EXTENDED_STATS + q_vector->rx.ring->stats.yields++; +#endif } else /* preserve yield marks */ q_vector->state |= IXGBE_QV_STATE_POLL; diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c index d375472..24e2e7a 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c @@ -1054,6 +1054,12 @@ static void ixgbe_get_ethtool_stats(struct net_device *netdev, data[i] = 0; data[i+1] = 0; i += 2; +#ifdef LL_EXTENDED_STATS + data[i] = 0; + data[i+1] = 0; + data[i+2] = 0; + i += 3; +#endif continue; } @@ -1063,6 +1069,12 @@ static void ixgbe_get_ethtool_stats(struct net_device *netdev, data[i+1] = ring->stats.bytes; } while (u64_stats_fetch_retry_bh(&ring->syncp, start)); i += 2; +#ifdef LL_EXTENDED_STATS + data[i] = ring->stats.yields; + data[i+1] = ring->stats.misses; + data[i+2] = ring->stats.cleaned; + i += 3; +#endif } for (j = 0; j < IXGBE_NUM_RX_QUEUES; j++) { ring = adapter->rx_ring[j]; @@ -1070,6 +1082,12 @@ static void ixgbe_get_ethtool_stats(struct net_device *netdev, data[i] = 0; data[i+1] = 0; i += 2; +#ifdef LL_EXTENDED_STATS + data[i] = 0; + data[i+1] = 0; + data[i+2] = 0; + i += 3; +#endif continue; } @@ -1079,6 +1097,12 @@ static void ixgbe_get_ethtool_stats(struct net_device *netdev, data[i+1] = ring->stats.bytes; } while (u64_stats_fetch_retry_bh(&ring->syncp, start)); i += 2; +#ifdef LL_EXTENDED_STATS + data[i] = ring->stats.yields; + data[i+1] = ring->stats.misses; + data[i+2] = ring->stats.cleaned; + i += 3; +#endif } for (j = 0; j < IXGBE_MAX_PACKET_BUFFERS; j++) { @@ -1115,12 +1139,28 @@ static void ixgbe_get_strings(struct net_device *netdev, u32 stringset, p += ETH_GSTRING_LEN; sprintf(p, "tx_queue_%u_bytes", i); p += ETH_GSTRING_LEN; +#ifdef LL_EXTENDED_STATS + sprintf(p, "tx_q_%u_napi_yield", i); + p += ETH_GSTRING_LEN; + sprintf(p, "tx_q_%u_misses", i); + p += ETH_GSTRING_LEN; + sprintf(p, "tx_q_%u_cleaned", i); + p += ETH_GSTRING_LEN; +#endif /* LL_EXTENDED_STATS */ } for (i = 0; i < IXGBE_NUM_RX_QUEUES; i++) { sprintf(p, "rx_queue_%u_packets", i); p += ETH_GSTRING_LEN; sprintf(p, "rx_queue_%u_bytes", i); p += ETH_GSTRING_LEN; +#ifdef LL_EXTENDED_STATS + sprintf(p, "rx_q_%u_ll_poll_yield", i); + p += ETH_GSTRING_LEN; + sprintf(p, "rx_q_%u_misses", i); + p += ETH_GSTRING_LEN; + sprintf(p, "rx_q_%u_cleaned", i); + p += ETH_GSTRING_LEN; +#endif /* LL_EXTENDED_STATS */ } for (i = 0; i < IXGBE_MAX_PACKET_BUFFERS; i++) { sprintf(p, "tx_pb_%u_pxon", i); diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index 628b7b1..1b2214b 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -2033,6 +2033,12 @@ static int ixgbe_low_latency_recv(struct napi_struct *napi) ixgbe_for_each_ring(ring, q_vector->rx) { found = ixgbe_clean_rx_irq(q_vector, ring, 4); +#ifdef LL_EXTENDED_STATS + if (found) + ring->stats.cleaned += found; + else + ring->stats.misses++; +#endif if (found) break; }
WARNING: multiple messages have this Message-ID (diff)
From: Eliezer Tamir <eliezer.tamir@linux.intel.com> To: Dave Miller <davem@davemloft.net> Cc: Willem de Bruijn <willemb@google.com>, e1000-devel@lists.sourceforge.net, netdev@vger.kernel.org, HPA <hpa@zytor.com>, linux-kernel@vger.kernel.org, Jesse Brandeburg <jesse.brandeburg@intel.com>, Andi Kleen <andi@firstfloor.org>, Eliezer Tamir <eliezer@tamir.org.il> Subject: [PATCH v3 net-next 4/4] ixgbe: add extra stats for ndo_ll_poll Date: Mon, 20 May 2013 13:16:31 +0300 [thread overview] Message-ID: <20130520101631.14133.63784.stgit@ladj378.jer.intel.com> (raw) In-Reply-To: <20130520101552.14133.45953.stgit@ladj378.jer.intel.com> Add additional statistics to the ixgbe driver for ndo_ll_poll Defined under LL_EXTENDED_STATS Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com> Tested-by: Willem de Bruijn <willemb@google.com> Signed-off-by: Eliezer Tamir <eliezer.tamir@linux.intel.com> --- drivers/net/ethernet/intel/ixgbe/ixgbe.h | 14 ++++++++ drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 40 ++++++++++++++++++++++ drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 6 +++ 3 files changed, 60 insertions(+), 0 deletions(-) diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe.h b/drivers/net/ethernet/intel/ixgbe/ixgbe.h index 72be661..2a7de7c 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h @@ -52,6 +52,9 @@ #include <linux/dca.h> #endif +#ifdef CONFIG_INET_LL_RX_POLL +#define LL_EXTENDED_STATS +#endif /* CONFIG_INET_LL_RX_POLL */ /* common prefix used by pr_<> macros */ #undef pr_fmt #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt @@ -182,6 +185,11 @@ struct ixgbe_rx_buffer { struct ixgbe_queue_stats { u64 packets; u64 bytes; +#ifdef LL_EXTENDED_STATS + u64 yields; + u64 misses; + u64 cleaned; +#endif /* LL_EXTENDED_STATS */ }; struct ixgbe_tx_queue_stats { @@ -389,6 +397,9 @@ static inline int ixgbe_qv_lock_napi(struct ixgbe_q_vector *q_vector) WARN_ON(q_vector->state & IXGBE_QV_STATE_NAPI); q_vector->state |= IXGBE_QV_STATE_NAPI_YIELD; rc = false; +#ifdef LL_EXTENDED_STATS + q_vector->tx.ring->stats.yields++; +#endif } else /* we don't care if someone yielded */ q_vector->state = IXGBE_QV_STATE_NAPI; @@ -419,6 +430,9 @@ static inline int ixgbe_qv_lock_poll(struct ixgbe_q_vector *q_vector) if ((q_vector->state & IXGBE_QV_LOCKED)) { q_vector->state |= IXGBE_QV_STATE_POLL_YIELD; rc = false; +#ifdef LL_EXTENDED_STATS + q_vector->rx.ring->stats.yields++; +#endif } else /* preserve yield marks */ q_vector->state |= IXGBE_QV_STATE_POLL; diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c index d375472..24e2e7a 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c @@ -1054,6 +1054,12 @@ static void ixgbe_get_ethtool_stats(struct net_device *netdev, data[i] = 0; data[i+1] = 0; i += 2; +#ifdef LL_EXTENDED_STATS + data[i] = 0; + data[i+1] = 0; + data[i+2] = 0; + i += 3; +#endif continue; } @@ -1063,6 +1069,12 @@ static void ixgbe_get_ethtool_stats(struct net_device *netdev, data[i+1] = ring->stats.bytes; } while (u64_stats_fetch_retry_bh(&ring->syncp, start)); i += 2; +#ifdef LL_EXTENDED_STATS + data[i] = ring->stats.yields; + data[i+1] = ring->stats.misses; + data[i+2] = ring->stats.cleaned; + i += 3; +#endif } for (j = 0; j < IXGBE_NUM_RX_QUEUES; j++) { ring = adapter->rx_ring[j]; @@ -1070,6 +1082,12 @@ static void ixgbe_get_ethtool_stats(struct net_device *netdev, data[i] = 0; data[i+1] = 0; i += 2; +#ifdef LL_EXTENDED_STATS + data[i] = 0; + data[i+1] = 0; + data[i+2] = 0; + i += 3; +#endif continue; } @@ -1079,6 +1097,12 @@ static void ixgbe_get_ethtool_stats(struct net_device *netdev, data[i+1] = ring->stats.bytes; } while (u64_stats_fetch_retry_bh(&ring->syncp, start)); i += 2; +#ifdef LL_EXTENDED_STATS + data[i] = ring->stats.yields; + data[i+1] = ring->stats.misses; + data[i+2] = ring->stats.cleaned; + i += 3; +#endif } for (j = 0; j < IXGBE_MAX_PACKET_BUFFERS; j++) { @@ -1115,12 +1139,28 @@ static void ixgbe_get_strings(struct net_device *netdev, u32 stringset, p += ETH_GSTRING_LEN; sprintf(p, "tx_queue_%u_bytes", i); p += ETH_GSTRING_LEN; +#ifdef LL_EXTENDED_STATS + sprintf(p, "tx_q_%u_napi_yield", i); + p += ETH_GSTRING_LEN; + sprintf(p, "tx_q_%u_misses", i); + p += ETH_GSTRING_LEN; + sprintf(p, "tx_q_%u_cleaned", i); + p += ETH_GSTRING_LEN; +#endif /* LL_EXTENDED_STATS */ } for (i = 0; i < IXGBE_NUM_RX_QUEUES; i++) { sprintf(p, "rx_queue_%u_packets", i); p += ETH_GSTRING_LEN; sprintf(p, "rx_queue_%u_bytes", i); p += ETH_GSTRING_LEN; +#ifdef LL_EXTENDED_STATS + sprintf(p, "rx_q_%u_ll_poll_yield", i); + p += ETH_GSTRING_LEN; + sprintf(p, "rx_q_%u_misses", i); + p += ETH_GSTRING_LEN; + sprintf(p, "rx_q_%u_cleaned", i); + p += ETH_GSTRING_LEN; +#endif /* LL_EXTENDED_STATS */ } for (i = 0; i < IXGBE_MAX_PACKET_BUFFERS; i++) { sprintf(p, "tx_pb_%u_pxon", i); diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index 628b7b1..1b2214b 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -2033,6 +2033,12 @@ static int ixgbe_low_latency_recv(struct napi_struct *napi) ixgbe_for_each_ring(ring, q_vector->rx) { found = ixgbe_clean_rx_irq(q_vector, ring, 4); +#ifdef LL_EXTENDED_STATS + if (found) + ring->stats.cleaned += found; + else + ring->stats.misses++; +#endif if (found) break; } ------------------------------------------------------------------------------ AlienVault Unified Security Management (USM) platform delivers complete security visibility with the essential security capabilities. Easily and efficiently configure, manage, and operate all of your security controls from a single console and one unified framework. Download a free trial. http://p.sf.net/sfu/alienvault_d2d _______________________________________________ E1000-devel mailing list E1000-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/e1000-devel To learn more about Intel® Ethernet, visit http://communities.intel.com/community/wired
next prev parent reply other threads:[~2013-05-20 10:16 UTC|newest] Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top 2013-05-20 10:15 [PATCH v3 net-next 0/4] net: low latency Ethernet device polling Eliezer Tamir 2013-05-20 10:15 ` Eliezer Tamir 2013-05-20 10:16 ` [PATCH v3 net-next 1/4] net: implement support for low latency socket polling Eliezer Tamir 2013-05-20 10:16 ` Eliezer Tamir 2013-05-20 15:29 ` Eric Dumazet 2013-05-20 19:40 ` David Miller 2013-05-21 7:28 ` Eliezer Tamir 2013-05-21 13:28 ` Eric Dumazet 2013-05-21 17:02 ` Pekka Riikonen 2013-05-21 17:48 ` Eric Dumazet 2013-05-21 17:51 ` Eric Dumazet 2013-05-21 17:51 ` Eric Dumazet 2013-05-21 19:25 ` Eliezer Tamir 2013-05-21 19:25 ` Eliezer Tamir 2013-05-21 19:29 ` Eric Dumazet 2013-05-21 19:29 ` Eric Dumazet 2013-05-21 18:49 ` David Miller 2013-05-21 19:31 ` Pekka Riikonen 2013-05-21 19:31 ` Pekka Riikonen 2013-05-20 10:16 ` [PATCH v3 net-next 2/4] tcp: add TCP support for low latency receive poll Eliezer Tamir 2013-05-20 10:16 ` Eliezer Tamir 2013-05-20 13:49 ` Eric Dumazet 2013-05-20 14:59 ` Eliezer Tamir 2013-05-20 14:59 ` Eliezer Tamir 2013-05-20 10:16 ` [PATCH v3 net-next 3/4] ixgbe: Add support for ndo_ll_poll Eliezer Tamir 2013-05-20 10:16 ` Eliezer Tamir 2013-05-20 20:20 ` Or Gerlitz 2013-05-20 20:20 ` Or Gerlitz 2013-05-20 20:33 ` Andi Kleen 2013-05-20 20:42 ` Or Gerlitz 2013-05-20 21:01 ` Andi Kleen 2013-05-21 6:23 ` Or Gerlitz 2013-05-21 6:23 ` Or Gerlitz 2013-05-21 6:54 ` Eliezer Tamir 2013-05-21 6:54 ` Eliezer Tamir 2013-05-21 7:06 ` Eilon Greenstein 2013-05-21 7:06 ` Eilon Greenstein 2013-05-21 7:14 ` David Miller 2013-05-21 8:24 ` Or Gerlitz 2013-05-21 8:24 ` Or Gerlitz 2013-05-21 8:31 ` Eliezer Tamir 2013-05-21 8:31 ` Eliezer Tamir 2013-05-21 8:39 ` David Miller 2013-05-21 8:42 ` Eliezer Tamir 2013-05-21 8:42 ` Eliezer Tamir 2013-05-21 8:43 ` Or Gerlitz 2013-05-21 8:43 ` Or Gerlitz 2013-05-21 10:27 ` Eliezer Tamir 2013-05-21 10:41 ` Or Gerlitz 2013-05-21 8:21 ` Or Gerlitz 2013-05-21 8:21 ` Or Gerlitz 2013-05-21 8:28 ` Eilon Greenstein 2013-05-21 8:28 ` Eilon Greenstein 2013-05-21 14:19 ` Willem de Bruijn 2013-05-21 14:19 ` Willem de Bruijn 2013-05-20 10:16 ` Eliezer Tamir [this message] 2013-05-20 10:16 ` [PATCH v3 net-next 4/4] ixgbe: add extra stats " Eliezer Tamir 2013-05-21 12:06 ` [PATCH v3 net-next 0/4] net: low latency Ethernet device polling Alex Rosenbaum 2013-05-21 12:29 ` Eliezer Tamir 2013-05-21 13:15 ` Alex Rosenbaum 2013-05-21 13:15 ` Alex Rosenbaum 2013-05-21 13:31 ` Eric Dumazet 2013-05-23 11:06 ` Eliezer Tamir 2013-05-23 11:45 ` Alex Rosenbaum 2013-05-21 14:30 ` Willem de Bruijn 2013-05-21 14:30 ` Willem de Bruijn 2013-05-21 18:15 ` Ben Hutchings 2013-05-21 18:15 ` Ben Hutchings 2013-05-22 9:35 ` Eliezer Tamir
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20130520101631.14133.63784.stgit@ladj378.jer.intel.com \ --to=eliezer.tamir@linux.intel.com \ --cc=andi@firstfloor.org \ --cc=davem@davemloft.net \ --cc=donald.c.skidmore@intel.com \ --cc=e1000-devel@lists.sourceforge.net \ --cc=eliezer@tamir.org.il \ --cc=hpa@zytor.com \ --cc=jesse.brandeburg@intel.com \ --cc=linux-kernel@vger.kernel.org \ --cc=netdev@vger.kernel.org \ --cc=willemb@google.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.