On (06/11/07 17:11), Christoph Lameter didst pronounce: > The defrag_ratio is used to set the threshold at which defragmentation > should be run on a slabcache. >
I'm thick, I would like to see a quick note here on what defragmentation means. Also, this defrag_ratio seems to have a significantly different meaning to the other defrag_ratio which isn't helping my poor head at all. "The defrag_ratio sets a threshold at which a slab will be vacated of all it's objects and the pages freed during memory reclaim." ? > The allocation ratio is measured in a percentage of the available slots. > The percentage will be lower for slabs that are more fragmented. > > Add a defrag ratio field and set it to 30% by default. A limit of 30% > specified > that less than 3 out of 10 available slots for objects are in use before > reclaim occurs. > > Reviewed-by: Rik van Riel <[EMAIL PROTECTED]> > Signed-off-by: Christoph Lameter <[EMAIL PROTECTED]> > --- > include/linux/slub_def.h | 7 +++++++ > mm/slub.c | 18 ++++++++++++++++++ > 2 files changed, 25 insertions(+) > > Index: linux-2.6/include/linux/slub_def.h > =================================================================== > --- linux-2.6.orig/include/linux/slub_def.h 2007-11-06 12:36:28.000000000 > -0800 > +++ linux-2.6/include/linux/slub_def.h 2007-11-06 12:37:44.000000000 > -0800 > @@ -53,6 +53,13 @@ struct kmem_cache { > void (*ctor)(struct kmem_cache *, void *); > int inuse; /* Offset to metadata */ > int align; /* Alignment */ > + int defrag_ratio; /* > + * objects/possible-objects limit. If we have > + * less that the specified percentage of > + * objects allocated then defrag passes > + * will start to occur during reclaim. > + */ > + > const char *name; /* Name (only for display!) */ > struct list_head list; /* List of slab caches */ > #ifdef CONFIG_SLUB_DEBUG > Index: linux-2.6/mm/slub.c > =================================================================== > --- linux-2.6.orig/mm/slub.c 2007-11-06 12:37:25.000000000 -0800 > +++ linux-2.6/mm/slub.c 2007-11-06 12:37:44.000000000 -0800 > @@ -2363,6 +2363,7 @@ static int kmem_cache_open(struct kmem_c > goto error; > > s->refcount = 1; > + s->defrag_ratio = 30; > #ifdef CONFIG_NUMA > s->remote_node_defrag_ratio = 100; > #endif > @@ -4005,6 +4006,22 @@ static ssize_t free_calls_show(struct km > } > SLAB_ATTR_RO(free_calls); > > +static ssize_t defrag_ratio_show(struct kmem_cache *s, char *buf) > +{ > + return sprintf(buf, "%d\n", s->defrag_ratio); > +} > + > +static ssize_t defrag_ratio_store(struct kmem_cache *s, > + const char *buf, size_t length) > +{ > + int n = simple_strtoul(buf, NULL, 10); > + > + if (n < 100) > + s->defrag_ratio = n; > + return length; > +} > +SLAB_ATTR(defrag_ratio); > + > #ifdef CONFIG_NUMA > static ssize_t remote_node_defrag_ratio_show(struct kmem_cache *s, char *buf) > { > @@ -4047,6 +4064,7 @@ static struct attribute * slab_attrs[] = > &shrink_attr.attr, > &alloc_calls_attr.attr, > &free_calls_attr.attr, > + &defrag_ratio_attr.attr, > #ifdef CONFIG_ZONE_DMA > &cache_dma_attr.attr, > #endif > > -- > -- -- Mel Gorman Part-time Phd Student Linux Technology Center University of Limerick IBM Dublin Software Lab - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/