The slab allocator: an object-caching kernel memory allocator . Jeff Bonwick, Jonathan Adams, Magazines and Vmem: Extending the Slab. Implementation of the Slab Allocator as described in “The Slab Allocator: An Object-Caching Kernel Memory Allocator” by Jeff Bonwick. – lucastsa/ slab_allocator. This package provides a simple implementation of a Slab memory allocator (Jeff Bonwick: “The Slab Allocator: An Object-Caching Kernel Memory Allocator”).

Author: Grolkis Nagar
Country: Dominican Republic
Language: English (Spanish)
Genre: Education
Published (Last): 8 May 2010
Pages: 440
PDF File Size: 5.80 Mb
ePub File Size: 3.75 Mb
ISBN: 605-7-32020-669-6
Downloads: 29742
Price: Free* [*Free Regsitration Required]
Uploader: Molmaran

Slab allocation is a memory management mechanism intended for the efficient memory allocation of kernel objects. It eliminates fragmentation caused by allocations and deallocations. The technique is used to retain allocated memory that contains a data object of a certain type for reuse upon subsequent allocations of objects of the same type. It is analogous to an object poolbut only applies to memory, not other resources.

Slab allocation was first introduced in the Solaris 2. The primary motivation for slab allocation is that the initialization alllocator destruction of kernel data objects can actually outweigh the cost of allocating memory for them.

The notion of object caching was therefore introduced in order to avoid the invocation of functions used to initialize object state.

Slab Allocator

With slab allocation, memory chunks suitable to fit data objects of certain type or size are preallocated. Destruction of the object does not free up the memory, but only opens a slot which is put in the list of free slots by the slab allocator.

Allocatr next call to allocate memory of the same size will return the now unused memory slot. This process eliminates the need to search for suitable memory space and greatly alleviates memory fragmentation.


In this context, a slab is one or more contiguous pages in the memory containing pre-allocated memory chunks. When a bonwico sets up a cache, it allocates a number of objects to the slabs associated with that cache. This number depends on the size of the associated slabs.

Slab Allocator | Oracle Jeff Bonwick’s Blog

Initially, the system marks each slab as “empty”. When the process calls for a new kernel object, the system tries to find a free location for that object on a partial slab in a cache for that type allocztor object.

If no such location exists, the system allocates a new slab from contiguous physical pages and assigns it to a bonsick. The new object gets allocated from this slab, and its location becomes marked as “partial”. The allocation takes place quickly, because the system builds the objects in advance and readily allocates them from a slab.

A slab is the amount by which a cache can jff or shrink. It represents one memory allocation to the cache from the machine, and slag size is customarily a multiple of the page size. A slab must contain a list of free buffers or bufctlsas well as a list of the bufctls that have been allocated in the case of a large slab size. The reason for the large slabs having a different layout from the small slabs is that it allows large slabs to pack better into page-size units, which helps with fragmentation.

The slab contains a list of bufctls, which are simply controllers for each buffer that can be allocated a buffer is the memory that the user of a slab allocator would use. These small slabs need to be optimized further from the logical layout, by avoiding using bufctls which would be just as large as the data itself and cause memory usage to be much greater.


A small slab is exactly one page, and has a defined structure that allows bufctls to be avoided.

Slab allocation

The last part of the page contains the ‘slab header’, which is the information needed to retain the slab. Starting at the first address of that page, there are as many buffers as can be allocated without running into the slab header at the end of the page. Instead of using bufctls, we aallocator the buffers themselves to retain the free list links.

This allows the small slab’s bufctl to be bypassed. From Wikipedia, the free encyclopedia. Not to be confused with Slab unit. This article may need to be rewritten entirely to comply with Wikipedia’s quality standards.

The discussion page may contain suggestions. Retrieved 28 December Retrieved 18 November Retrieved from ” https: Webarchive template wayback links Use dmy dates from August Wikipedia articles needing rewrite from May All articles needing rewrite All articles with unsourced statements Jjeff with unsourced statements from April Views Read Edit View history.

This page was last edited on 23 Decemberat By using this site, you agree to the Terms of Use and Privacy Policy.