net: Always allocate at least 16 skb frags regardless of page size
authorAnton Blanchard <anton@samba.org>
Sun, 27 Mar 2011 14:57:26 +0000 (14:57 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 29 Mar 2011 05:26:32 +0000 (22:26 -0700)
When analysing performance of the cxgb3 on a ppc64 box I noticed that
we weren't doing much GRO merging. It turns out we are limited by the
number of SKB frags:

#define MAX_SKB_FRAGS (65536/PAGE_SIZE + 2)

With a 4kB page size we have 18 frags, but with a 64kB page size we
only have 3 frags.

I ran a single stream TCP bandwidth test to compare the performance of

Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/skbuff.h

index 24cfa626931ee56d45d8c6e0cdfa8b0474577425..239083bfea13d642c2c11d30398cc0365071b55c 100644 (file)
@@ -122,8 +122,14 @@ struct sk_buff_head {
 
 struct sk_buff;
 
-/* To allow 64K frame to be packed as single skb without frag_list */
+/* To allow 64K frame to be packed as single skb without frag_list. Since
+ * GRO uses frags we allocate at least 16 regardless of page size.
+ */
+#if (65536/PAGE_SIZE + 2) < 16
+#define MAX_SKB_FRAGS 16
+#else
 #define MAX_SKB_FRAGS (65536/PAGE_SIZE + 2)
+#endif
 
 typedef struct skb_frag_struct skb_frag_t;