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>