Harry Gunnarsson wrote:
>      > I thought that this was the point of the SLAB allocator, i.e.
>      > avoiding fragmentations with fixed size pre-allocated blocks.
>
>      Well, I'm not entirely certain how the SLAB allocator operates,
>      since I haven't really looked at its code at all.  But I do
>      know (from testing) that larger blocks can be chosen and sliced
>      to create smaller blocks.  I don't know what its criteria is
>      for choosing blocks; my *assumption* is that it walks up the
>      chain (ie. if it needs a 256k block, it'll look in the 256k
>      free list, and only if there aren't any will it go up to the
>      512k free list, and so on until it finds a block it can slice
>      up and distribute).  But I really don't know.  Maybe it tries
>      to do something clever instead.

The algorithm which looks for a 256k free block, then if it doesn't
find one, looks for a 512k block to split into two, and so on doubling
size until it finds one, is called the Buddy allocator, also called
page_alloc.c.  When freeing, it does the opposite: when it frees a
block and it finds a neighbouring block of the same size, it merges
them to make a bigger block, then checks that against it's neighbours,
and so on.

That algorithm is really quite bad for fragmentation...

It's fast though.

SLAB only optimises allocation of objects smaller than a page size
(4k).  It avoids fragmenting large blocks due to tiny objects, but
wastes some space in unused parts of pages.

Larger allocations use the Buddy allocator (page_alloc.c), or other
options which you can configure at kernel compile time.  I found
page_alloc2.c (on 2.4 kernels) noticably slow and it has some bugs
interacting well with the filesystem cache (but they only slow it
down, they don't break it), but it's much better at avoiding
fragmentation than Buddy.

Recently, some changes were made to 2.6 kernels, and some patches not
applied, which might make the fragmentation with Buddy less bad on
embedded systems: Clustered page reclamation, allocating pages with
different lifetimes seperately, and movable pages.  The patches were
designed for bigger machines, but they should help small ones.

-- Jamie
_______________________________________________
uClinux-dev mailing list
uClinux-dev@uclinux.org
http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
This message was resent by uclinux-dev@uclinux.org
To unsubscribe see:
http://mailman.uclinux.org/mailman/options/uclinux-dev

Reply via email to