Date: Sun, 03 Feb 2013 12:04:43 +0200 From: Andriy Gapon <avg@FreeBSD.org> To: Alan Cox <alc@rice.edu> Cc: alc@FreeBSD.org, Alan Cox <alan.l.cox@gmail.com>, freebsd-arch@FreeBSD.org Subject: Re: kva size on amd64 Message-ID: <510E363B.9050207@FreeBSD.org> In-Reply-To: <510D5C37.6000507@rice.edu> References: <507E7E59.8060201@FreeBSD.org> <51098743.2050603@FreeBSD.org> <CAJUyCcOvHXauk76LnahQPGmdcHbkDOiR1_=4w%2BDW=sZ6i6EJ%2BA@mail.gmail.com> <510A2C09.6030709@FreeBSD.org> <510AB848.3010806@rice.edu> <510B8F2B.5070609@FreeBSD.org> <510D5C37.6000507@rice.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
on 02/02/2013 20:34 Alan Cox said the following:
> On 02/01/2013 03:47, Andriy Gapon wrote:
>> Actually, I have been obsessed quite for some time with an idea of confining ZFS
>> to its own submap. But ZFS does its allocations through malloc(9) and uma(9)
>> (depending on configuration). It seemed like a bit of work to provide support
>> for per-zone or per-tag submaps in uma and malloc.
>> What is your opinion of this approach?
>
> I'm skeptical that it would accomplish anything. Specifically, I don't
> think that it would have any impact on the fragmentation problem that we
> have with ZFS. On amd64, with its direct map, all small allocations are
> implemented by uma_small_alloc() and accessed through the direct map,
> rather than coming from the kmem map. Outside of ZFS, large, multipage
> allocations from the kmem map aren't that common. So, for all practical
> purposes, ZFS has the kmem map to itself.
I agree.
My line of thinking was this. Allocate smaller kmem_map bu default (e.g. 1/3 of
memory as it was before). If ZFS is not used, then that's it.
If ZFS is used then it allocated an additional submap out of kernel_map. The
submap would be sized based on configured or autoconfigured maximum size of ARC,
e.g. 1.5 * arc_max_size. But that's probably more wasteful than needed for
those who use ZFS.
> While I'm here, I'll offer some other food for thought. In HEAD, we
> have a new-ish function, vm_page_alloc_contig(), that can allocate
> contiguous, unmapped physical pages either to an arbitrary vm object or
> VM_ALLOC_NOOBJ, just like vm_page_alloc(). Moreover, just like
> vm_page_alloc(), it honors the VM_ALLOC_{NORMAL,SYSTEM,INTERRUPT}
> thresholds and wakes the page daemon when appropriate.
>
> Using this function, you could rewrite the multipage allocation code to
> first attempt allocation through vm_page_alloc_contig() and then fall
> back to the kmem map only if vm_page_alloc_contig() fails.
This is a very interesting idea for systems with direct map!
P.S.
I hope I don't get an indigestion with all the food :-)
--
Andriy Gapon
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?510E363B.9050207>
