xref: /freebsd/sys/kern/subr_param.c (revision 51369649b03ece2aed3eb61b0c8214b9aa5b2fa2)
19454b2d8SWarner Losh /*-
2*51369649SPedro F. Giffuni  * SPDX-License-Identifier: BSD-3-Clause
3*51369649SPedro F. Giffuni  *
4df8bae1dSRodney W. Grimes  * Copyright (c) 1980, 1986, 1989, 1993
5df8bae1dSRodney W. Grimes  *	The Regents of the University of California.  All rights reserved.
6df8bae1dSRodney W. Grimes  * (c) UNIX System Laboratories, Inc.
7df8bae1dSRodney W. Grimes  * All or some portions of this file are derived from material licensed
8df8bae1dSRodney W. Grimes  * to the University of California by American Telephone and Telegraph
9df8bae1dSRodney W. Grimes  * Co. or Unix System Laboratories, Inc. and are reproduced herein with
10df8bae1dSRodney W. Grimes  * the permission of UNIX System Laboratories, Inc.
11df8bae1dSRodney W. Grimes  *
12df8bae1dSRodney W. Grimes  * Redistribution and use in source and binary forms, with or without
13df8bae1dSRodney W. Grimes  * modification, are permitted provided that the following conditions
14df8bae1dSRodney W. Grimes  * are met:
15df8bae1dSRodney W. Grimes  * 1. Redistributions of source code must retain the above copyright
16df8bae1dSRodney W. Grimes  *    notice, this list of conditions and the following disclaimer.
17df8bae1dSRodney W. Grimes  * 2. Redistributions in binary form must reproduce the above copyright
18df8bae1dSRodney W. Grimes  *    notice, this list of conditions and the following disclaimer in the
19df8bae1dSRodney W. Grimes  *    documentation and/or other materials provided with the distribution.
2069a28758SEd Maste  * 3. Neither the name of the University nor the names of its contributors
21df8bae1dSRodney W. Grimes  *    may be used to endorse or promote products derived from this software
22df8bae1dSRodney W. Grimes  *    without specific prior written permission.
23df8bae1dSRodney W. Grimes  *
24df8bae1dSRodney W. Grimes  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25df8bae1dSRodney W. Grimes  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26df8bae1dSRodney W. Grimes  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27df8bae1dSRodney W. Grimes  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28df8bae1dSRodney W. Grimes  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29df8bae1dSRodney W. Grimes  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30df8bae1dSRodney W. Grimes  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31df8bae1dSRodney W. Grimes  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32df8bae1dSRodney W. Grimes  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33df8bae1dSRodney W. Grimes  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34df8bae1dSRodney W. Grimes  * SUCH DAMAGE.
35df8bae1dSRodney W. Grimes  *
3670b012caSJeffrey Hsu  *	@(#)param.c	8.3 (Berkeley) 8/20/94
37df8bae1dSRodney W. Grimes  */
38df8bae1dSRodney W. Grimes 
39677b542eSDavid E. O'Brien #include <sys/cdefs.h>
40677b542eSDavid E. O'Brien __FBSDID("$FreeBSD$");
41677b542eSDavid E. O'Brien 
424bd49128SPeter Wemm #include "opt_param.h"
434053b05bSSergey Kandaurov #include "opt_msgbuf.h"
44ee342e1bSPeter Wemm #include "opt_maxusers.h"
4550c73f36SGarrett Wollman 
46df8bae1dSRodney W. Grimes #include <sys/param.h>
47ee342e1bSPeter Wemm #include <sys/systm.h>
48ee342e1bSPeter Wemm #include <sys/kernel.h>
4902c6fc21SKonstantin Belousov #include <sys/limits.h>
504053b05bSSergey Kandaurov #include <sys/msgbuf.h>
5102c6fc21SKonstantin Belousov #include <sys/sysctl.h>
5202c6fc21SKonstantin Belousov #include <sys/proc.h>
53df8bae1dSRodney W. Grimes 
54e9a3f785SAlan Cox #include <vm/vm.h>
557419d1e2SDag-Erling Smørgrav #include <vm/vm_param.h>
56e9a3f785SAlan Cox #include <vm/pmap.h>
57cbc89bfbSPaul Saab 
58df8bae1dSRodney W. Grimes /*
59df8bae1dSRodney W. Grimes  * System parameter formulae.
60df8bae1dSRodney W. Grimes  */
61df8bae1dSRodney W. Grimes 
62df8bae1dSRodney W. Grimes #ifndef HZ
63bcebf6a1SNathan Whitehorn #  if defined(__mips__) || defined(__arm__)
64df8bae1dSRodney W. Grimes #    define	HZ 100
65bcebf6a1SNathan Whitehorn #  else
66bcebf6a1SNathan Whitehorn #    define	HZ 1000
67df8bae1dSRodney W. Grimes #  endif
687f03c419SMaxim Sobolev #  ifndef HZ_VM
69347e22a6SMike Silbersack #    define	HZ_VM 100
707f03c419SMaxim Sobolev #  endif
717f03c419SMaxim Sobolev #else
727f03c419SMaxim Sobolev #  ifndef HZ_VM
737f03c419SMaxim Sobolev #    define	HZ_VM HZ
747f03c419SMaxim Sobolev #  endif
758f650450SPeter Wemm #endif
76ee342e1bSPeter Wemm #define	NPROC (20 + 16 * maxusers)
77ee342e1bSPeter Wemm #ifndef NBUF
78ee342e1bSPeter Wemm #define NBUF 0
79ee342e1bSPeter Wemm #endif
805a00f364SDag-Erling Smørgrav #ifndef MAXFILES
811f57d8c6SKonstantin Belousov #define	MAXFILES (40 + 32 * maxusers)
825a00f364SDag-Erling Smørgrav #endif
83dd0b2081SDavid Greenman 
843610a226SIvan Voras static int sysctl_kern_vm_guest(SYSCTL_HANDLER_ARGS);
853610a226SIvan Voras 
865b999a6bSDavide Italiano int	hz;				/* system clock's frequency */
875b999a6bSDavide Italiano int	tick;				/* usec per tick (1000000 / hz) */
885b999a6bSDavide Italiano struct bintime tick_bt;			/* bintime per tick (1s / hz) */
895b999a6bSDavide Italiano sbintime_t tick_sbt;
90ee342e1bSPeter Wemm int	maxusers;			/* base tunable */
91ee342e1bSPeter Wemm int	maxproc;			/* maximum # of processes */
92ee342e1bSPeter Wemm int	maxprocperuid;			/* max # of procs per user */
93ee342e1bSPeter Wemm int	maxfiles;			/* sys. wide open files limit */
94ee342e1bSPeter Wemm int	maxfilesperproc;		/* per-proc open files limit */
954053b05bSSergey Kandaurov int	msgbufsize;			/* size of kernel message buffer */
96ee342e1bSPeter Wemm int	nbuf;
97ee75e7deSKonstantin Belousov int	bio_transient_maxcnt;
98412f9500SBrooks Davis int	ngroups_max;			/* max # groups per process */
99ee342e1bSPeter Wemm int	nswbuf;
10002c6fc21SKonstantin Belousov pid_t	pid_max = PID_MAX;
1015bd65606SJohn Baldwin long	maxswzone;			/* max swmeta KVA storage */
1025bd65606SJohn Baldwin long	maxbcache;			/* max buffer cache KVA storage */
10364ecd139SJohn Baldwin long	maxpipekva;			/* Limit on pipe KVA */
10401e1933dSJohn Baldwin int	vm_guest = VM_GUEST_NO;		/* Running as virtual machine guest? */
1057419d1e2SDag-Erling Smørgrav u_long	maxtsiz;			/* max text size */
1067419d1e2SDag-Erling Smørgrav u_long	dfldsiz;			/* initial data size limit */
1077419d1e2SDag-Erling Smørgrav u_long	maxdsiz;			/* max data size */
1087419d1e2SDag-Erling Smørgrav u_long	dflssiz;			/* initial stack size limit */
1097419d1e2SDag-Erling Smørgrav u_long	maxssiz;			/* max stack size */
1107419d1e2SDag-Erling Smørgrav u_long	sgrowsiz;			/* amount to grow stack */
111df8bae1dSRodney W. Grimes 
112af3b2549SHans Petter Selasky SYSCTL_INT(_kern, OID_AUTO, hz, CTLFLAG_RDTUN | CTLFLAG_NOFETCH, &hz, 0,
1139b84ba1cSJohn Baldwin     "Number of clock ticks per second");
114af3b2549SHans Petter Selasky SYSCTL_INT(_kern, OID_AUTO, nbuf, CTLFLAG_RDTUN | CTLFLAG_NOFETCH, &nbuf, 0,
1159b84ba1cSJohn Baldwin     "Number of buffers in the buffer cache");
116af3b2549SHans Petter Selasky SYSCTL_INT(_kern, OID_AUTO, nswbuf, CTLFLAG_RDTUN | CTLFLAG_NOFETCH, &nswbuf, 0,
117b9f2a7daSJohn Baldwin     "Number of swap buffers");
118af3b2549SHans Petter Selasky SYSCTL_INT(_kern, OID_AUTO, msgbufsize, CTLFLAG_RDTUN | CTLFLAG_NOFETCH, &msgbufsize, 0,
1194053b05bSSergey Kandaurov     "Size of the kernel message buffer");
120af3b2549SHans Petter Selasky SYSCTL_LONG(_kern, OID_AUTO, maxswzone, CTLFLAG_RDTUN | CTLFLAG_NOFETCH, &maxswzone, 0,
1219b84ba1cSJohn Baldwin     "Maximum memory for swap metadata");
122af3b2549SHans Petter Selasky SYSCTL_LONG(_kern, OID_AUTO, maxbcache, CTLFLAG_RDTUN | CTLFLAG_NOFETCH, &maxbcache, 0,
1239b84ba1cSJohn Baldwin     "Maximum value of vfs.maxbufspace");
124af3b2549SHans Petter Selasky SYSCTL_INT(_kern, OID_AUTO, bio_transient_maxcnt, CTLFLAG_RDTUN | CTLFLAG_NOFETCH,
125ee75e7deSKonstantin Belousov     &bio_transient_maxcnt, 0,
126ee75e7deSKonstantin Belousov     "Maximum number of transient BIOs mappings");
127af3b2549SHans Petter Selasky SYSCTL_ULONG(_kern, OID_AUTO, maxtsiz, CTLFLAG_RWTUN | CTLFLAG_NOFETCH, &maxtsiz, 0,
1289b84ba1cSJohn Baldwin     "Maximum text size");
129af3b2549SHans Petter Selasky SYSCTL_ULONG(_kern, OID_AUTO, dfldsiz, CTLFLAG_RWTUN | CTLFLAG_NOFETCH, &dfldsiz, 0,
1309b84ba1cSJohn Baldwin     "Initial data size limit");
131af3b2549SHans Petter Selasky SYSCTL_ULONG(_kern, OID_AUTO, maxdsiz, CTLFLAG_RWTUN | CTLFLAG_NOFETCH, &maxdsiz, 0,
1329b84ba1cSJohn Baldwin     "Maximum data size");
133af3b2549SHans Petter Selasky SYSCTL_ULONG(_kern, OID_AUTO, dflssiz, CTLFLAG_RWTUN | CTLFLAG_NOFETCH, &dflssiz, 0,
1349b84ba1cSJohn Baldwin     "Initial stack size limit");
135af3b2549SHans Petter Selasky SYSCTL_ULONG(_kern, OID_AUTO, maxssiz, CTLFLAG_RWTUN | CTLFLAG_NOFETCH, &maxssiz, 0,
1369b84ba1cSJohn Baldwin     "Maximum stack size");
137af3b2549SHans Petter Selasky SYSCTL_ULONG(_kern, OID_AUTO, sgrowsiz, CTLFLAG_RWTUN | CTLFLAG_NOFETCH, &sgrowsiz, 0,
138ceb0f715SAndrey Zonov     "Amount to grow stack on a stack fault");
1393610a226SIvan Voras SYSCTL_PROC(_kern, OID_AUTO, vm_guest, CTLFLAG_RD | CTLTYPE_STRING,
1403610a226SIvan Voras     NULL, 0, sysctl_kern_vm_guest, "A",
14101e1933dSJohn Baldwin     "Virtual machine guest detected?");
1427c45a9c4SAlfred Perlstein 
143df8bae1dSRodney W. Grimes /*
1440b993ee5SAlan Cox  * The elements of this array are ordered based upon the values of the
1450b993ee5SAlan Cox  * corresponding enum VM_GUEST members.
1460b993ee5SAlan Cox  */
14734820bbfSBjoern A. Zeeb static const char *const vm_guest_sysctl_names[] = {
14834820bbfSBjoern A. Zeeb 	"none",
14934820bbfSBjoern A. Zeeb 	"generic",
15034820bbfSBjoern A. Zeeb 	"xen",
15140b4cb0fSSergey Kandaurov 	"hv",
15201e1933dSJohn Baldwin 	"vmware",
153fdb6320dSEric Badger 	"kvm",
154e0a6a23cSMarcelo Araujo 	"bhyve",
15534820bbfSBjoern A. Zeeb 	NULL
15634820bbfSBjoern A. Zeeb };
157903093ecSSergey Kandaurov CTASSERT(nitems(vm_guest_sysctl_names) - 1 == VM_LAST);
15834820bbfSBjoern A. Zeeb 
1599722d88fSJason Evans /*
16066a11b9fSMatthew Dillon  * Boot time overrides that are not scaled against main memory
161ee342e1bSPeter Wemm  */
162ee342e1bSPeter Wemm void
16366a11b9fSMatthew Dillon init_param1(void)
164ee342e1bSPeter Wemm {
16501e1933dSJohn Baldwin 
166edc82223SKonstantin Belousov #if !defined(__mips__) && !defined(__arm64__) && !defined(__sparc64__)
167edc82223SKonstantin Belousov 	TUNABLE_INT_FETCH("kern.kstack_pages", &kstack_pages);
168edc82223SKonstantin Belousov #endif
1697f03c419SMaxim Sobolev 	hz = -1;
170ee342e1bSPeter Wemm 	TUNABLE_INT_FETCH("kern.hz", &hz);
1719bd2cbe4SJung-uk Kim 	if (hz == -1)
1723dc30911SIvan Voras 		hz = vm_guest > VM_GUEST_NO ? HZ_VM : HZ;
173ee342e1bSPeter Wemm 	tick = 1000000 / hz;
1745b999a6bSDavide Italiano 	tick_sbt = SBT_1S / hz;
1755b999a6bSDavide Italiano 	tick_bt = sbttobt(tick_sbt);
176ee342e1bSPeter Wemm 
1775d8cce17SJohn Baldwin 	/*
1785d8cce17SJohn Baldwin 	 * Arrange for ticks to wrap 10 minutes after boot to help catch
1795d8cce17SJohn Baldwin 	 * sign problems sooner.
1805d8cce17SJohn Baldwin 	 */
1815d8cce17SJohn Baldwin 	ticks = INT_MAX - (hz * 10 * 60);
1825d8cce17SJohn Baldwin 
183e1616f3aSMatthew Dillon #ifdef VM_SWZONE_SIZE_MAX
1842f9e4e80SMatthew Dillon 	maxswzone = VM_SWZONE_SIZE_MAX;
185e1616f3aSMatthew Dillon #endif
1865bd65606SJohn Baldwin 	TUNABLE_LONG_FETCH("kern.maxswzone", &maxswzone);
187e1616f3aSMatthew Dillon #ifdef VM_BCACHE_SIZE_MAX
1882f9e4e80SMatthew Dillon 	maxbcache = VM_BCACHE_SIZE_MAX;
189e1616f3aSMatthew Dillon #endif
1905bd65606SJohn Baldwin 	TUNABLE_LONG_FETCH("kern.maxbcache", &maxbcache);
1914053b05bSSergey Kandaurov 	msgbufsize = MSGBUF_SIZE;
1924053b05bSSergey Kandaurov 	TUNABLE_INT_FETCH("kern.msgbufsize", &msgbufsize);
193cbc89bfbSPaul Saab 
194cbc89bfbSPaul Saab 	maxtsiz = MAXTSIZ;
1957419d1e2SDag-Erling Smørgrav 	TUNABLE_ULONG_FETCH("kern.maxtsiz", &maxtsiz);
196cbc89bfbSPaul Saab 	dfldsiz = DFLDSIZ;
1977419d1e2SDag-Erling Smørgrav 	TUNABLE_ULONG_FETCH("kern.dfldsiz", &dfldsiz);
198cbc89bfbSPaul Saab 	maxdsiz = MAXDSIZ;
1997419d1e2SDag-Erling Smørgrav 	TUNABLE_ULONG_FETCH("kern.maxdsiz", &maxdsiz);
200cbc89bfbSPaul Saab 	dflssiz = DFLSSIZ;
2017419d1e2SDag-Erling Smørgrav 	TUNABLE_ULONG_FETCH("kern.dflssiz", &dflssiz);
202cbc89bfbSPaul Saab 	maxssiz = MAXSSIZ;
2037419d1e2SDag-Erling Smørgrav 	TUNABLE_ULONG_FETCH("kern.maxssiz", &maxssiz);
204cbc89bfbSPaul Saab 	sgrowsiz = SGROWSIZ;
2057419d1e2SDag-Erling Smørgrav 	TUNABLE_ULONG_FETCH("kern.sgrowsiz", &sgrowsiz);
206412f9500SBrooks Davis 
207412f9500SBrooks Davis 	/*
208412f9500SBrooks Davis 	 * Let the administrator set {NGROUPS_MAX}, but disallow values
209412f9500SBrooks Davis 	 * less than NGROUPS_MAX which would violate POSIX.1-2008 or
210412f9500SBrooks Davis 	 * greater than INT_MAX-1 which would result in overflow.
211412f9500SBrooks Davis 	 */
212412f9500SBrooks Davis 	ngroups_max = NGROUPS_MAX;
213412f9500SBrooks Davis 	TUNABLE_INT_FETCH("kern.ngroups", &ngroups_max);
214412f9500SBrooks Davis 	if (ngroups_max < NGROUPS_MAX)
215412f9500SBrooks Davis 		ngroups_max = NGROUPS_MAX;
21602c6fc21SKonstantin Belousov 
21702c6fc21SKonstantin Belousov 	/*
21802c6fc21SKonstantin Belousov 	 * Only allow to lower the maximal pid.
2193fa615bcSKonstantin Belousov 	 * Prevent setting up a non-bootable system if pid_max is too low.
22002c6fc21SKonstantin Belousov 	 */
22102c6fc21SKonstantin Belousov 	TUNABLE_INT_FETCH("kern.pid_max", &pid_max);
22202c6fc21SKonstantin Belousov 	if (pid_max > PID_MAX)
22302c6fc21SKonstantin Belousov 		pid_max = PID_MAX;
2243fa615bcSKonstantin Belousov 	else if (pid_max < 300)
2253fa615bcSKonstantin Belousov 		pid_max = 300;
226ee75e7deSKonstantin Belousov 
227ee75e7deSKonstantin Belousov 	TUNABLE_INT_FETCH("vfs.unmapped_buf_allowed", &unmapped_buf_allowed);
228ee342e1bSPeter Wemm }
22966a11b9fSMatthew Dillon 
23066a11b9fSMatthew Dillon /*
23166a11b9fSMatthew Dillon  * Boot time overrides that are scaled against main memory
23266a11b9fSMatthew Dillon  */
23366a11b9fSMatthew Dillon void
234447b3772SPeter Wemm init_param2(long physpages)
23566a11b9fSMatthew Dillon {
23666a11b9fSMatthew Dillon 
23766a11b9fSMatthew Dillon 	/* Base parameters */
2380b94a0e9SMatthew Dillon 	maxusers = MAXUSERS;
2390b94a0e9SMatthew Dillon 	TUNABLE_INT_FETCH("kern.maxusers", &maxusers);
2400b94a0e9SMatthew Dillon 	if (maxusers == 0) {
2414fbd563eSMatthew Dillon 		maxusers = physpages / (2 * 1024 * 1024 / PAGE_SIZE);
24266a11b9fSMatthew Dillon 		if (maxusers < 32)
24366a11b9fSMatthew Dillon 			maxusers = 32;
24479f62ed6SAlfred Perlstein #ifdef VM_MAX_AUTOTUNE_MAXUSERS
24579f62ed6SAlfred Perlstein                 if (maxusers > VM_MAX_AUTOTUNE_MAXUSERS)
24679f62ed6SAlfred Perlstein                         maxusers = VM_MAX_AUTOTUNE_MAXUSERS;
24779f62ed6SAlfred Perlstein #endif
2487b6d92c0SAlfred Perlstein                 /*
24979f62ed6SAlfred Perlstein                  * Scales down the function in which maxusers grows once
25079f62ed6SAlfred Perlstein                  * we hit 384.
2517b6d92c0SAlfred Perlstein                  */
25279f62ed6SAlfred Perlstein                 if (maxusers > 384)
25379f62ed6SAlfred Perlstein                         maxusers = 384 + ((maxusers - 384) / 8);
25466a11b9fSMatthew Dillon         }
25566a11b9fSMatthew Dillon 
25666a11b9fSMatthew Dillon 	/*
25766a11b9fSMatthew Dillon 	 * The following can be overridden after boot via sysctl.  Note:
25866a11b9fSMatthew Dillon 	 * unless overriden, these macros are ultimately based on maxusers.
25977a7d074SMike Silbersack 	 * Limit maxproc so that kmap entries cannot be exhausted by
26077a7d074SMike Silbersack 	 * processes.
26177a7d074SMike Silbersack 	 */
262ead46972SAndre Oppermann 	maxproc = NPROC;
263ead46972SAndre Oppermann 	TUNABLE_INT_FETCH("kern.maxproc", &maxproc);
26477a7d074SMike Silbersack 	if (maxproc > (physpages / 12))
26577a7d074SMike Silbersack 		maxproc = physpages / 12;
2661f57d8c6SKonstantin Belousov 	if (maxproc > pid_max)
2671f57d8c6SKonstantin Belousov 		maxproc = pid_max;
268ebacce5eSMike Silbersack 	maxprocperuid = (maxproc * 9) / 10;
269ead46972SAndre Oppermann 
270ead46972SAndre Oppermann 	/*
271ead46972SAndre Oppermann 	 * The default limit for maxfiles is 1/12 of the number of
272ead46972SAndre Oppermann 	 * physical page but not less than 16 times maxusers.
273ead46972SAndre Oppermann 	 * At most it can be 1/6 the number of physical pages.
274ead46972SAndre Oppermann 	 */
275ead46972SAndre Oppermann 	maxfiles = imax(MAXFILES, physpages / 8);
276ead46972SAndre Oppermann 	TUNABLE_INT_FETCH("kern.maxfiles", &maxfiles);
277ead46972SAndre Oppermann 	if (maxfiles > (physpages / 4))
278ead46972SAndre Oppermann 		maxfiles = physpages / 4;
279ead46972SAndre Oppermann 	maxfilesperproc = (maxfiles / 10) * 9;
28032766cd2SAdrian Chadd 	TUNABLE_INT_FETCH("kern.maxfilesperproc", &maxfilesperproc);
28166a11b9fSMatthew Dillon 
28266a11b9fSMatthew Dillon 	/*
283347194c1SMike Silbersack 	 * Cannot be changed after boot.
284347194c1SMike Silbersack 	 */
285347194c1SMike Silbersack 	nbuf = NBUF;
286347194c1SMike Silbersack 	TUNABLE_INT_FETCH("kern.nbuf", &nbuf);
287ee75e7deSKonstantin Belousov 	TUNABLE_INT_FETCH("kern.bio_transient_maxcnt", &bio_transient_maxcnt);
288347194c1SMike Silbersack 
289ead46972SAndre Oppermann 	/*
290e9a3f785SAlan Cox 	 * The default for maxpipekva is min(1/64 of the kernel address space,
291e9a3f785SAlan Cox 	 * max(1/64 of main memory, 512KB)).  See sys_pipe.c for more details.
292347194c1SMike Silbersack 	 */
293e9a3f785SAlan Cox 	maxpipekva = (physpages / 64) * PAGE_SIZE;
294ead46972SAndre Oppermann 	TUNABLE_LONG_FETCH("kern.ipc.maxpipekva", &maxpipekva);
295289016f2SMike Silbersack 	if (maxpipekva < 512 * 1024)
296289016f2SMike Silbersack 		maxpipekva = 512 * 1024;
297e9a3f785SAlan Cox 	if (maxpipekva > (VM_MAX_KERNEL_ADDRESS - VM_MIN_KERNEL_ADDRESS) / 64)
298e9a3f785SAlan Cox 		maxpipekva = (VM_MAX_KERNEL_ADDRESS - VM_MIN_KERNEL_ADDRESS) /
299e9a3f785SAlan Cox 		    64;
30066a11b9fSMatthew Dillon }
3013610a226SIvan Voras 
3023610a226SIvan Voras /*
30346038d7fSKonstantin Belousov  * Sysctl stringifying handler for kern.vm_guest.
3043610a226SIvan Voras  */
3053610a226SIvan Voras static int
3063610a226SIvan Voras sysctl_kern_vm_guest(SYSCTL_HANDLER_ARGS)
3073610a226SIvan Voras {
308acfc962fSIan Lepore 	return (SYSCTL_OUT_STR(req, vm_guest_sysctl_names[vm_guest]));
3093610a226SIvan Voras }
310