aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2014-10-02 11:24:21 -0400
committerDavid S. Miller <davem@davemloft.net>2014-10-04 20:04:14 -0400
commit9fab426de78140dc5cb0b85bbee6042c9c3d5ca5 (patch)
tree191460414031ac67841797f90acece7b79b3d6bb
parent6106253e69413785b29b9bfb493e2544c70461e7 (diff)
mlx4: add a new xmit_more counter
ethtool -S reports a new counter, tracking number of time doorbell was not triggered, because skb->xmit_more was set. $ ethtool -S eth0 | egrep "tx_packet|xmit_more" tx_packets: 2413288400 xmit_more: 666121277 I merged the tso_packet false sharing avoidance in this patch as well. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/en_ethtool.c1
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/en_port.c17
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/en_tx.c4
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/mlx4_en.h5
4 files changed, 19 insertions, 8 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
index 35ff2925110a..42c9f8b09a6e 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_ethtool.c
@@ -112,6 +112,7 @@ static const char main_strings[][ETH_GSTRING_LEN] = {
112 112
113 /* port statistics */ 113 /* port statistics */
114 "tso_packets", 114 "tso_packets",
115 "xmit_more",
115 "queue_stopped", "wake_queue", "tx_timeout", "rx_alloc_failed", 116 "queue_stopped", "wake_queue", "tx_timeout", "rx_alloc_failed",
116 "rx_csum_good", "rx_csum_none", "tx_chksum_offload", 117 "rx_csum_good", "rx_csum_none", "tx_chksum_offload",
117 118
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_port.c b/drivers/net/ethernet/mellanox/mlx4/en_port.c
index c2cfb05e7290..0a0261d128b9 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_port.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_port.c
@@ -150,14 +150,19 @@ int mlx4_en_DUMP_ETH_STATS(struct mlx4_en_dev *mdev, u8 port, u8 reset)
150 priv->port_stats.tx_chksum_offload = 0; 150 priv->port_stats.tx_chksum_offload = 0;
151 priv->port_stats.queue_stopped = 0; 151 priv->port_stats.queue_stopped = 0;
152 priv->port_stats.wake_queue = 0; 152 priv->port_stats.wake_queue = 0;
153 priv->port_stats.tso_packets = 0;
154 priv->port_stats.xmit_more = 0;
153 155
154 for (i = 0; i < priv->tx_ring_num; i++) { 156 for (i = 0; i < priv->tx_ring_num; i++) {
155 stats->tx_packets += priv->tx_ring[i]->packets; 157 const struct mlx4_en_tx_ring *ring = priv->tx_ring[i];
156 stats->tx_bytes += priv->tx_ring[i]->bytes; 158
157 priv->port_stats.tx_chksum_offload += priv->tx_ring[i]->tx_csum; 159 stats->tx_packets += ring->packets;
158 priv->port_stats.queue_stopped += 160 stats->tx_bytes += ring->bytes;
159 priv->tx_ring[i]->queue_stopped; 161 priv->port_stats.tx_chksum_offload += ring->tx_csum;
160 priv->port_stats.wake_queue += priv->tx_ring[i]->wake_queue; 162 priv->port_stats.queue_stopped += ring->queue_stopped;
163 priv->port_stats.wake_queue += ring->wake_queue;
164 priv->port_stats.tso_packets += ring->tso_packets;
165 priv->port_stats.xmit_more += ring->xmit_more;
161 } 166 }
162 167
163 stats->rx_errors = be64_to_cpu(mlx4_en_stats->PCS) + 168 stats->rx_errors = be64_to_cpu(mlx4_en_stats->PCS) +
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
index adedc47e947d..0c501253fdab 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
@@ -840,7 +840,7 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev)
840 * note that we already verified that it is linear */ 840 * note that we already verified that it is linear */
841 memcpy(tx_desc->lso.header, skb->data, lso_header_size); 841 memcpy(tx_desc->lso.header, skb->data, lso_header_size);
842 842
843 priv->port_stats.tso_packets++; 843 ring->tso_packets++;
844 i = ((skb->len - lso_header_size) / skb_shinfo(skb)->gso_size) + 844 i = ((skb->len - lso_header_size) / skb_shinfo(skb)->gso_size) +
845 !!((skb->len - lso_header_size) % skb_shinfo(skb)->gso_size); 845 !!((skb->len - lso_header_size) % skb_shinfo(skb)->gso_size);
846 tx_info->nr_bytes = skb->len + (i - 1) * lso_header_size; 846 tx_info->nr_bytes = skb->len + (i - 1) * lso_header_size;
@@ -910,6 +910,8 @@ netdev_tx_t mlx4_en_xmit(struct sk_buff *skb, struct net_device *dev)
910 wmb(); 910 wmb();
911 iowrite32be(ring->doorbell_qpn, 911 iowrite32be(ring->doorbell_qpn,
912 ring->bf.uar->map + MLX4_SEND_DOORBELL); 912 ring->bf.uar->map + MLX4_SEND_DOORBELL);
913 } else {
914 ring->xmit_more++;
913 } 915 }
914 } 916 }
915 917
diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
index 6a4fc2394cf2..84c9d5dbfa4f 100644
--- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
@@ -279,6 +279,8 @@ struct mlx4_en_tx_ring {
279 unsigned long tx_csum; 279 unsigned long tx_csum;
280 unsigned long queue_stopped; 280 unsigned long queue_stopped;
281 unsigned long wake_queue; 281 unsigned long wake_queue;
282 unsigned long tso_packets;
283 unsigned long xmit_more;
282 struct mlx4_bf bf; 284 struct mlx4_bf bf;
283 bool bf_enabled; 285 bool bf_enabled;
284 bool bf_alloced; 286 bool bf_alloced;
@@ -426,6 +428,7 @@ struct mlx4_en_pkt_stats {
426 428
427struct mlx4_en_port_stats { 429struct mlx4_en_port_stats {
428 unsigned long tso_packets; 430 unsigned long tso_packets;
431 unsigned long xmit_more;
429 unsigned long queue_stopped; 432 unsigned long queue_stopped;
430 unsigned long wake_queue; 433 unsigned long wake_queue;
431 unsigned long tx_timeout; 434 unsigned long tx_timeout;
@@ -433,7 +436,7 @@ struct mlx4_en_port_stats {
433 unsigned long rx_chksum_good; 436 unsigned long rx_chksum_good;
434 unsigned long rx_chksum_none; 437 unsigned long rx_chksum_none;
435 unsigned long tx_chksum_offload; 438 unsigned long tx_chksum_offload;
436#define NUM_PORT_STATS 8 439#define NUM_PORT_STATS 9
437}; 440};
438 441
439struct mlx4_en_perf_stats { 442struct mlx4_en_perf_stats {