Date: Thu, 26 Jun 2003 15:46:49 -0400 (EDT) From: Jay Kuri <jay@oneway.com> To: Terry Lambert <tlambert2@mindspring.com> Cc: freebsd-current@FreeBSD.ORG Subject: Re: questions about VM_KMEM_SIZE_SCALE Message-ID: <Pine.BSF.4.21.0306261543330.32747-100000@redux.oneway.com> In-Reply-To: <3EFAA595.1B019A95@mindspring.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Thank you both very much. This fills in the gaps nicely and I think I
have a pretty good grip on this now. I feel like I can tune it a bit
without worry now. (and avoid those nasty panics. :-) ) Thank you very
very much.
Jay
On Thu, 26 Jun 2003, Terry Lambert wrote:
> David Schultz wrote:
> > On Tue, Jun 24, 2003, Jay Kuri wrote:
> > > Does changing this affect memory available to user programs if it's unused
> > > by the kernel?
> >
> > No, KVA_PAGES affects the memory available to user programs. (You
> > have a 4 GB address space on i386 to split between user programs
> > and the kernel.) Within the kernel's share of this address space,
> > memory is split into submaps, such as the mb_map (for the
> > network), buffer_map for the filesystem buffer cache, and the
> > kmem_map for just about everything else. These submaps are
> > size-limited to prevent any one of them from getting out of hand.
> >
> > The vm_kmem_map is sized automatically based on the amount of
> > memory you have. Specifically,
> >
> > kmem_map_size = min(max(VM_KMEM_SIZE, Physical memory/VM_KMEM_SIZE_SCALE),
> > VM_KMEM_SIZE_MAX)
> >
> > The default value for VM_KMEM_SIZE_SCALE is 3, and the default
> > VM_KMEM_SIZE_MAX is 200MB.
>
> David is exactly right in what he has said. Some minor ommisions
> about the implications of what he has said, though, are:
>
> 1) The intent of doing this is to ensure that, for a given
> amount of physical memory, you don't grab more than
> 1/VM_KMEM_SIZE_SCALE * 100 % of it (default: 50%) for
> the kmem_map.
>
> 2) If you *need* a much larger kmem_map, you are limited to
> 200K, no matter how much physical memory you have, unless
> you raise VM_KMEM_SIZE_MAX, as well.
>
> 3) If you want to explicitly control the memory size, you can
> set VM_KMEM_SIZE_SCALE very, very large, which will cause
> the second term in the "max()" expression to approach zero,
> and then set VM_KMEM_SIZE_MAX = VM_KMEM_SIZE = <some value>
> to disable the "min()" expression.
>
> 4) The kmem_map is used to allocate kernel structure having to
> do with memory management; if you have a very large amount
> of memory in your system, you should consider increasing
> VM_KMEM_SIZE_MAX, at a minimum, but realize that you are
> competing for KVA with all ather uses of kernel memory, so
> if your KVA space is 2G, and you have 4G of RAM, and your
> VM_KMEM_SIZE_SCALE is 2 and you set VM_KMEM_SIZE_MAX so it
> doesn't clamp the top end, you can run yourself out of KVA
> space. IMO, it would be good to use something like
> min(Physical Memory, KVA space) in place of Physical Memory
> as the first term of the min() expression.
>
> 5) It's generally useful to set VM_KMEM_SIZE_MAX huge, and
> then use only VM_KMEM_SIZE_SCALE to adjust how much of
> the physical RAM you allow the kmem_map to use (subject to
> the limits in #4, above).
>
> 6) Physical memory allocated to backing KVA resident maps
> like kmem_map don't reduce the amount of virtual memory
> available to user space processes; however, actually using
> the full KVA space worth of physical memory might mean that
> user space processes compete for physical RAM where they
> wouldn't before, and so it may mean swapping. Memory in
> KVA maps is generally type-stable and can't be reclaimed
> for user process use (i.e.: the kernel does not page, except
> for speciall allocated memory sections, and they are not
> generally used for anything important enough to get a map
> entry).
>
> -- Terry
>
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Nothing fails like success because you do not learn
anything from it. The only thing we ever learn from
is failure. Success only confirms our superstitions.
Jay Kuri jay@oneway.com
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0306261543330.32747-100000>
