Hello!
Below is little patch to clean skb at xmit. It's old jungle trick Jamal
and I used w. tulip. Note we can now even decrease the size of TX ring.
It can increase TX performance from 800 kpps to
1125128pps 576Mb/sec (576065536bps) errors: 0
1124946pps 575Mb/sec (575972352bps) errors: 0
But suffers from scheduling problems as the previous patch. Often we just get
582108pps 298Mb/sec (298039296bps) errors: 0
When the sender CPU free (it's) skb's. we might get some "TX free affinity"
which are unrelated to irq affinity of course not 100% perfect.
And some of Scotts may still be used.
--- drivers/net/e1000/e1000.h.orig 2004-12-01 13:59:36.000000000 +0100
+++ drivers/net/e1000/e1000.h 2004-12-02 20:11:31.000000000 +0100
@@ -103,7 +103,7 @@
#define E1000_MAX_INTR 10
/* TX/RX descriptor defines */
-#define E1000_DEFAULT_TXD 256
+#define E1000_DEFAULT_TXD 128
#define E1000_MAX_TXD 256
#define E1000_MIN_TXD 80
#define E1000_MAX_82544_TXD 4096
--- drivers/net/e1000/e1000_main.c.orig 2004-12-01 13:59:36.000000000 +0100
+++ drivers/net/e1000/e1000_main.c 2004-12-02 20:37:40.000000000 +0100
@@ -1820,6 +1820,10 @@
return NETDEV_TX_LOCKED;
}
+
+ if( adapter->tx_ring.next_to_use - adapter->tx_ring.next_to_clean > 80 )
+ e1000_clean_tx_ring(adapter);
+
/* need: count + 2 desc gap to keep tail from touching
* head, otherwise try next time */
if(E1000_DESC_UNUSED(&adapter->tx_ring) < count + 2) {
--ro
|