[NET]: Implement SKB fast cloning.
Protocols that make extensive use of SKB cloning, for example TCP, eat at least 2 allocations per packet sent as a result. To cut the kmalloc() count in half, we implement a pre-allocation scheme wherein we allocate 2 sk_buff objects in advance, then use a simple reference count to free up the memory at the correct time. Based upon an initial patch by Thomas Graf and suggestions from Herbert Xu. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
e92ae93a8a
commit
d179cd1292
@@ -1200,7 +1200,7 @@ static inline struct sk_buff *sk_stream_alloc_pskb(struct sock *sk,
|
||||
int hdr_len;
|
||||
|
||||
hdr_len = SKB_DATA_ALIGN(sk->sk_prot->max_header);
|
||||
skb = alloc_skb(size + hdr_len, gfp);
|
||||
skb = alloc_skb_fclone(size + hdr_len, gfp);
|
||||
if (skb) {
|
||||
skb->truesize += mem;
|
||||
if (sk->sk_forward_alloc >= (int)skb->truesize ||
|
||||
|
Reference in New Issue
Block a user