]> git.baikalelectronics.ru Git - kernel.git/commit
net: __alloc_skb() speedup
authorEric Dumazet <eric.dumazet@gmail.com>
Wed, 5 May 2010 08:07:37 +0000 (01:07 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 5 May 2010 08:07:37 +0000 (01:07 -0700)
commit82ef5a1cd127ef16cf8aaf0d239a61f9ce602ebb
tree177c324eb0cf7e687d1bbd10a6add3a7d5979002
parentaa2a61e7b8b48254e44ef237e963e96b2b2d1c47
net: __alloc_skb() speedup

With following patch I can reach maximum rate of my pktgen+udpsink
simulator :
- 'old' machine : dual quad core E5450  @3.00GHz
- 64 UDP rx flows (only differ by destination port)
- RPS enabled, NIC interrupts serviced on cpu0
- rps dispatched on 7 other cores. (~130.000 IPI per second)
- SLAB allocator (faster than SLUB in this workload)
- tg3 NIC
- 1.080.000 pps without a single drop at NIC level.

Idea is to add two prefetchw() calls in __alloc_skb(), one to prefetch
first sk_buff cache line, the second to prefetch the shinfo part.

Also using one memset() to initialize all skb_shared_info fields instead
of one by one to reduce number of instructions, using long word moves.

All skb_shared_info fields before 'dataref' are cleared in
__alloc_skb().

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/skbuff.h
net/core/skbuff.c