Files
linux/drivers/net
Eric Dumazet d62fda082c bnx2: bnx2_tx_int() optimizations
When using bnx2 in a high transmit load, bnx2_tx_int() cost is pretty high.

There are two reasons.

One is an expensive call to bnx2_get_hw_tx_cons(bnapi) for each freed skb

One is cpu stalls when accessing skb_is_gso(skb) / skb_shinfo(skb)->nr_frags
because of two cache line misses.
(One to get skb->end/head to compute skb_shinfo(skb),
 one to get is_gso/nr_frags)

This patch :

1) avoids calling bnx2_get_hw_tx_cons(bnapi) too many times.

2) makes bnx2_start_xmit() cache is_gso & nr_frags into sw_tx_bd descriptor.
   This uses a litle bit more ram (256 longs per device on x86), but helps a lot.

3) uses a prefetch(&skb->end) to speedup dev_kfree_skb(), bringing
  cache line that will be needed in skb_release_data()

result is 5 % bandwidth increase in benchmarks, involving UDP or TCP receive
 & transmits, when a cpu is dedicated to ksoftirqd for bnx2.

bnx2_tx_int going from 3.33 % cpu to 0.5 % cpu in oprofile

Note : skb_dma_unmap() still very expensive but this is for another patch,
not related to bnx2 (2.9 % of cpu, while it does nothing on x86_32)

Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2009-05-17 20:47:44 -07:00
..
2009-04-11 02:53:56 -07:00
2008-12-17 15:37:55 -08:00
2009-04-13 15:16:33 -07:00
2009-04-28 02:05:21 -07:00
2009-04-21 18:12:11 -07:00
2009-04-17 15:45:15 -07:00
2009-05-17 11:59:50 -07:00
2009-01-21 14:02:21 -08:00
2008-12-08 01:14:16 -08:00
2009-03-27 00:46:38 -07:00
…
…
2009-01-21 14:02:23 -08:00
2009-01-21 14:02:24 -08:00
2009-01-21 14:02:24 -08:00
…
2009-01-21 14:02:25 -08:00
…
…
…
…
2009-04-24 04:45:33 -07:00
2009-05-17 11:59:51 -07:00
2009-04-14 21:57:00 -07:00
…
2008-11-25 18:25:32 -08:00
2009-04-11 02:53:46 -07:00
…
2009-01-07 18:10:24 -08:00
…
2009-04-14 21:57:02 -07:00
2009-04-14 21:57:03 -07:00
2009-04-16 02:20:06 -07:00
…
2009-04-04 16:51:14 -07:00
2009-05-17 20:47:44 -07:00
2009-05-17 20:47:44 -07:00
2009-03-02 22:32:48 -08:00
2009-02-15 23:32:01 -08:00
2009-02-15 23:32:01 -08:00
2009-02-15 23:32:01 -08:00
2009-03-02 22:32:43 -08:00
2009-04-27 03:27:43 -07:00
…
2009-04-16 02:20:07 -07:00
…
2009-01-07 17:34:36 -08:00
…
2009-01-07 17:34:36 -08:00
…
2009-04-14 21:57:04 -07:00
…
…
…
2009-04-16 02:20:08 -07:00
…
…
2009-01-07 17:30:09 -08:00
2009-01-21 14:33:50 -08:00
2009-04-08 15:56:33 -07:00
…
…
2009-04-16 02:34:48 -07:00
2009-02-04 16:43:44 -08:00
…
2009-02-26 21:02:19 -08:00
2008-11-25 18:24:57 -08:00
2009-04-16 02:20:08 -07:00
…
…
2009-05-17 15:19:36 -07:00
2009-01-06 10:47:44 -08:00
…
2009-04-13 15:16:31 -07:00
…
2009-04-16 02:20:15 -07:00
2009-03-27 00:46:48 -07:00
2009-04-16 02:20:15 -07:00
2008-11-25 18:24:38 -08:00
2009-04-20 02:25:26 -07:00
2009-04-13 15:16:29 -07:00
2009-05-04 11:08:41 -07:00
…
2009-04-16 02:20:16 -07:00
…
2009-04-16 02:20:16 -07:00
2009-04-13 15:16:26 -07:00
2009-04-16 02:20:17 -07:00
…
2009-04-16 02:20:18 -07:00
2009-04-16 02:20:21 -07:00
2009-04-04 16:38:42 -07:00
2009-04-16 02:20:22 -07:00
2009-03-27 00:46:53 -07:00
…
2009-03-27 00:46:53 -07:00
…
2009-03-28 23:37:27 -07:00
…
2009-04-08 15:52:16 -07:00
2009-01-07 17:26:48 -08:00
2009-03-13 16:09:12 -07:00
2009-03-13 16:09:12 -07:00
2009-03-13 16:09:12 -07:00
…
2009-04-13 16:21:03 -07:00
2009-04-16 02:20:24 -07:00
…
2009-04-29 17:32:34 -07:00
2009-04-29 17:32:34 -07:00
…
2009-01-07 17:56:54 -08:00
2009-04-16 02:20:25 -07:00
…
2009-04-13 15:16:25 -07:00
…
…
…
…
2009-01-07 18:09:36 -08:00
2009-04-16 02:20:25 -07:00
…
2009-03-27 00:46:48 -07:00
…
…
…
2008-11-25 18:25:49 -08:00
…
…
…
…
2009-03-20 00:51:22 -07:00
…
2009-04-13 15:16:23 -07:00
2009-04-21 01:41:03 -07:00
…
2009-01-11 00:06:36 -08:00
2009-04-13 15:16:21 -07:00
2009-01-21 14:02:31 -08:00