-CURRENT kernel panic
Jon Noack
noackjr at alumni.rice.edu
Thu Mar 4 23:00:50 PST 2004
On 3/4/2004 4:13 PM, Vincent Poy wrote:
> On Thu, 4 Mar 2004, Andrew Gallatin wrote:
>> Vincent Poy writes:
>>> On Thu, 4 Mar 2004, Andrew Gallatin wrote:
>>>
>>> Interesting. I'm still wondering what the VM_KMEM_SIZE_SCALE
>>> number represents.
>>
>> It tries to autoscale the kmem size, so that you don't need to hard
>> code it. Hardcoding it could be bad if you change the amount of ram
>> in the box.
>
> That part I understand but what exactly does the number 2 and 3
> mean?
VM_KMEM_SIZE_SCALE:
How many physical pages per KVA page allocated.
The method I used to find this information:
$ cd /usr/src/sys; grep -r VM_KMEM_SIZE_SCALE *
src/sys/<arch>/include/vmparam.h (this is for 'i386'):
**********************************************************************
/* virtual sizes (bytes) for various kernel submaps */
#ifndef VM_KMEM_SIZE
#define VM_KMEM_SIZE (12 * 1024 * 1024)
#endif
/*
* How many physical pages per KVA page allocated.
* min(max(VM_KMEM_SIZE, Physical memory/VM_KMEM_SIZE_SCALE),
VM_KMEM_SIZE_MAX)
* is the total KVA space allocated for kmem_map.
*/
#ifndef VM_KMEM_SIZE_SCALE
#define VM_KMEM_SIZE_SCALE (3)
#endif
/*
* Ceiling on amount of kmem_map kva space.
*/
#ifndef VM_KMEM_SIZE_MAX
#define VM_KMEM_SIZE_MAX (200 * 1024 * 1024)
#endif
**********************************************************************
src/sys/kern/kern_malloc.c:
**********************************************************************
/*
* Try to auto-tune the kernel memory size, so that it is
* more applicable for a wider range of machine sizes.
* On an X86, a VM_KMEM_SIZE_SCALE value of 4 is good, while
* a VM_KMEM_SIZE of 12MB is a fair compromise. The
* VM_KMEM_SIZE_MAX is dependent on the maximum KVA space
* available, and on an X86 with a total KVA space of 256MB,
* try to keep VM_KMEM_SIZE_MAX at 80MB or below.
*
* Note that the kmem_map is also used by the zone allocator,
* so make sure that there is enough space.
*/
vm_kmem_size = VM_KMEM_SIZE;
mem_size = cnt.v_page_count;
#if defined(VM_KMEM_SIZE_SCALE)
if ((mem_size / VM_KMEM_SIZE_SCALE) > (vm_kmem_size / PAGE_SIZE))
vm_kmem_size = (mem_size / VM_KMEM_SIZE_SCALE) * PAGE_SIZE;
#endif
#if defined(VM_KMEM_SIZE_MAX)
if (vm_kmem_size >= VM_KMEM_SIZE_MAX)
vm_kmem_size = VM_KMEM_SIZE_MAX;
#endif
**********************************************************************
Jon Noack
More information about the freebsd-current
mailing list