Thread (16 messages) 16 messages, 3 authors, 2012-02-01

Re: [PATCH v3 1/6] net: pad skb data and shinfo as a whole rather than individually

From: Ian Campbell <hidden>
Date: 2012-01-25 13:09:15

On Wed, 2012-01-25 at 12:51 +0000, Eric Dumazet wrote:
Le mercredi 25 janvier 2012 à 12:27 +0000, Ian Campbell a écrit :
quoted
This reduces the minimum overhead required for this allocation such that the
shinfo can be grown in the following patch without overflowing 2048 bytes for a
1500 byte frame.

Reducing this overhead while also growing the shinfo means that sometimes the
tail end of the data can end up in the same cache line as the beginning of the
shinfo. Specifically in the case of the 64 byte cache lines on a 64 bit system
the first 8 bytes of shinfo can overlap the tail cacheline of the data. In many
cases the allocation slop means that there is no overlap.

Signed-off-by: Ian Campbell <redacted>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Eric Dumazet <redacted>
---
Hmm... you missed build_skb()
Presumably build_skb should be using SKB_WITH_OVERHEAD instead of open
coding it? (which I think is how I managed to miss it)
 and all places we use
SKB_DATA_ALIGN(sizeof(struct skb_shared_info))
(for example in some drivers)
I'm not sure how I missed these with my grep. Obviously it is necessary
to catch them all in order to avoid the performance drop you mention
below. Fortunately there is fewer than a dozen instances in half a dozen
drivers to check.
If you want to see possible performance impact of your changes, see
commit e52fcb2462ac (bnx2x: uses build_skb() in receive path), and
expect a drop from 820.000 pps to 720.000 pps
Can you elaborate on the specific benchmark you used there?

Thanks,
Ian
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help