Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
ZONE(9)			   Kernel Developer's Manual		       ZONE(9)

NAME
       uma_zcreate,  uma_zalloc,  uma_zfree, uma_zdestroy, uma_zone_set_max --
       zone allocator

SYNOPSIS
       #include	<sys/param.h>
       #include	<sys/queue.h>
       #include	<vm/uma.h>

       uma_zone_t
       uma_zcreate(char	*name,	 int size,    uma_ctor ctor,	uma_dtor dtor,
	   uma_init uminit, uma_fini fini, int align, u_int16_t	flags);

       void *
       uma_zalloc(uma_zone_t zone, int flags);

       void
       uma_zfree(uma_zone_t zone, void *item);

       void
       uma_zdestroy(uma_zone_t zone);

       void
       uma_zone_set_max(uma_zone_t zone, int nitems);

DESCRIPTION
       The zone	allocator provides an efficient	interface for managing dynami-
       cally-sized  collections	 of items of similar size.  The	zone allocator
       can work	with preallocated zones	 as  well  as  with  runtime-allocated
       ones,  and is therefore available much earlier in the boot process than
       other memory management routines.

       A zone is an extensible collection of items  of	identical  size.   The
       zone allocator keeps track of which items are in	use and	which are not,
       and  provides  functions	for allocating items from the zone and for re-
       leasing them back (which	makes them available for later use).

       After the first allocation of an	item, it will have been	cleared	to ze-
       roes, however subsequent	allocations will retain	the contents as	of the
       last free.

       The uma_zcreate() function creates a new	zone from which	items may then
       be allocated from.  The name argument is	a text name of	the  zone  for
       debugging and stats; this memory	should not be freed until the zone has
       been deallocated.

       The  ctor  and dtor arguments are callback functions that are called by
       the uma	subsystem  at  the  time  of  the  call	 to  uma_zalloc()  and
       uma_zfree()  respectively.   Their purpose is to	provide	hooks for ini-
       tializing or destroying things that need	to be done at the time of  the
       allocation  or  release	of  a resource.	 A good	usage for the ctor and
       dtor callbacks might be to adjust a global count	of the number  of  ob-
       jects allocated.

       The  uminit  and	 fini arguments	are used to optimize the allocation of
       objects from the	zone.  They are	called by the uma  subsystem  whenever
       it  needs to allocate or	free several items to satisfy requests or mem-
       ory pressure.  A	good use for the uminit	and fini callbacks might be to
       initialize and destroy mutexes contained	within the object.  This would
       allow one to re-use already initialized mutexes when an object  is  re-
       turned  from  the uma subsystem's object	cache.	They are not called on
       each call to uma_zalloc() and uma_zfree() but rather in a batch mode on
       several objects.

       To allocate an item from	 a  zone,  simply  call	 uma_zalloc()  with  a
       pointer	to  that  zone and set the flags argument to selected flags as
       documented in malloc(9).	 It will return	a pointer to an	item  if  suc-
       cessful,	 or  NULL  in the rare case where all items in the zone	are in
       use and the allocator is	unable to grow the zone	or  when  M_NOWAIT  is
       specified.

       Items  are  released back to the	zone from which	they were allocated by
       calling uma_zfree() with	a pointer to the zone and  a  pointer  to  the
       item.

       Created	zones, which are empty,	can be destroyed using uma_zdestroy(),
       freeing all memory that was allocated for the zone.   All  items	 allo-
       cated  from  the	 zone  with  uma_zalloc()  must	 have  been freed with
       uma_zfree() before.

       The purpose of uma_zone_set_max() is to limit  the  maximum  amount  of
       memory  that  the system	can dedicated toward the zone specified	by the
       zone argument.  The nitems argument gives the upper limit of  items  in
       the  zone.  This	limits the total number	of items in the	zone which in-
       cludes: allocated items,	free items  and	 free  items  in  the  per-cpu
       caches.	 On  systems  with more	than one CPU it	may not	be possible to
       allocate	the specified number of	items even when	there is  no  shortage
       of memory, because all of the remaining free items may be in the	caches
       of the other CPUs when the limit	is hit.

RETURN VALUES
       The  uma_zalloc() function returns a pointer to an item,	or NULL	if the
       zone ran	out of unused items and	the allocator was  unable  to  enlarge
       it.

SEE ALSO
       malloc(9)

HISTORY
       The  zone  allocator  first  appeared in	FreeBSD	3.0.  It was radically
       changed in FreeBSD 5.0 to function as a slab allocator.

AUTHORS
       The zone	allocator was written by John S. Dyson.	  The  zone  allocator
       was  rewritten  in  large  parts	by Jeff	Roberson <jeff@FreeBSD.org> to
       function	as a slab allocator.

       This manual page	was written by Dag-Erling Smorgrav  <des@FreeBSD.org>.
       Changes for UMA by Jeroen Ruigrok van der Werven	<asmodai@FreeBSD.org>.

FreeBSD	7.0			October	2, 2006			       ZONE(9)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=uma&sektion=9&manpath=FreeBSD+7.0-RELEASE>

home | help