• Greg Thelen's avatar
    mm, slab: faster active and free stats · f728b0a5
    Greg Thelen authored
    Reading /proc/slabinfo or monitoring slabtop(1) can become very
    expensive if there are many slab caches and if there are very lengthy
    per-node partial and/or free lists.
    
    Commit 07a63c41 ("mm/slab: improve performance of gathering slabinfo
    stats") addressed the per-node full lists which showed a significant
    improvement when no objects were freed.  This patch has the same
    motivation and optimizes the remainder of the usecases where there are
    very lengthy partial and free lists.
    
    This patch maintains per-node active_slabs (full and partial) and
    free_slabs rather than iterating the lists at runtime when reading
    /proc/slabinfo.
    
    When allocating 100GB of slab from a test cache where every slab page is
    on the partial list, reading /proc/slabinfo (includes all other slab
    caches on the system) takes ~247ms on average with 48 samples.
    
    As a result of this patch, the same read takes ~0.856ms on average.
    
    [rientjes@google.com: changelog]
    Link: http://lkml.kernel.org/r/alpine.DEB.2.10.1611081505240.13403@chino.kir.corp.google.com
    
    Signed-off-by: default avatarGreg Thelen <gthelen@google.com>
    Signed-off-by: default avatarDavid Rientjes <rientjes@google.com>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    f728b0a5