• Eric Dumazet's avatar
    ixgbe: Fix TX stats accounting · 60d51134
    Eric Dumazet authored
    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: default avatarEric Dumazet <eric.dumazet@gmail.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    60d51134
ixgbe_main.c 177 KB