ixgbe: Fix TX stats accounting
authorEric Dumazet <eric.dumazet@gmail.com>
Tue, 8 Dec 2009 07:22:03 +0000 (07:22 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 9 Dec 2009 04:10:12 +0000 (20:10 -0800)
commit60d51134281fbeb352013d782a440fb338d31f01
tree36df3a263cf024612e1c62c8210bfbfe2d67a0d3
parent3421eecdee750bafc78b12ac25b3e980195265eb
ixgbe: Fix TX stats accounting

Here is an updated version, because ixgbe_get_ethtool_stats()
needs to call dev_get_stats() or "ethtool -S" wont give
correct tx_bytes/tx_packets values.

Several cpus can update netdev->stats.tx_bytes & netdev->stats.tx_packets
in parallel. In this case, TX stats are under estimated and false sharing
takes place.

After a pktgen session sending exactly 200000000 packets :
# ifconfig fiber0 | grep TX
          TX packets:198501982 errors:0 dropped:0 overruns:0 carrier:0

Multi queue devices should instead use txq->tx_bytes & txq->tx_packets
in their xmit() method (appropriate txq lock already held by caller, no
cache line miss), or use appropriate locking.

After patch, same pktgen session gives :

# ifconfig fiber0 | grep TX
          TX packets:200000000 errors:0 dropped:0 overruns:0 carrier:0

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ixgbe/ixgbe_ethtool.c
drivers/net/ixgbe/ixgbe_main.c