• E
    net: netif_tx_queue_stopped too expensive · 6a321cb3
    Eric Dumazet 提交于
    netif_tx_queue_stopped(txq) is most of the time false.
    
    Yet its cost is very expensive on SMP.
    
    static inline int netif_tx_queue_stopped(const struct netdev_queue *dev_queue)
    {
    	return test_bit(__QUEUE_STATE_XOFF, &dev_queue->state);
    }
    
    I saw this on oprofile hunting and bnx2 driver bnx2_tx_int().
    
    We probably should split "struct netdev_queue" in two parts, one
    being read mostly.
    
    __netif_tx_lock() touches _xmit_lock & xmit_lock_owner, these
    deserve a separate cache line.
    Signed-off-by: NEric Dumazet <dada1@cosmosbay.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    6a321cb3
netdevice.h 58.2 KB