summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsilby <silby@FreeBSD.org>2003-07-11 00:01:03 +0000
committersilby <silby@FreeBSD.org>2003-07-11 00:01:03 +0000
commit22ad6d5be5ebf6729480c99ce90cfa1294cb6bee (patch)
tree6520509797f9e04c3508e2af7ee540da27b84ae9
parent5b603201cc2ae0b710ed68f289001529568a6e1b (diff)
downloadFreeBSD-src-22ad6d5be5ebf6729480c99ce90cfa1294cb6bee.zip
FreeBSD-src-22ad6d5be5ebf6729480c99ce90cfa1294cb6bee.tar.gz
Add init_param3() to subr_param. This function is called
immediately after the kernel map has been sized, and is the optimal place for the autosizing of memory allocations which occur within the kernel map to occur. Suggested by: bde
-rw-r--r--sys/kern/kern_malloc.c5
-rw-r--r--sys/kern/subr_param.c42
-rw-r--r--sys/sys/systm.h1
3 files changed, 22 insertions, 26 deletions
diff --git a/sys/kern/kern_malloc.c b/sys/kern/kern_malloc.c
index 2d8daa3..a90d628 100644
--- a/sys/kern/kern_malloc.c
+++ b/sys/kern/kern_malloc.c
@@ -445,6 +445,11 @@ kmeminit(dummy)
vm_kmem_size = 2 * cnt.v_page_count * PAGE_SIZE;
/*
+ * Tune settings based on the kernel map's size at this time.
+ */
+ init_param3(vm_kmem_size / PAGE_SIZE);
+
+ /*
* In mbuf_init(), we set up submaps for mbufs and clusters, in which
* case we rounddown() (nmbufs * MSIZE) and (nmbclusters * MCLBYTES),
* respectively. Mathematically, this means that what we do here may
diff --git a/sys/kern/subr_param.c b/sys/kern/subr_param.c
index 427a94a..0482aa9 100644
--- a/sys/kern/subr_param.c
+++ b/sys/kern/subr_param.c
@@ -135,23 +135,6 @@ void
init_param2(long physpages)
{
- /* Kernel map size */
- int kmempages, kmemtunable;
- kmempages = VM_KMEM_SIZE / PAGE_SIZE;
-#if defined(VM_KMEM_SIZE_SCALE)
- if ((physpages / VM_KMEM_SIZE_SCALE) > kmempages)
- kmempages = (physpages / VM_KMEM_SIZE_SCALE);
-#endif
-
-#if defined(VM_KMEM_SIZE_MAX)
- if (kmempages * PAGE_SIZE >= VM_KMEM_SIZE_MAX)
- kmempages = VM_KMEM_SIZE_MAX / PAGE_SIZE;
-#endif
- kmemtunable = 0;
- TUNABLE_INT_FETCH("kern.vm.kmem.size", &kmemtunable);
- if (kmemtunable != 0)
- kmempages = kmemtunable / PAGE_SIZE;
- kmempages = min(physpages, kmempages);
/* Base parameters */
maxusers = MAXUSERS;
TUNABLE_INT_FETCH("kern.maxusers", &maxusers);
@@ -179,7 +162,23 @@ init_param2(long physpages)
TUNABLE_INT_FETCH("kern.maxfiles", &maxfiles);
maxprocperuid = (maxproc * 9) / 10;
maxfilesperproc = (maxfiles * 9) / 10;
+
+ /*
+ * Cannot be changed after boot.
+ */
+ nbuf = NBUF;
+ TUNABLE_INT_FETCH("kern.nbuf", &nbuf);
+
+ ncallout = 16 + maxproc + maxfiles;
+ TUNABLE_INT_FETCH("kern.ncallout", &ncallout);
+}
+/*
+ * Boot time overrides that are scaled against the kernel map
+ */
+void
+init_param3(long kmempages)
+{
/*
* Limit number of pipes to a reasonable fraction of kmap entries,
* pageable pipe memory usage to 2.5% of the kernel map, and wired
@@ -196,13 +195,4 @@ init_param2(long physpages)
maxpipekva = 512 * 1024;
if (maxpipekvawired < 512 * 1024)
maxpipekvawired = 512 * 1024;
-
- /*
- * Cannot be changed after boot.
- */
- nbuf = NBUF;
- TUNABLE_INT_FETCH("kern.nbuf", &nbuf);
-
- ncallout = 16 + maxproc + maxfiles;
- TUNABLE_INT_FETCH("kern.ncallout", &ncallout);
}
diff --git a/sys/sys/systm.h b/sys/sys/systm.h
index 04d54cd..0f7889f 100644
--- a/sys/sys/systm.h
+++ b/sys/sys/systm.h
@@ -147,6 +147,7 @@ void critical_enter(void);
void critical_exit(void);
void init_param1(void);
void init_param2(long physpages);
+void init_param3(long kmempages);
void tablefull(const char *);
int kvprintf(char const *, void (*)(int, void*), void *, int,
__va_list) __printflike(1, 0);
OpenPOWER on IntegriCloud