Skip to content
  • Richard Kennedy's avatar
    slub tracing: move trace calls out of always inlined functions to reduce kernel code size · 4a92379b
    Richard Kennedy authored
    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
    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
    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
    - rename kmem_cache_alloc_node_notrace() to
    - removes the include of trace/events/kmem.h from slub_def.h.
    - keep kmalloc_order_trace inline when !CONFIG_TRACE
    Signed-off-by: default avatarRichard Kennedy <>
    Signed-off-by: default avatarPekka Enberg <>