diff options
author | Eric Dumazet <eric.dumazet@gmail.com> | 2011-10-13 03:28:54 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-10-13 16:05:07 -0400 |
commit | 87fb4b7b533073eeeaed0b6bf7c2328995f6c075 (patch) | |
tree | be4b37f08d7fe2d018ae68bae4577b1b2bafd0fc /net/sctp/protocol.c | |
parent | 97ba0eb64ca690165f945a83e609102fcefa99cb (diff) |
net: more accurate skb truesize
skb truesize currently accounts for sk_buff struct and part of skb head.
kmalloc() roundings are also ignored.
Considering that skb_shared_info is larger than sk_buff, its time to
take it into account for better memory accounting.
This patch introduces SKB_TRUESIZE(X) macro to centralize various
assumptions into a single place.
At skb alloc phase, we put skb_shared_info struct at the exact end of
skb head, to allow a better use of memory (lowering number of
reallocations), since kmalloc() gives us power-of-two memory blocks.
Unless SLUB/SLUB debug is active, both skb->head and skb_shared_info are
aligned to cache lines, as before.
Note: This patch might trigger performance regressions because of
misconfigured protocol stacks, hitting per socket or global memory
limits that were previously not reached. But its a necessary step for a
more accurate memory accounting.
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
CC: Andi Kleen <ak@linux.intel.com>
CC: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sctp/protocol.c')
-rw-r--r-- | net/sctp/protocol.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c index 91784f44a2e2..61b9fca5a173 100644 --- a/net/sctp/protocol.c +++ b/net/sctp/protocol.c | |||
@@ -1299,7 +1299,7 @@ SCTP_STATIC __init int sctp_init(void) | |||
1299 | max_share = min(4UL*1024*1024, limit); | 1299 | max_share = min(4UL*1024*1024, limit); |
1300 | 1300 | ||
1301 | sysctl_sctp_rmem[0] = SK_MEM_QUANTUM; /* give each asoc 1 page min */ | 1301 | sysctl_sctp_rmem[0] = SK_MEM_QUANTUM; /* give each asoc 1 page min */ |
1302 | sysctl_sctp_rmem[1] = (1500 *(sizeof(struct sk_buff) + 1)); | 1302 | sysctl_sctp_rmem[1] = 1500 * SKB_TRUESIZE(1); |
1303 | sysctl_sctp_rmem[2] = max(sysctl_sctp_rmem[1], max_share); | 1303 | sysctl_sctp_rmem[2] = max(sysctl_sctp_rmem[1], max_share); |
1304 | 1304 | ||
1305 | sysctl_sctp_wmem[0] = SK_MEM_QUANTUM; | 1305 | sysctl_sctp_wmem[0] = SK_MEM_QUANTUM; |