snmp: reduce percpu needs by 50%
authorEric Dumazet <eric.dumazet@gmail.com>
Fri, 10 Jun 2011 19:45:51 +0000 (19:45 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sat, 11 Jun 2011 23:23:59 +0000 (16:23 -0700)
commit8f0ea0fe3a036a47767f9c80e81b13e379a1f43b
tree6f4079c8da32f3e1ac4860ac9f90b26e9df86e3b
parent830a9c75514b477994fd3847f72654d3dbdfa5ca
snmp: reduce percpu needs by 50%

SNMP mibs use two percpu arrays, one used in BH context, another in USER
context. With increasing number of cpus in machines, and fact that ipv6
uses per network device ipstats_mib, this is consuming a lot of memory
if many network devices are registered.

commit be281e554e2a (ipv6: reduce per device ICMP mib sizes) shrinked
percpu needs for ipv6, but we can reduce memory use a bit more.

With recent percpu infrastructure (irqsafe_cpu_inc() ...), we no longer
need this BH/USER separation since we can update counters in a single
x86 instruction, regardless of the BH/USER context.

Other arches than x86 might need to disable irq in their
irqsafe_cpu_inc() implementation : If this happens to be a problem, we
can make SNMP_ARRAY_SZ arch dependent, but a previous poll
( https://lkml.org/lkml/2011/3/17/174 ) to arch maintainers did not
raise strong opposition.

Only on 32bit arches, we need to disable BH for 64bit counters updates
done from USER context (currently used for IP MIB)

This also reduces vmlinux size :

1) x86_64 build
$ size vmlinux.before vmlinux.after
   text    data     bss     dec     hex filename
7853650 1293772 1896448 11043870  a8841e vmlinux.before
7850578 1293772 1896448 11040798  a8781e vmlinux.after

2) i386  build
$ size vmlinux.before vmlinux.afterpatch
   text    data     bss     dec     hex filename
6039335  635076 3670016 10344427  9dd7eb vmlinux.before
6037342  635076 3670016 10342434  9dd022 vmlinux.afterpatch

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
CC: Andi Kleen <andi@firstfloor.org>
CC: Ingo Molnar <mingo@elte.hu>
CC: Tejun Heo <tj@kernel.org>
CC: Christoph Lameter <cl@linux-foundation.org>
CC: Benjamin Herrenschmidt <benh@kernel.crashing.org
CC: linux-arch@vger.kernel.org
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/snmp.h
net/ipv4/af_inet.c