• Steven Rostedt's avatar
    tracing: Use kmem_cache_alloc instead of kmalloc in trace_events.c · d1a29143
    Steven Rostedt authored
    The event structures used by the trace events are mostly persistent,
    but they are also allocated by kmalloc, which is not the best at
    allocating space for what is used. By converting these kmallocs
    into kmem_cache_allocs, we can save over 50K of space that is
    permanently allocated.
    
    After boot we have:
    
     slab name          active allocated size
     ---------          ------ --------- ----
    ftrace_event_file    979   1005     56   67    1
    ftrace_event_field   2301   2310     48   77    1
    
    The ftrace_event_file has at boot up 979 active objects out of
    1005 allocated in the slabs. Each object is 56 bytes. In a normal
    kmalloc, that would allocate 64 bytes for each object.
    
     1005 - 979  = 26 objects not used
     26 * 56 = 1456 bytes wasted
    
    But if we used kmalloc:
    
     64 - 56 = 8 bytes unused per allocation
     8 * 979 = 7832 bytes wasted
    
     7832 - 1456 = 6376 bytes in savings
    
    Doing the same for ftrace_event_field where there's 2301 objects
    allocated in a slab that can hold 2310 with 48 bytes each we have:
    
     2310 - 2301 = 9 objects not used
     9 * 48 = 432 bytes wasted
    
    A kmalloc would also use 64 bytes per object:
    
     64 - 48 = 16 bytes unused per allocation
     16 * 2301 = 36816 bytes wasted!
    
     36816 - 432 = 36384 bytes in savings
    
    This change gives us a total of 42760 bytes in savings. At least
    on my machine, but as there's a lot of these persistent objects
    for all configurations that use trace points, this is a net win.
    
    Thanks to Ezequiel Garcia for his trace_analyze presentation which
    pointed out the wasted space in my code.
    
    Cc: Ezequiel Garcia <elezegarcia@gmail.com>
    Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    d1a29143
trace_events.c 49.8 KB