On Apr 19, 2005, at 10:50 PM, Malli Chilakala wrote:
Performance optimizations to e100 Tx Path
So what is the net performance improvement with these changes?
- nic->tx_command = cpu_to_le16(cb_tx | cb_i | cb_tx_sf |
- ((nic->mac >= mac_82558_D101_A4) ? cb_cid : 0));
+ /* no interrupt for every tx completion, delay = 256us if not 557*/
+ nic->tx_command = cpu_to_le16(cb_tx | cb_tx_sf |
+ ((nic->mac >= mac_82558_D101_A4) ? cb_cid : cb_i));
Where is this 256us delay coming from?
/* Template for a freshly allocated RFD */
nic->blank_rfd.command = cpu_to_le16(cb_el);
@@ -1289,12 +1294,15 @@ static inline void e100_xmit_prepare(str
struct sk_buff *skb)
cb->command = nic->tx_command;
+ /* interrupt every 16 packets regardless of delay */
+ if((nic->cbs_avail & ~15) == nic->cbs_avail) cb->command |= cb_i;
You messed up Big Endian.
So you send out 15 packets with no i-bit set. Then what? No interrupt
means no NAPI means no cleanup of those 15 packet skbs.
P.S. I only saw this one patch for e100 but the subject line indicates
there are 6.