xref: /freebsd/sys/i386/include/vmparam.h (revision 7f8cb368698e810921be03374f8c227500631f4b)
15b81b6b3SRodney W. Grimes /*-
25b81b6b3SRodney W. Grimes  * Copyright (c) 1990 The Regents of the University of California.
35b81b6b3SRodney W. Grimes  * All rights reserved.
47f8cb368SDavid Greenman  * Copyright (c) 1994 John S. Dyson
57f8cb368SDavid Greenman  * All rights reserved.
65b81b6b3SRodney W. Grimes  *
75b81b6b3SRodney W. Grimes  * This code is derived from software contributed to Berkeley by
85b81b6b3SRodney W. Grimes  * William Jolitz.
95b81b6b3SRodney W. Grimes  *
105b81b6b3SRodney W. Grimes  * Redistribution and use in source and binary forms, with or without
115b81b6b3SRodney W. Grimes  * modification, are permitted provided that the following conditions
125b81b6b3SRodney W. Grimes  * are met:
135b81b6b3SRodney W. Grimes  * 1. Redistributions of source code must retain the above copyright
145b81b6b3SRodney W. Grimes  *    notice, this list of conditions and the following disclaimer.
155b81b6b3SRodney W. Grimes  * 2. Redistributions in binary form must reproduce the above copyright
165b81b6b3SRodney W. Grimes  *    notice, this list of conditions and the following disclaimer in the
175b81b6b3SRodney W. Grimes  *    documentation and/or other materials provided with the distribution.
185b81b6b3SRodney W. Grimes  * 3. All advertising materials mentioning features or use of this software
195b81b6b3SRodney W. Grimes  *    must display the following acknowledgement:
205b81b6b3SRodney W. Grimes  *	This product includes software developed by the University of
215b81b6b3SRodney W. Grimes  *	California, Berkeley and its contributors.
225b81b6b3SRodney W. Grimes  * 4. Neither the name of the University nor the names of its contributors
235b81b6b3SRodney W. Grimes  *    may be used to endorse or promote products derived from this software
245b81b6b3SRodney W. Grimes  *    without specific prior written permission.
255b81b6b3SRodney W. Grimes  *
265b81b6b3SRodney W. Grimes  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
275b81b6b3SRodney W. Grimes  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
285b81b6b3SRodney W. Grimes  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
295b81b6b3SRodney W. Grimes  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
305b81b6b3SRodney W. Grimes  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
315b81b6b3SRodney W. Grimes  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
325b81b6b3SRodney W. Grimes  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
335b81b6b3SRodney W. Grimes  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
345b81b6b3SRodney W. Grimes  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
355b81b6b3SRodney W. Grimes  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
365b81b6b3SRodney W. Grimes  * SUCH DAMAGE.
375b81b6b3SRodney W. Grimes  *
38d42d25c4SRodney W. Grimes  *	from: @(#)vmparam.h	5.9 (Berkeley) 5/12/91
397f8cb368SDavid Greenman  *	$Id: vmparam.h,v 1.10 1994/01/03 16:00:52 davidg Exp $
405b81b6b3SRodney W. Grimes  */
415b81b6b3SRodney W. Grimes 
425b81b6b3SRodney W. Grimes 
436e393973SGarrett Wollman #ifndef _MACHINE_VMPARAM_H_
446e393973SGarrett Wollman #define _MACHINE_VMPARAM_H_ 1
456e393973SGarrett Wollman 
465b81b6b3SRodney W. Grimes /*
475b81b6b3SRodney W. Grimes  * Machine dependent constants for 386.
485b81b6b3SRodney W. Grimes  */
495b81b6b3SRodney W. Grimes 
505b81b6b3SRodney W. Grimes /*
515b81b6b3SRodney W. Grimes  * Virtual address space arrangement. On 386, both user and kernel
525b81b6b3SRodney W. Grimes  * share the address space, not unlike the vax.
535b81b6b3SRodney W. Grimes  * USRTEXT is the start of the user text/data space, while USRSTACK
545b81b6b3SRodney W. Grimes  * is the top (end) of the user stack. Immediately above the user stack
555b81b6b3SRodney W. Grimes  * resides the user structure, which is UPAGES long and contains the
565b81b6b3SRodney W. Grimes  * kernel stack.
575b81b6b3SRodney W. Grimes  *
585b81b6b3SRodney W. Grimes  * Immediately after the user structure is the page table map, and then
595b81b6b3SRodney W. Grimes  * kernal address space.
605b81b6b3SRodney W. Grimes  */
61aaf08d94SGarrett Wollman #define	USRTEXT		0UL
627f8cb368SDavid Greenman /* #define	USRSTACK	0xFDBFE000UL */
635b81b6b3SRodney W. Grimes #define	BTOPUSRSTACK	(0xFDC00-(UPAGES))	/* btop(USRSTACK) */
64aaf08d94SGarrett Wollman #define	LOWPAGES	0UL
655b81b6b3SRodney W. Grimes #define HIGHPAGES	UPAGES
665b81b6b3SRodney W. Grimes 
675b81b6b3SRodney W. Grimes /*
685b81b6b3SRodney W. Grimes  * Virtual memory related constants, all in bytes
695b81b6b3SRodney W. Grimes  */
70e10a6186SDavid Greenman #define	MAXTSIZ		(16UL*1024*1024)	/* max text size */
715b81b6b3SRodney W. Grimes #ifndef DFLDSIZ
72e10a6186SDavid Greenman #define	DFLDSIZ		(64UL*1024*1024)	/* initial data size limit */
735b81b6b3SRodney W. Grimes #endif
745b81b6b3SRodney W. Grimes #ifndef MAXDSIZ
75e10a6186SDavid Greenman #define	MAXDSIZ		(128UL*1024*1024)	/* max data size */
765b81b6b3SRodney W. Grimes #endif
775b81b6b3SRodney W. Grimes #ifndef	DFLSSIZ
78aaf08d94SGarrett Wollman #define	DFLSSIZ		(512UL*1024)		/* initial stack size limit */
795b81b6b3SRodney W. Grimes #endif
805b81b6b3SRodney W. Grimes #ifndef	MAXSSIZ
81e10a6186SDavid Greenman #define	MAXSSIZ		(64UL*1024*1024)	/* max stack size */
825b81b6b3SRodney W. Grimes #endif
835b81b6b3SRodney W. Grimes 
845b81b6b3SRodney W. Grimes /*
855b81b6b3SRodney W. Grimes  * Default sizes of swap allocation chunks (see dmap.h).
865b81b6b3SRodney W. Grimes  * The actual values may be changed in vminit() based on MAXDSIZ.
875b81b6b3SRodney W. Grimes  * With MAXDSIZ of 16Mb and NDMAP of 38, dmmax will be 1024.
885b81b6b3SRodney W. Grimes  */
895b81b6b3SRodney W. Grimes #define	DMMIN	32			/* smallest swap allocation */
905b81b6b3SRodney W. Grimes #define	DMMAX	4096			/* largest potential swap allocation */
915b81b6b3SRodney W. Grimes #define	DMTEXT	1024			/* swap allocation for text */
925b81b6b3SRodney W. Grimes 
935b81b6b3SRodney W. Grimes /*
945b81b6b3SRodney W. Grimes  * Sizes of the system and user portions of the system page table.
955b81b6b3SRodney W. Grimes  */
965b81b6b3SRodney W. Grimes #define	SYSPTSIZE 	(2*NPTEPG)
975b81b6b3SRodney W. Grimes #define	USRPTSIZE 	(2*NPTEPG)
985b81b6b3SRodney W. Grimes 
995b81b6b3SRodney W. Grimes /*
100b6c78fe4SRodney W. Grimes  * Size of the Shared Memory Pages page table.
101b6c78fe4SRodney W. Grimes  */
10289ccb410SDavid Greenman #ifndef	SHMMAXPGS
103d42d25c4SRodney W. Grimes #define	SHMMAXPGS	512		/* XXX until we have more kmap space */
104b6c78fe4SRodney W. Grimes #endif
105b6c78fe4SRodney W. Grimes 
106b6c78fe4SRodney W. Grimes /*
1075b81b6b3SRodney W. Grimes  * Size of User Raw I/O map
1085b81b6b3SRodney W. Grimes  */
1097f8cb368SDavid Greenman #define	USRIOSIZE 	1024
1105b81b6b3SRodney W. Grimes 
1115b81b6b3SRodney W. Grimes /*
1125b81b6b3SRodney W. Grimes  * The size of the clock loop.
1135b81b6b3SRodney W. Grimes  */
1145b81b6b3SRodney W. Grimes #define	LOOPPAGES	(maxfree - firstfree)
1155b81b6b3SRodney W. Grimes 
1165b81b6b3SRodney W. Grimes /*
1175b81b6b3SRodney W. Grimes  * The time for a process to be blocked before being very swappable.
1185b81b6b3SRodney W. Grimes  * This is a number of seconds which the system takes as being a non-trivial
1195b81b6b3SRodney W. Grimes  * amount of real time.  You probably shouldn't change this;
1205b81b6b3SRodney W. Grimes  * it is used in subtle ways (fractions and multiples of it are, that is, like
1215b81b6b3SRodney W. Grimes  * half of a ``long time'', almost a long time, etc.)
1225b81b6b3SRodney W. Grimes  * It is related to human patience and other factors which don't really
1235b81b6b3SRodney W. Grimes  * change over time.
1245b81b6b3SRodney W. Grimes  */
1255b81b6b3SRodney W. Grimes #define	MAXSLP 		20
1265b81b6b3SRodney W. Grimes 
1275b81b6b3SRodney W. Grimes /*
1285b81b6b3SRodney W. Grimes  * A swapped in process is given a small amount of core without being bothered
1295b81b6b3SRodney W. Grimes  * by the page replacement algorithm.  Basically this says that if you are
1305b81b6b3SRodney W. Grimes  * swapped in you deserve some resources.  We protect the last SAFERSS
1315b81b6b3SRodney W. Grimes  * pages against paging and will just swap you out rather than paging you.
1325b81b6b3SRodney W. Grimes  * Note that each process has at least UPAGES+CLSIZE pages which are not
1335b81b6b3SRodney W. Grimes  * paged anyways (this is currently 8+2=10 pages or 5k bytes), so this
1345b81b6b3SRodney W. Grimes  * number just means a swapped in process is given around 25k bytes.
1355b81b6b3SRodney W. Grimes  * Just for fun: current memory prices are 4600$ a megabyte on VAX (4/22/81),
1365b81b6b3SRodney W. Grimes  * so we loan each swapped in process memory worth 100$, or just admit
1375b81b6b3SRodney W. Grimes  * that we don't consider it worthwhile and swap it out to disk which costs
1385b81b6b3SRodney W. Grimes  * $30/mb or about $0.75.
1395b81b6b3SRodney W. Grimes  * { wfj 6/16/89: Retail AT memory expansion $800/megabyte, loan of $17
1405b81b6b3SRodney W. Grimes  *   on disk costing $7/mb or $0.18 (in memory still 100:1 in cost!) }
1415b81b6b3SRodney W. Grimes  */
1425b81b6b3SRodney W. Grimes #define	SAFERSS		8		/* nominal ``small'' resident set size
1435b81b6b3SRodney W. Grimes 					   protected against replacement */
1445b81b6b3SRodney W. Grimes 
1455b81b6b3SRodney W. Grimes /*
1465b81b6b3SRodney W. Grimes  * DISKRPM is used to estimate the number of paging i/o operations
1475b81b6b3SRodney W. Grimes  * which one can expect from a single disk controller.
1485b81b6b3SRodney W. Grimes  */
1495b81b6b3SRodney W. Grimes #define	DISKRPM		60
1505b81b6b3SRodney W. Grimes 
1515b81b6b3SRodney W. Grimes /*
1525b81b6b3SRodney W. Grimes  * Klustering constants.  Klustering is the gathering
1535b81b6b3SRodney W. Grimes  * of pages together for pagein/pageout, while clustering
1545b81b6b3SRodney W. Grimes  * is the treatment of hardware page size as though it were
1555b81b6b3SRodney W. Grimes  * larger than it really is.
1565b81b6b3SRodney W. Grimes  *
1575b81b6b3SRodney W. Grimes  * KLMAX gives maximum cluster size in CLSIZE page (cluster-page)
1585b81b6b3SRodney W. Grimes  * units.  Note that KLMAX*CLSIZE must be <= DMMIN in dmap.h.
1595b81b6b3SRodney W. Grimes  */
1605b81b6b3SRodney W. Grimes 
1615b81b6b3SRodney W. Grimes #define	KLMAX	(4/CLSIZE)
1625b81b6b3SRodney W. Grimes #define	KLSEQL	(2/CLSIZE)		/* in klust if vadvise(VA_SEQL) */
1635b81b6b3SRodney W. Grimes #define	KLIN	(4/CLSIZE)		/* default data/stack in klust */
1645b81b6b3SRodney W. Grimes #define	KLTXT	(4/CLSIZE)		/* default text in klust */
1655b81b6b3SRodney W. Grimes #define	KLOUT	(4/CLSIZE)
1665b81b6b3SRodney W. Grimes 
1675b81b6b3SRodney W. Grimes /*
1685b81b6b3SRodney W. Grimes  * KLSDIST is the advance or retard of the fifo reclaim for sequential
1695b81b6b3SRodney W. Grimes  * processes data space.
1705b81b6b3SRodney W. Grimes  */
1715b81b6b3SRodney W. Grimes #define	KLSDIST	3		/* klusters advance/retard for seq. fifo */
1725b81b6b3SRodney W. Grimes 
1735b81b6b3SRodney W. Grimes /*
1745b81b6b3SRodney W. Grimes  * Paging thresholds (see vm_sched.c).
1755b81b6b3SRodney W. Grimes  * Strategy of 1/19/85:
1765b81b6b3SRodney W. Grimes  *	lotsfree is 512k bytes, but at most 1/4 of memory
1775b81b6b3SRodney W. Grimes  *	desfree is 200k bytes, but at most 1/8 of memory
1785b81b6b3SRodney W. Grimes  *	minfree is 64k bytes, but at most 1/2 of desfree
1795b81b6b3SRodney W. Grimes  */
1805b81b6b3SRodney W. Grimes #define	LOTSFREE	(512 * 1024)
1815b81b6b3SRodney W. Grimes #define	LOTSFREEFRACT	4
1825b81b6b3SRodney W. Grimes #define	DESFREE		(200 * 1024)
1835b81b6b3SRodney W. Grimes #define	DESFREEFRACT	8
1845b81b6b3SRodney W. Grimes #define	MINFREE		(64 * 1024)
1855b81b6b3SRodney W. Grimes #define	MINFREEFRACT	2
1865b81b6b3SRodney W. Grimes 
1875b81b6b3SRodney W. Grimes /*
1885b81b6b3SRodney W. Grimes  * There are two clock hands, initially separated by HANDSPREAD bytes
1895b81b6b3SRodney W. Grimes  * (but at most all of user memory).  The amount of time to reclaim
1905b81b6b3SRodney W. Grimes  * a page once the pageout process examines it increases with this
1915b81b6b3SRodney W. Grimes  * distance and decreases as the scan rate rises.
1925b81b6b3SRodney W. Grimes  */
1935b81b6b3SRodney W. Grimes #define	HANDSPREAD	(2 * 1024 * 1024)
1945b81b6b3SRodney W. Grimes 
1955b81b6b3SRodney W. Grimes /*
1965b81b6b3SRodney W. Grimes  * The number of times per second to recompute the desired paging rate
1975b81b6b3SRodney W. Grimes  * and poke the pagedaemon.
1985b81b6b3SRodney W. Grimes  */
1995b81b6b3SRodney W. Grimes #define	RATETOSCHEDPAGING	4
2005b81b6b3SRodney W. Grimes 
2015b81b6b3SRodney W. Grimes /*
2025b81b6b3SRodney W. Grimes  * Believed threshold (in megabytes) for which interleaved
2035b81b6b3SRodney W. Grimes  * swapping area is desirable.
2045b81b6b3SRodney W. Grimes  */
2055b81b6b3SRodney W. Grimes #define	LOTSOFMEM	2
2065b81b6b3SRodney W. Grimes 
2075b81b6b3SRodney W. Grimes #define	mapin(pte, v, pfnum, prot) \
2085b81b6b3SRodney W. Grimes 	{(*(int *)(pte) = ((pfnum)<<PGSHIFT) | (prot)) ; }
2095b81b6b3SRodney W. Grimes 
2105b81b6b3SRodney W. Grimes /*
2115b81b6b3SRodney W. Grimes  * Mach derived constants
2125b81b6b3SRodney W. Grimes  */
2135b81b6b3SRodney W. Grimes 
2145b81b6b3SRodney W. Grimes /* user/kernel map constants */
2157f8cb368SDavid Greenman #define	KERNBASE (0-(NKPDE+1)*(NBPG*NPTEPG))
2167f8cb368SDavid Greenman #define KERNSIZE (NKPDE*NBPG*NPTEPG)
2177f8cb368SDavid Greenman 
2185b81b6b3SRodney W. Grimes #define VM_MIN_ADDRESS		((vm_offset_t)0)
2197f8cb368SDavid Greenman #define VM_MAXUSER_ADDRESS	((vm_offset_t)KERNBASE - (NBPG*(NPTEPG+UPAGES)))
2207f8cb368SDavid Greenman #define USRSTACK VM_MAXUSER_ADDRESS
2217f8cb368SDavid Greenman #define UPT_MIN_ADDRESS		((vm_offset_t)KERNBASE - (NBPG*NPTEPG))
2227f8cb368SDavid Greenman #define UPT_MAX_ADDRESS		((vm_offset_t)KERNBASE - (NBPG*(NKPDE+2)))
2235b81b6b3SRodney W. Grimes #define VM_MAX_ADDRESS		UPT_MAX_ADDRESS
2247f8cb368SDavid Greenman #define VM_MIN_KERNEL_ADDRESS	((vm_offset_t)KERNBASE - (NBPG*(NKPDE+2)))
2255b81b6b3SRodney W. Grimes #define UPDT			VM_MIN_KERNEL_ADDRESS
2267f8cb368SDavid Greenman #define KPT_MIN_ADDRESS		((vm_offset_t)(KERNBASE) - (NBPG*(NKPDE+1)))
2277f8cb368SDavid Greenman #define KPT_MAX_ADDRESS		((vm_offset_t)(KERNBASE) - NBPG)
2287f8cb368SDavid Greenman #define VM_MAX_KERNEL_ADDRESS	((vm_offset_t)ALT_MIN_ADDRESS - NBPG)
2297f8cb368SDavid Greenman #define ALT_MIN_ADDRESS		((vm_offset_t)((APTDPTDI) << 22))
2307f8cb368SDavid Greenman #define HIGHPAGES UPAGES
2317f8cb368SDavid Greenman 
2325b81b6b3SRodney W. Grimes 
2335b81b6b3SRodney W. Grimes /* virtual sizes (bytes) for various kernel submaps */
2345b81b6b3SRodney W. Grimes #define VM_MBUF_SIZE		(NMBCLUSTERS*MCLBYTES)
235d42d25c4SRodney W. Grimes #define VM_KMEM_SIZE		(16 * 1024 * 1024)
2365b81b6b3SRodney W. Grimes #define VM_PHYS_SIZE		(USRIOSIZE*CLBYTES)
2375b81b6b3SRodney W. Grimes 
2385b81b6b3SRodney W. Grimes /* pcb base */
2395b81b6b3SRodney W. Grimes #define	pcbb(p)		((u_int)(p)->p_addr)
2405b81b6b3SRodney W. Grimes 
2415b81b6b3SRodney W. Grimes /*
2425b81b6b3SRodney W. Grimes  * Flush MMU TLB
2435b81b6b3SRodney W. Grimes  */
2445b81b6b3SRodney W. Grimes 
2455b81b6b3SRodney W. Grimes #ifndef I386_CR3PAT
2465b81b6b3SRodney W. Grimes #define	I386_CR3PAT	0x0
2475b81b6b3SRodney W. Grimes #endif
2485b81b6b3SRodney W. Grimes 
2495b81b6b3SRodney W. Grimes #ifdef notyet
2505b81b6b3SRodney W. Grimes #define _cr3() ({u_long rtn; \
2515b81b6b3SRodney W. Grimes 	asm (" movl %%cr3,%%eax; movl %%eax,%0 " \
2525b81b6b3SRodney W. Grimes 		: "=g" (rtn) \
2535b81b6b3SRodney W. Grimes 		: \
2545b81b6b3SRodney W. Grimes 		: "ax"); \
2555b81b6b3SRodney W. Grimes 	rtn; \
2565b81b6b3SRodney W. Grimes })
2575b81b6b3SRodney W. Grimes 
2585b81b6b3SRodney W. Grimes #define load_cr3(s) ({ u_long val; \
2595b81b6b3SRodney W. Grimes 	val = (s) | I386_CR3PAT; \
2605b81b6b3SRodney W. Grimes 	asm ("movl %0,%%eax; movl %%eax,%%cr3" \
2615b81b6b3SRodney W. Grimes 		:  \
2625b81b6b3SRodney W. Grimes 		: "g" (val) \
2635b81b6b3SRodney W. Grimes 		: "ax"); \
2645b81b6b3SRodney W. Grimes })
2655b81b6b3SRodney W. Grimes 
2665b81b6b3SRodney W. Grimes #define tlbflush() ({ u_long val; \
2675b81b6b3SRodney W. Grimes 	val = u.u_pcb.pcb_ptd | I386_CR3PAT; \
2685b81b6b3SRodney W. Grimes 	asm ("movl %0,%%eax; movl %%eax,%%cr3" \
2695b81b6b3SRodney W. Grimes 		:  \
2705b81b6b3SRodney W. Grimes 		: "g" (val) \
2715b81b6b3SRodney W. Grimes 		: "ax"); \
2725b81b6b3SRodney W. Grimes })
2735b81b6b3SRodney W. Grimes #endif
2746e393973SGarrett Wollman #endif /* _MACHINE_VMPARAM_H_ */
275