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>