From 8047b800cb9f371863f0e4d093cd6a2395976c11 Mon Sep 17 00:00:00 2001 From: Christoph Lameter Date: Sun, 29 Jul 2007 15:48:44 -0700 Subject: [PATCH] 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 files changed, 13 insertions(+), 0 deletions(-) diff --git a/mm/slub.c b/mm/slub.c index a9febfd..5cee8f1 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -2600,6 +2600,8 @@ static unsigned long sort_partial_list(struct kmem_cache *s, return freed; } +#define NR_INUSE 40 + /* * Shrink the slab cache on a particular node of the cache */ @@ -2611,6 +2613,8 @@ static unsigned long __kmem_cache_shrink(struct kmem_cache *s, 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); @@ -2647,6 +2651,8 @@ static unsigned long __kmem_cache_shrink(struct kmem_cache *s, n->nr_partial--; SetSlabFrozen(page); slab_unlock(page); + if (inuse < NR_INUSE) + nr[inuse]++; } spin_unlock_irqrestore(&n->list_lock, flags); @@ -2660,6 +2666,13 @@ static unsigned long __kmem_cache_shrink(struct kmem_cache *s, 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; } -- 1.5.2.4