xref: /freebsd/share/man/man9/zone.9 (revision 6a4c41d1bbd694fe7db2cb2842bb83a3b9c6d5c2)
10aa028ffSDag-Erling Smørgrav.\"-
20aa028ffSDag-Erling Smørgrav.\" Copyright (c) 2001 Dag-Erling Co�dan Sm�rgrav
30aa028ffSDag-Erling Smørgrav.\" All rights reserved.
40aa028ffSDag-Erling Smørgrav.\"
50aa028ffSDag-Erling Smørgrav.\" Redistribution and use in source and binary forms, with or without
60aa028ffSDag-Erling Smørgrav.\" modification, are permitted provided that the following conditions
70aa028ffSDag-Erling Smørgrav.\" are met:
80aa028ffSDag-Erling Smørgrav.\" 1. Redistributions of source code must retain the above copyright
90aa028ffSDag-Erling Smørgrav.\"    notice, this list of conditions and the following disclaimer.
100aa028ffSDag-Erling Smørgrav.\" 2. Redistributions in binary form must reproduce the above copyright
110aa028ffSDag-Erling Smørgrav.\"    notice, this list of conditions and the following disclaimer in the
120aa028ffSDag-Erling Smørgrav.\"    documentation and/or other materials provided with the distribution.
130aa028ffSDag-Erling Smørgrav.\"
140aa028ffSDag-Erling Smørgrav.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
150aa028ffSDag-Erling Smørgrav.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
160aa028ffSDag-Erling Smørgrav.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
170aa028ffSDag-Erling Smørgrav.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
180aa028ffSDag-Erling Smørgrav.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
190aa028ffSDag-Erling Smørgrav.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
200aa028ffSDag-Erling Smørgrav.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
210aa028ffSDag-Erling Smørgrav.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
220aa028ffSDag-Erling Smørgrav.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
230aa028ffSDag-Erling Smørgrav.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
240aa028ffSDag-Erling Smørgrav.\" SUCH DAMAGE.
250aa028ffSDag-Erling Smørgrav.\"
260aa028ffSDag-Erling Smørgrav.\" $FreeBSD$
270aa028ffSDag-Erling Smørgrav.\"
286a4c41d1SRemko Lodder.Dd June 19, 2008
290aa028ffSDag-Erling Smørgrav.Dt ZONE 9
300aa028ffSDag-Erling Smørgrav.Os
310aa028ffSDag-Erling Smørgrav.Sh NAME
32382682b2SJeroen Ruigrok van der Werven.Nm uma_zcreate ,
337c32182eSJeroen Ruigrok van der Werven.Nm uma_zalloc ,
346a4c41d1SRemko Lodder.Nm uma_zalloc_arg ,
357c32182eSJeroen Ruigrok van der Werven.Nm uma_zfree ,
366a4c41d1SRemko Lodder.Nm uma_zfree_arg ,
37d7bbb21aSHartmut Brandt.Nm uma_zdestroy ,
38d7bbb21aSHartmut Brandt.Nm uma_zone_set_max
39f5fccbbcSDag-Erling Smørgrav.Nd zone allocator
400aa028ffSDag-Erling Smørgrav.Sh SYNOPSIS
4132eef9aeSRuslan Ermilov.In sys/param.h
42f16b3c0dSChad David.In sys/queue.h
433a347a6eSJeroen Ruigrok van der Werven.In vm/uma.h
44382682b2SJeroen Ruigrok van der Werven.Ft uma_zone_t
459be1948fSRuslan Ermilov.Fo uma_zcreate
469be1948fSRuslan Ermilov.Fa "char *name" "int size"
479be1948fSRuslan Ermilov.Fa "uma_ctor ctor" "uma_dtor dtor" "uma_init uminit" "uma_fini fini"
489be1948fSRuslan Ermilov.Fa "int align" "u_int16_t flags"
499be1948fSRuslan Ermilov.Fc
509be1948fSRuslan Ermilov.Ft "void *"
519be1948fSRuslan Ermilov.Fn uma_zalloc "uma_zone_t zone" "int flags"
526a4c41d1SRemko Lodder.Ft "void *"
536a4c41d1SRemko Lodder.Fn uma_zalloc_arg "uma_zone_t zone" "void *arg" "int flags"
540aa028ffSDag-Erling Smørgrav.Ft void
55f1de92e6SJeroen Ruigrok van der Werven.Fn uma_zfree "uma_zone_t zone" "void *item"
565ca0c84eSThomas Moestl.Ft void
576a4c41d1SRemko Lodder.Fn uma_zfree_arg "uma_zone_t zone" "void *item" "void *arg"
586a4c41d1SRemko Lodder.Ft void
59f1de92e6SJeroen Ruigrok van der Werven.Fn uma_zdestroy "uma_zone_t zone"
60d7bbb21aSHartmut Brandt.Ft void
61d7bbb21aSHartmut Brandt.Fn uma_zone_set_max "uma_zone_t zone" "int nitems"
620aa028ffSDag-Erling Smørgrav.Sh DESCRIPTION
630aa028ffSDag-Erling SmørgravThe zone allocator provides an efficient interface for managing
640aa028ffSDag-Erling Smørgravdynamically-sized collections of items of similar size.
650aa028ffSDag-Erling SmørgravThe zone allocator can work with preallocated zones as well as with
660aa028ffSDag-Erling Smørgravruntime-allocated ones, and is therefore available much earlier in the
670aa028ffSDag-Erling Smørgravboot process than other memory management routines.
680aa028ffSDag-Erling Smørgrav.Pp
690aa028ffSDag-Erling SmørgravA zone is an extensible collection of items of identical size.
700aa028ffSDag-Erling SmørgravThe zone allocator keeps track of which items are in use and which
71008080bdSJeroen Ruigrok van der Wervenare not, and provides functions for allocating items from the zone and
720aa028ffSDag-Erling Smørgravfor releasing them back (which makes them available for later use).
730aa028ffSDag-Erling Smørgrav.Pp
74ced699e3SRuslan ErmilovAfter the first allocation of an item,
7590d83886SJulian Elischerit will have been cleared to zeroes, however subsequent allocations
767251f557SKonstantin Belousovwill retain the contents as of the last free.
7790d83886SJulian Elischer.Pp
78382682b2SJeroen Ruigrok van der WervenThe
79382682b2SJeroen Ruigrok van der Werven.Fn uma_zcreate
80382682b2SJeroen Ruigrok van der Wervenfunction creates a new zone from which items may then be allocated from.
81382682b2SJeroen Ruigrok van der WervenThe
82382682b2SJeroen Ruigrok van der Werven.Fa name
83382682b2SJeroen Ruigrok van der Wervenargument is a text name of the zone for debugging and stats; this memory
84382682b2SJeroen Ruigrok van der Wervenshould not be freed until the zone has been deallocated.
85382682b2SJeroen Ruigrok van der Werven.Pp
864919e8cbSAlfred PerlsteinThe
874919e8cbSAlfred Perlstein.Fa ctor
884919e8cbSAlfred Perlsteinand
894919e8cbSAlfred Perlstein.Fa dtor
904919e8cbSAlfred Perlsteinarguments are callback functions that are called by
914919e8cbSAlfred Perlsteinthe uma subsystem at the time of the call to
924919e8cbSAlfred Perlstein.Fn uma_zalloc
934919e8cbSAlfred Perlsteinand
944919e8cbSAlfred Perlstein.Fn uma_zfree
95d962d52aSRuslan Ermilovrespectively.
96d962d52aSRuslan ErmilovTheir purpose is to provide hooks for initializing or
974919e8cbSAlfred Perlsteindestroying things that need to be done at the time of the allocation
98d962d52aSRuslan Ermilovor release of a resource.
99e07f1d5fSHiten PandyaA good usage for the
1004919e8cbSAlfred Perlstein.Fa ctor
1014919e8cbSAlfred Perlsteinand
1024919e8cbSAlfred Perlstein.Fa dtor
1034919e8cbSAlfred Perlsteincallbacks
1044919e8cbSAlfred Perlsteinmight be to adjust a global count of the number of objects allocated.
1054919e8cbSAlfred Perlstein.Pp
1064919e8cbSAlfred PerlsteinThe
1074919e8cbSAlfred Perlstein.Fa uminit
1084919e8cbSAlfred Perlsteinand
1094919e8cbSAlfred Perlstein.Fa fini
1104919e8cbSAlfred Perlsteinarguments are used to optimize the allocation of
111d962d52aSRuslan Ermilovobjects from the zone.
112d962d52aSRuslan ErmilovThey are called by the uma subsystem whenever
1134919e8cbSAlfred Perlsteinit needs to allocate or free several items to satisfy requests or memory
114d962d52aSRuslan Ermilovpressure.
115d962d52aSRuslan ErmilovA good use for the
116d962d52aSRuslan Ermilov.Fa uminit
117d962d52aSRuslan Ermilovand
118d962d52aSRuslan Ermilov.Fa fini
119d962d52aSRuslan Ermilovcallbacks might be to
120d962d52aSRuslan Ermilovinitialize and destroy mutexes contained within the object.
121d962d52aSRuslan ErmilovThis would
1224919e8cbSAlfred Perlsteinallow one to re-use already initialized mutexes when an object is returned
123d962d52aSRuslan Ermilovfrom the uma subsystem's object cache.
124d962d52aSRuslan ErmilovThey are not called on each call to
1254919e8cbSAlfred Perlstein.Fn uma_zalloc
1264919e8cbSAlfred Perlsteinand
1274919e8cbSAlfred Perlstein.Fn uma_zfree
1284919e8cbSAlfred Perlsteinbut rather in a batch mode on several objects.
1294919e8cbSAlfred Perlstein.Pp
1300aa028ffSDag-Erling SmørgravTo allocate an item from a zone, simply call
1317c32182eSJeroen Ruigrok van der Werven.Fn uma_zalloc
1321437c79aSJeroen Ruigrok van der Wervenwith a pointer to that zone
1331437c79aSJeroen Ruigrok van der Wervenand set the
134acff84fbSJeroen Ruigrok van der Werven.Fa flags
135acff84fbSJeroen Ruigrok van der Wervenargument to selected flags as documented in
136acff84fbSJeroen Ruigrok van der Werven.Xr malloc 9 .
1371437c79aSJeroen Ruigrok van der WervenIt will return a pointer to an item if successful,
1381437c79aSJeroen Ruigrok van der Wervenor
1390aa028ffSDag-Erling Smørgrav.Dv NULL
1400aa028ffSDag-Erling Smørgravin the rare case where all items in the zone are in use and the
1411437c79aSJeroen Ruigrok van der Wervenallocator is unable to grow the zone
1421437c79aSJeroen Ruigrok van der Wervenor when
1431437c79aSJeroen Ruigrok van der Werven.Dv M_NOWAIT
1441437c79aSJeroen Ruigrok van der Wervenis specified.
1450aa028ffSDag-Erling Smørgrav.Pp
1460aa028ffSDag-Erling SmørgravItems are released back to the zone from which they were allocated by
1470aa028ffSDag-Erling Smørgravcalling
1487c32182eSJeroen Ruigrok van der Werven.Fn uma_zfree
1490aa028ffSDag-Erling Smørgravwith a pointer to the zone and a pointer to the item.
1505ca0c84eSThomas Moestl.Pp
1516a4c41d1SRemko LodderThe variations
1526a4c41d1SRemko Lodder.Fn uma_zalloc_arg
1536a4c41d1SRemko Lodderand
1546a4c41d1SRemko Lodder.Fn uma_zfree_arg
1556a4c41d1SRemko Lodderallow to
1566a4c41d1SRemko Lodderspecify an argument for the
1576a4c41d1SRemko Lodder.Dv ctor
1586a4c41d1SRemko Lodderand
1596a4c41d1SRemko Lodder.Dv dtor
1606a4c41d1SRemko Lodderfunctions, respectively.
1616a4c41d1SRemko Lodder.Pp
16255407559SJeroen Ruigrok van der WervenCreated zones,
16355407559SJeroen Ruigrok van der Wervenwhich are empty,
1645ca0c84eSThomas Moestlcan be destroyed using
1657c32182eSJeroen Ruigrok van der Werven.Fn uma_zdestroy ,
1665ca0c84eSThomas Moestlfreeing all memory that was allocated for the zone.
1675ca0c84eSThomas MoestlAll items allocated from the zone with
1687c32182eSJeroen Ruigrok van der Werven.Fn uma_zalloc
1695ca0c84eSThomas Moestlmust have been freed with
1707c32182eSJeroen Ruigrok van der Werven.Fn uma_zfree
1715ca0c84eSThomas Moestlbefore.
172d7bbb21aSHartmut Brandt.Pp
173d7bbb21aSHartmut BrandtThe purpose of
174d7bbb21aSHartmut Brandt.Fn uma_zone_set_max
175d7bbb21aSHartmut Brandtis to limit the maximum amount of memory that the system can dedicated
176d7bbb21aSHartmut Brandttoward the zone specified by the
177d7bbb21aSHartmut Brandt.Fa zone
178d7bbb21aSHartmut Brandtargument.
179d7bbb21aSHartmut BrandtThe
180d7bbb21aSHartmut Brandt.Fa nitems
181d7bbb21aSHartmut Brandtargument gives the upper limit of items in the zone.
182d7bbb21aSHartmut BrandtThis limits the total number of items in the zone which includes:
183d7bbb21aSHartmut Brandtallocated items, free items and free items in the per-cpu caches.
184d7bbb21aSHartmut BrandtOn systems with more than one CPU it may not be possible to allocate
185d7bbb21aSHartmut Brandtthe specified number of items even when there is no shortage of memory,
186d7bbb21aSHartmut Brandtbecause all of the remaining free items may be in the caches of the
187d7bbb21aSHartmut Brandtother CPUs when the limit is hit.
1880aa028ffSDag-Erling Smørgrav.Sh RETURN VALUES
1890aa028ffSDag-Erling SmørgravThe
1907c32182eSJeroen Ruigrok van der Werven.Fn uma_zalloc
1910aa028ffSDag-Erling Smørgravfunction returns a pointer to an item, or
1920aa028ffSDag-Erling Smørgrav.Dv NULL
1930aa028ffSDag-Erling Smørgravif the zone ran out of unused items and the allocator was unable to
1940aa028ffSDag-Erling Smørgravenlarge it.
1950aa028ffSDag-Erling Smørgrav.Sh SEE ALSO
1960aa028ffSDag-Erling Smørgrav.Xr malloc 9
1970aa028ffSDag-Erling Smørgrav.Sh HISTORY
1980aa028ffSDag-Erling SmørgravThe zone allocator first appeared in
1990aa028ffSDag-Erling Smørgrav.Fx 3.0 .
2009a795583SJeroen Ruigrok van der WervenIt was radically changed in
2019a795583SJeroen Ruigrok van der Werven.Fx 5.0
2029a795583SJeroen Ruigrok van der Wervento function as a slab allocator.
2030aa028ffSDag-Erling Smørgrav.Sh AUTHORS
2040aa028ffSDag-Erling Smørgrav.An -nosplit
2050aa028ffSDag-Erling SmørgravThe zone allocator was written by
2060aa028ffSDag-Erling Smørgrav.An John S. Dyson .
2079a795583SJeroen Ruigrok van der WervenThe zone allocator was rewritten in large parts by
2089a795583SJeroen Ruigrok van der Werven.An Jeff Roberson Aq jeff@FreeBSD.org
2099a795583SJeroen Ruigrok van der Wervento function as a slab allocator.
2100aa028ffSDag-Erling Smørgrav.Pp
2110aa028ffSDag-Erling SmørgravThis manual page was written by
21209e06539SDag-Erling Smørgrav.An Dag-Erling Sm\(/orgrav Aq des@FreeBSD.org .
2139a795583SJeroen Ruigrok van der WervenChanges for UMA by
2149a795583SJeroen Ruigrok van der Werven.An Jeroen Ruigrok van der Werven Aq asmodai@FreeBSD.org .
215