net: fix kmemcheck annotations
Subsystems (2)
PATCH 1/1 net: fix kmemcheck annotations
struct sk_buff kmemcheck annotations enlarged this structure by 8/16 bytes
Fix this by moving 'protocol' inside flags1 bitfield, and queue_mapping inside flags2 bitfield.
---
include/linux/skbuff.h +2 -2
@@ -354,8 +354,8 @@ struct sk_buff { ipvs_property:1, peeked:1, nf_trace:1; + __be16 protocol:16;kmemcheck_bitfield_end (flags1); -__be16 protocol;void (*destructor)(struct sk_buff *skb);#if defined(CONFIG_NF_CONNTRACK ) || defined(CONFIG_NF_CONNTRACK_MODULE )
@@ -367,7 +367,6 @@ struct sk_buff {#endif int iif; -__u16 queue_mapping;#ifdef CONFIG_NET_SCHED __u16 tc_index;/* traffic control index */ #ifdef CONFIG_NET_CLS_ACT
@@ -376,6 +375,7 @@ struct sk_buff {#endif kmemcheck_bitfield_begin (flags2); + __u16 queue_mapping:16;#ifdef CONFIG_IPV6_NDISC_NODETYPE __u8 ndisc_nodetype:2;#endif
David Miller
maintainerFrom: Eric Dumazet <[email protected]>
Date: Thu, 29 Oct 2009 11:10:37 +0100
Quoted 9 lines
include/linux/skbuff.h +0
-1@@ -367,7 +367,6 @@ struct sk_buff {#endif int iif; -__u16 queue_mapping;#ifdef CONFIG_NET_SCHED __u16 tc_index;/* traffic control index */ #ifdef CONFIG_NET_CLS_ACT
include/linux/skbuff.h struct sk_buff { · line 381
Quoted 7 lines
include/linux/skbuff.h +1
-0@@ -376,6 +375,7 @@ struct sk_buff {#endif kmemcheck_bitfield_begin (flags2); + __u16 queue_mapping:16;#ifdef CONFIG_IPV6_NDISC_NODETYPE __u8 ndisc_nodetype:2;#endif
We may be trading size for performance here, I wonder if it's wise to move queue_mapping like that and what locality change we get as a result.
Quoted 4 lines · David Miller
We may be trading size for performance here, I wonder if it's wise to move
queue_mappinglike that and what locality change we get as a result.
I agree, but could not convince me it makes a difference.
On 64bit arches, queue_mapping doesnt change its cache line location (0xa4 -> 0xa8)
On 32bit arches, sizeof(sk_buf)=0xB0, rx and tx paths touch all
of 3 cache lines anyway.
Only thing I can think at this moment is to reorder skb so that TX completion path dont touch all cache lines (putting together cb[] and some not touched fields). We could probably gain one cache line miss.
It's a bit hard because of the next/prev fields that must
be first members of structure, but I believe you had some work in progress in this area, to stick a standard list_head ?
David Miller
maintainerFrom: Eric Dumazet <[email protected]>
Date: Thu, 29 Oct 2009 11:44:48 +0100
Quoted 7 lines
Quoted 4 lines · David Miller
We may be trading size for performance here, I wonder if it's wise to move
queue_mappinglike that and what locality change we get as a result.I agree, but could not convince me it makes a difference.
Ok, I'll apply your patch as-is to net-2.6, thanks!