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

Reply via email to