Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 11 Mar 2014 23:25:17 -0700
From:      John-Mark Gurney <jmg@funkthat.com>
To:        Rick Macklem <rmacklem@uoguelph.ca>
Cc:        Freebsd hackers list <freebsd-hackers@freebsd.org>, Garrett Wollman <wollman@freebsd.org>
Subject:   Re: kernel memory allocator: UMA or malloc?
Message-ID:  <20140312062517.GX32089@funkthat.com>
In-Reply-To: <829240556.20994461.1394587951698.JavaMail.root@uoguelph.ca>
References:  <829240556.20994461.1394587951698.JavaMail.root@uoguelph.ca>

next in thread | previous in thread | raw e-mail | index | archive | help
Rick Macklem wrote this message on Tue, Mar 11, 2014 at 21:32 -0400:
> I've been working on a patch provided by wollman@, where
> he uses UMA instead of malloc() to allocate an iovec array
> for use by the NFS server's read.
> 
> So, my question is:
> When is it preferable to use UMA(9) vs malloc(9) if the
> allocation is going to be a fixed size?

UMA has benefits if the structure size is uniform and a non-power of 2..
In this case, it can pack the items more densely, say, a 192 byte
allocation can fit 21 allocations in a 4k page size verse malloc which
would round it up to 256 bytes leaving only 16 per page...  These
counts per page are probably different as UMA may keep some information
in the page...

It also has the benefit of being able to keep allocations "half alive"..
"freed" objects can be partly initalized with references to buffers and
other allocations still held by them... Then if the systems needs to
fully free your allocation, it can, and will call your function to
release these remaining resources... look at the ctor/dtor uminit/fini
functions in uma(9) for more info...

uma also allows you to set a hard limit on the number of allocations
the zone provides...

Hope this helps...

-- 
  John-Mark Gurney				Voice: +1 415 225 5579

     "All that I will do, has been done, All that I have, has not."



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20140312062517.GX32089>