Subject: Slab defrag: Log information to the syslog to show defrag operations Dump information into the syslog during defragmentation actions to show that something is occurring and what effect it has. Signed-off-by: Christoph Lameter --- mm/slub.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) Index: linux-2.6/mm/slub.c =================================================================== --- linux-2.6.orig/mm/slub.c 2007-07-29 15:41:21.000000000 -0700 +++ linux-2.6/mm/slub.c 2007-07-29 15:43:17.000000000 -0700 @@ -2599,6 +2599,8 @@ static unsigned long sort_partial_list(s return freed; } +#define NR_INUSE 40 + /* * Shrink the slab cache on a particular node of the cache */ @@ -2610,6 +2612,8 @@ static unsigned long __kmem_cache_shrink LIST_HEAD(zaplist); int freed; int inuse; + int nr[NR_INUSE] = { 0, }; + int i; spin_lock_irqsave(&n->list_lock, flags); freed = sort_partial_list(s, n, scratch); @@ -2646,6 +2650,8 @@ static unsigned long __kmem_cache_shrink n->nr_partial--; SetSlabFrozen(page); slab_unlock(page); + if (inuse < NR_INUSE) + nr[inuse]++; } spin_unlock_irqrestore(&n->list_lock, flags); @@ -2659,6 +2665,13 @@ static unsigned long __kmem_cache_shrink if (__kmem_cache_vacate(s, page, flags, scratch) == 0) freed++; } + printk(KERN_INFO "Slab %s: Defrag freed %d pages. PartSlab config=", + s->name, freed << s->order); + + for (i = 0; i < NR_INUSE; i++) + if (nr[i]) + printk(" %d=%d", i, nr[i]); + printk("\n"); return freed; }