MEMORYALLOCATORS(9) | Kernel Developer's Manual | MEMORYALLOCATORS(9)

# NAME

memoryallocators — introduction to kernel memory allocators

# DESCRIPTION

The NetBSD kernel provides several memory allocators, each with different characteristics and purpose. This document summarizes the main differences between them.

## The Kmem Allocator

The kmem allocator is modelled after an interface of similar name implemented in Solaris. This is main general purpose allocator in the kernel.
It is implemented on-top of the vmem(9) resource allocator (beyond the scope of this document), meaning it will be using pool_cache(9) internally to speed-up common (small) sized allocations.
It requires no setup, but cannot be used from interrupt context.
See kmem(9) for more details.

## The Pool Allocator

The pool(9) allocator is a fixed-size memory allocator. It requires setup (to initialize a memory pool) and is interrupt-safe.
See pool(9) for more details.

## The Pool Cache Allocator

The pool cache allocator works on-top of the pool(9) allocator, also allowing fixed-size allocation only, requires setup, and is interrupt-safe.
The pool cache allocator is expected to be faster than other allocators, including the “normal” pool allocator.
In the future this allocator is expected to have a per-CPU cache.
See pool_cache(9) for more details.

## The UVM Kernel Memory Allocator

This is a low-level memory allocator interface. It allows variable-sized allocations in multiples of `PAGE_SIZE`, and can be used to allocate both wired and pageable kernel memory.
See uvm(9) for more details.

# SEE ALSO

intro(9), kmem(9), pool(9), pool_cache(9), uvm(9), vmem(9)

# AUTHORS

Elad Efrat <elad@NetBSD.org>
YAMAMOTO Takashi <yamt@NetBSD.org>

August 3, 2009 | NetBSD 8.2