slub tracing: move trace calls out of always inlined functions to reduce kernel code...
authorRichard Kennedy <richard@rsk.demon.co.uk>
Thu, 21 Oct 2010 09:29:19 +0000 (10:29 +0100)
committerPekka Enberg <penberg@kernel.org>
Sat, 6 Nov 2010 07:04:33 +0000 (09:04 +0200)
commit4a92379bdfb48680a5e6775dd53a586df7b6b0b1
tree5ca6d2ace37b081a2b00d22014fcd27c6ad74c46
parent0d24db337e6d81c0c620ab65cc6947bd6553f742
slub tracing: move trace calls out of always inlined functions to reduce kernel code size

Having the trace calls defined in the always inlined kmalloc functions
in include/linux/slub_def.h causes a lot of code duplication as the
trace functions get instantiated for each kamalloc call site. This can
simply be removed by pushing the trace calls down into the functions in
slub.c.

On my x86_64 built this patch shrinks the code size of the kernel by
approx 36K and also shrinks the code size of many modules -- too many to
list here ;)

size vmlinux (2.6.36) reports
       text        data     bss     dec     hex filename
    5410611  743172  828928 6982711  6a8c37 vmlinux
    5373738  744244  828928 6946910  6a005e vmlinux + patch

The resulting kernel has had some testing & kmalloc trace still seems to
work.

This patch
- moves trace_kmalloc out of the inlined kmalloc() and pushes it down
into kmem_cache_alloc_trace() so this it only get instantiated once.

- rename kmem_cache_alloc_notrace()  to kmem_cache_alloc_trace() to
indicate that now is does have tracing. (maybe this would better being
called something like kmalloc_kmem_cache ?)

- adds a new function kmalloc_order() to handle allocation and tracing
of large allocations of page order.

- removes tracing from the inlined kmalloc_large() replacing them with a
call to kmalloc_order();

- move tracing out of inlined kmalloc_node() and pushing it down into
kmem_cache_alloc_node_trace

- rename kmem_cache_alloc_node_notrace() to
kmem_cache_alloc_node_trace()

- removes the include of trace/events/kmem.h from slub_def.h.

v2
- keep kmalloc_order_trace inline when !CONFIG_TRACE

Signed-off-by: Richard Kennedy <richard@rsk.demon.co.uk>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
include/linux/slub_def.h
mm/slub.c