From: Eric Dumazet <[EMAIL PROTECTED]> Date: Tue, 23 Aug 2005 23:25:07 +0200
> Looking at the qdisc_restart() function, it seems expensive to dequeue a > packet, attempt to xmit it, requeue it, over and over. > Maybe some kind of throtling is necessary ? Or is it a tg3 bug failing to set > a stop condition ? No, all of your cpus are racing to get the transmit lock of the tg3 driver. Whoever wins the race gets to queue the packet, the others have to back off. It does indeed look stupid that we resend the packet to network taps repeatedly if we need to requeue. I wonder what a clean way is to fix that. Probably the best idea is to grab a reference to the SKB if netdev_nit, before we send it off the the driver, and if the transmit succeeds we actually call dev_queue_xmit_nit(). Actually, that won't work due to skb_header_cloned(). If we pass the packet, or will, to the network taps, we have to make sure skb_header_cloned() returns one else TSO mangling of the TCP and IP headers by the driver will be seen by the network taps. So, this isn't easy to fix at all :) - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html