J Hadi Salim <[EMAIL PROTECTED]> wrote on 05/11/2007 01:41:27 AM: > > It's not just small packets. The cost of calling hard_start_xmit/byte > > was rather high on your particular device. I've seen PCI read > > transaction in hard_start_xmit taking ~10,000 cycles on one particular > > device. Count the cycles your brand of NIC is taking in it's > > xmit_routine. The worse it is, the stronger your case for cluster > > transmits. > > You would need to almost re-write the driver to make sure it does IO > which is taking advantage of the batching.
I didn't try to optimize the driver to take any real advantage, I coded it as simply as : top: next = skb->skb_flink; Original driver code here, or another option is to remove the locking and put it before the "top:" above, no other changes. skb = next; if (skb) goto top; This way, the diffs are minimal. However, driver experts might know of some tricks to optimize this, since most drivers have a hundred checks before sending one skb, and whether some optimization to avoid that for each skb is possible. > You could avoid totaly requeueing by asking the driver how much space it > has. Once you shove down to it a number of packets, you are then > guaranteed they will never be requeued (refer to the slides i pointed to > earlier). This is a good idea, I will look at your slides to see what this exactly is. However, even with this check, drivers will return error, eg trylock failed or, like the e1000 has - fifo_workaround failures. But I still think it will significantly reduce the failures. Right now, I get a lot of requeue's. thanks, - KK - 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