xref: /original-bsd/sys/vax/include/vmparam.h (revision 6219b5e8)
1 /*	vmparam.h	6.5	85/03/07	*/
2 
3 /*
4  * Machine dependent constants for VAX
5  */
6 /*
7  * USRTEXT is the start of the user text/data space, while USRSTACK
8  * is the top (end) of the user stack.  LOWPAGES and HIGHPAGES are
9  * the number of pages from the beginning of the P0 region to the
10  * beginning of the text and from the beginning of the P1 region to the
11  * beginning of the stack respectively.
12  */
13 #define	USRTEXT		0
14 #define	USRSTACK	(0x80000000-UPAGES*NBPG) /* Start of user stack */
15 #define	BTOPUSRSTACK	(0x400000 - UPAGES)	 /* btop(USRSTACK) */
16 /* number of ptes per page */
17 #define	P1PAGES		0x200000	/* number of pages in P1 region */
18 #define	LOWPAGES	0
19 #define	HIGHPAGES	UPAGES
20 
21 /*
22  * Virtual memory related constants, all in clicks
23  */
24 #define	MAXTSIZ		(6*CLSIZE*1024)		/* max text size */
25 #ifndef DFLDSIZ
26 #define	DFLDSIZ		(6*1024*1024/NBPG)	/* initial data size limit */
27 #endif
28 #ifndef MAXDSIZ
29 #define	MAXDSIZ		(16*1024*1024/NBPG)	/* max data size */
30 #endif
31 #ifndef	DFLSSIZ
32 #define	DFLSSIZ		(512*1024/NBPG)		/* initial stack size limit */
33 #endif
34 #ifndef	MAXSSIZ
35 #define	MAXSSIZ		MAXDSIZ			/* max stack size */
36 #endif
37 
38 /*
39  * Default sizes of swap allocation chunks (see dmap.h).
40  * The actual values may be changed in vminit() based on MAXDSIZ.
41  * With MAXDSIZ of 16Mb and NDMAP of 38, dmmax will be 1024.
42  */
43 #define	DMMIN	32			/* smallest swap allocation */
44 #define	DMMAX	4096			/* largest potential swap allocation */
45 #define	DMTEXT	1024			/* swap allocation for text */
46 
47 /*
48  * Sizes of the system and user portions of the system page table.
49  */
50 /* SYSPTSIZE IS SILLY; IT SHOULD BE COMPUTED AT BOOT TIME */
51 #define	SYSPTSIZE	((20+MAXUSERS)*NPTEPG)
52 #define	USRPTSIZE 	(32*NPTEPG)
53 
54 /*
55  * The size of the clock loop.
56  */
57 #define	LOOPPAGES	(maxfree - firstfree)
58 
59 /*
60  * The time for a process to be blocked before being very swappable.
61  * This is a number of seconds which the system takes as being a non-trivial
62  * amount of real time.  You probably shouldn't change this;
63  * it is used in subtle ways (fractions and multiples of it are, that is, like
64  * half of a ``long time'', almost a long time, etc.)
65  * It is related to human patience and other factors which don't really
66  * change over time.
67  */
68 #define	MAXSLP 		20
69 
70 /*
71  * A swapped in process is given a small amount of core without being bothered
72  * by the page replacement algorithm.  Basically this says that if you are
73  * swapped in you deserve some resources.  We protect the last SAFERSS
74  * pages against paging and will just swap you out rather than paging you.
75  * Note that each process has at least UPAGES+CLSIZE pages which are not
76  * paged anyways (this is currently 8+2=10 pages or 5k bytes), so this
77  * number just means a swapped in process is given around 25k bytes.
78  * Just for fun: current memory prices are 4600$ a megabyte on VAX (4/22/81),
79  * so we loan each swapped in process memory worth 100$, or just admit
80  * that we don't consider it worthwhile and swap it out to disk which costs
81  * $30/mb or about $0.75.
82  */
83 #define	SAFERSS		32		/* nominal ``small'' resident set size
84 					   protected against replacement */
85 
86 /*
87  * DISKRPM is used to estimate the number of paging i/o operations
88  * which one can expect from a single disk controller.
89  */
90 #define	DISKRPM		60
91 
92 /*
93  * Klustering constants.  Klustering is the gathering
94  * of pages together for pagein/pageout, while clustering
95  * is the treatment of hardware page size as though it were
96  * larger than it really is.
97  *
98  * KLMAX gives maximum cluster size in CLSIZE page (cluster-page)
99  * units.  Note that KLMAX*CLSIZE must be <= DMMIN in dmap.h.
100  */
101 
102 #define	KLMAX	(32/CLSIZE)
103 #define	KLSEQL	(16/CLSIZE)		/* in klust if vadvise(VA_SEQL) */
104 #define	KLIN	(8/CLSIZE)		/* default data/stack in klust */
105 #define	KLTXT	(4/CLSIZE)		/* default text in klust */
106 #define	KLOUT	(32/CLSIZE)
107 
108 /*
109  * KLSDIST is the advance or retard of the fifo reclaim for sequential
110  * processes data space.
111  */
112 #define	KLSDIST	3		/* klusters advance/retard for seq. fifo */
113 
114 /*
115  * Paging thresholds (see vm_sched.c).
116  * Strategy of 1/19/85:
117  *	lotsfree is 512k bytes, but at most 1/4 of memory
118  *	desfree is 200k bytes, but at most 1/8 of memory
119  *	minfree is 64k bytes, but at most 1/2 of desfree
120  */
121 #define	LOTSFREE	(512 * 1024)
122 #define	LOTSFREEFRACT	4
123 #define	DESFREE		(200 * 1024)
124 #define	DESFREEFRACT	8
125 #define	MINFREE		(64 * 1024)
126 #define	MINFREEFRACT	2
127 
128 /*
129  * There are two clock hands, initially separated by HANDSPREAD bytes
130  * (but at most all of user memory).  The amount of time to reclaim
131  * a page once the pageout process examines it increases with this
132  * distance and decreases as the scan rate rises.
133  */
134 #define	HANDSPREAD	(2 * 1024 * 1024)
135 
136 /*
137  * The number of times per second to recompute the desired paging rate
138  * and poke the pagedaemon.
139  */
140 #define	RATETOSCHEDPAGING	4
141 
142 /*
143  * Believed threshold (in megabytes) for which interleaved
144  * swapping area is desirable.
145  */
146 #define	LOTSOFMEM	2
147 
148 /*
149  * BEWARE THIS DEFINITION WORKS ONLY WITH COUNT OF 1
150  */
151 #define	mapin(pte, v, pfnum, count, prot) \
152 	(*(int *)(pte) = (pfnum) | (prot), mtpr(TBIS, ptob(v)))
153