Re: suggestion for changing kmalloc()

From: Brian Gerst (
Date: Sun Jun 09 2002 - 08:37:48 EST

thetushar korde wrote:
> hi folks,
> I am sending this mail again as i forgot to put a subject line
> previously, so chances are
> that some of u may have missed it.
> as kmalloc allocates memory in power of 2 ( starting from 32 )
> instead of the size requested. there are following problems :
> 1) we are allocating at least 32 bytes in all cases ( most of the times
> it is not
> required ).

kmalloc (and all slab caches in general) return objects that are
cacheline aligned. On most arches this is 32 bytes, some higher.
Column 4 of /proc/slabinfo shows the real size of the objects being

> 2) if we allocate large memory, internal fregmentation also increases.

Fragmentation is minimized by the slab allocator by only allocating
objects of the same size from a given slab.

> 3) allocating more memory then the request often leads to programming
> errors
> esp. when we store some data and read it back or try to get size of data
> stored
> ( though it can be handled but we have to take special care of it at
> every point ).

I'm not quite following what you are saying here. Why should the
programmer care if he got more memory than he asked for? He should be
only interested in the size of the data he is working with, not the size
of the memory that was allocated.

> the solution to above problems may be that we dont allocate objects from
> the 13
> general purpose caches, instead we make a new cache keep its address
> either in
> cache_sizes or declare it global. now as the kmalloc is invoked check
> the memory size
> requested if predefined sizes are not suitable then make a new object of
> the size
> requested ( now here the definition of c_offset flag of cache descriptor
> may be
> violated ) and allot it to our new cache and return it .

If you are allocating many objects of constant size, make your own slab
cache. kmalloc should only be used for variable sized or infrequent

> i know that there may be subtle problems in it's implementation.
> i need your suggestions. is it worth to make efforts in this field.

I had made a patch for the 2.5 kernel that introduced 96 and 192 byte
caches, which improved packing a bit. Other than that it's not really
worth trying to squeeze more out other than by identifying large users
of kmalloc that can use their own slab cache.

				Brian Gerst

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to More majordomo info at Please read the FAQ at

This archive was generated by hypermail 2b29 : Sat Jun 15 2002 - 22:00:14 EST