]> git.baikalelectronics.ru Git - kernel.git/commit
net: tx scalability works : trans_start
authorEric Dumazet <dada1@cosmosbay.com>
Mon, 18 May 2009 03:55:16 +0000 (20:55 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 18 May 2009 03:55:16 +0000 (20:55 -0700)
commit3bc17055cb657ee585c284f65586ba17e14954a7
tree653590f3e325da5c4c1fc7d2c00bc196a3167f9d
parent58387d61d22ca42632dc0fbd69625d87b5875079
net: tx scalability works : trans_start

struct net_device trans_start field is a hot spot on SMP and high performance
devices, particularly multi queues ones, because every transmitter dirties
it. Is main use is tx watchdog and bonding alive checks.

But as most devices dont use NETIF_F_LLTX, we have to lock
a netdev_queue before calling their ndo_start_xmit(). So it makes
sense to move trans_start from net_device to netdev_queue. Its update
will occur on a already present (and in exclusive state) cache line, for
free.

We can do this transition smoothly. An old driver continue to
update dev->trans_start, while an updated one updates txq->trans_start.

Further patches could also put tx_bytes/tx_packets counters in
netdev_queue to avoid dirtying dev->stats (vlan device comes to mind)

Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/bonding/bond_main.c
include/linux/netdevice.h
net/sched/sch_generic.c