• Pekka Enberg's avatar
    SLUB: dynamic per-cache MIN_PARTIAL · 5595cffc
    Pekka Enberg authored
    This patch changes the static MIN_PARTIAL to a dynamic per-cache ->min_partial
    value that is calculated from object size. The bigger the object size, the more
    pages we keep on the partial list.
    I tested SLAB, SLUB, and SLUB with this patch on Jens Axboe's 'netio' example
    script of the fio benchmarking tool. The script stresses the networking
    subsystem which should also give a fairly good beating of kmalloc() et al.
    To run the test yourself, first clone the fio repository:
      git clone git://git.kernel.dk/fio.git
    and then run the following command n times on your machine:
      time ./fio examples/netio
    The results on my 2-way 64-bit x86 machine are as follows:
      [ the minimum, maximum, and average are captured from 50 individual runs ]
                     real time (seconds)
                     min      max      avg      sd
      SLAB           22.76    23.38    22.98    0.17
      SLUB           22.80    25.78    23.46    0.72
      SLUB (dynamic) 22.74    23.54    23.00    0.20
                     sys time (seconds)
                     min      max      avg      sd
      SLAB           6.90     8.28     7.70     0.28
      SLUB           7.42     16.95    8.89     2.28
      SLUB (dynamic) 7.17     8.64     7.73     0.29
                     user time (seconds)
                     min      max      avg      sd
      SLAB           36.89    38.11    37.50    0.29
      SLUB           30.85    37.99    37.06    1.67
      SLUB (dynamic) 36.75    38.07    37.59    0.32
    As you can see from the above numbers, this patch brings SLUB to the same level
    as SLAB for this particular workload fixing a ~2% regression. I'd expect this
    change to help similar workloads that allocate a lot of objects that are close
    to the size of a page.
    Cc: Matthew Wilcox <matthew@wil.cx>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Acked-by: default avatarChristoph Lameter <cl@linux-foundation.org>
    Signed-off-by: default avatarPekka Enberg <penberg@cs.helsinki.fi>
slub_def.h 6.7 KB