xref: /openbsd-src/sys/uvm/uvmexp.h (revision f2da64fbbbf1b03f09f390ab01267c93dfd77c4c)
1 /*	$OpenBSD: uvmexp.h,v 1.2 2016/05/08 11:52:32 stefan Exp $	*/
2 
3 #ifndef	_UVM_UVMEXP_
4 #define	_UVM_UVMEXP_
5 
6 /*
7  * CTL_VM identifiers
8  */
9 #define	VM_METER	1		/* struct vmmeter */
10 #define	VM_LOADAVG	2		/* struct loadavg */
11 #define	VM_PSSTRINGS	3		/* PSSTRINGS */
12 #define VM_UVMEXP	4		/* struct uvmexp */
13 #define VM_SWAPENCRYPT	5		/* int */
14 #define VM_NKMEMPAGES	6		/* int - # kmem_map pages */
15 #define	VM_ANONMIN	7
16 #define	VM_VTEXTMIN	8
17 #define	VM_VNODEMIN	9
18 #define	VM_MAXSLP	10
19 #define	VM_USPACE	11
20 #define	VM_MAXID	12		/* number of valid vm ids */
21 
22 #define	CTL_VM_NAMES { \
23 	{ 0, 0 }, \
24 	{ "vmmeter", CTLTYPE_STRUCT }, \
25 	{ "loadavg", CTLTYPE_STRUCT }, \
26 	{ "psstrings", CTLTYPE_STRUCT }, \
27 	{ "uvmexp", CTLTYPE_STRUCT }, \
28 	{ "swapencrypt", CTLTYPE_NODE }, \
29 	{ "nkmempages", CTLTYPE_INT }, \
30 	{ "anonmin", CTLTYPE_INT }, \
31 	{ "vtextmin", CTLTYPE_INT }, \
32 	{ "vnodemin", CTLTYPE_INT }, \
33 	{ "maxslp", CTLTYPE_INT }, \
34 	{ "uspace", CTLTYPE_INT }, \
35 }
36 
37 /*
38  * uvmexp: global data structures that are exported to parts of the kernel
39  * other than the vm system.
40  */
41 struct uvmexp {
42 	/* vm_page constants */
43 	int pagesize;   /* size of a page (PAGE_SIZE): must be power of 2 */
44 	int pagemask;   /* page mask */
45 	int pageshift;  /* page shift */
46 
47 	/* vm_page counters */
48 	int npages;     /* number of pages we manage */
49 	int free;       /* number of free pages */
50 	int active;     /* number of active pages */
51 	int inactive;   /* number of pages that we free'd but may want back */
52 	int paging;	/* number of pages in the process of being paged out */
53 	int wired;      /* number of wired pages */
54 
55 	int zeropages;		/* number of zero'd pages */
56 	int reserve_pagedaemon; /* number of pages reserved for pagedaemon */
57 	int reserve_kernel;	/* number of pages reserved for kernel */
58 	int anonpages;		/* number of pages used by anon pagers */
59 	int vnodepages;		/* number of pages used by vnode page cache */
60 	int vtextpages;		/* number of pages used by vtext vnodes */
61 
62 	/* pageout params */
63 	int freemin;    /* min number of free pages */
64 	int freetarg;   /* target number of free pages */
65 	int inactarg;   /* target number of inactive pages */
66 	int wiredmax;   /* max number of wired pages */
67 	int anonmin;	/* min threshold for anon pages */
68 	int vtextmin;	/* min threshold for vtext pages */
69 	int vnodemin;	/* min threshold for vnode pages */
70 	int anonminpct;	/* min percent anon pages */
71 	int vtextminpct;/* min percent vtext pages */
72 	int vnodeminpct;/* min percent vnode pages */
73 
74 	/* swap */
75 	int nswapdev;	/* number of configured swap devices in system */
76 	int swpages;	/* number of PAGE_SIZE'ed swap pages */
77 	int swpginuse;	/* number of swap pages in use */
78 	int swpgonly;	/* number of swap pages in use, not also in RAM */
79 	int nswget;	/* number of times fault calls uvm_swap_get() */
80 	int nanon;	/* number total of anon's in system */
81 	int nanonneeded;/* number of anons currently needed */
82 	int nfreeanon;	/* number of free anon's */
83 
84 	/* stat counters */
85 	int faults;		/* page fault count */
86 	int traps;		/* trap count */
87 	int intrs;		/* interrupt count */
88 	int swtch;		/* context switch count */
89 	int softs;		/* software interrupt count */
90 	int syscalls;		/* system calls */
91 	int pageins;		/* pagein operation count */
92 				/* pageouts are in pdpageouts below */
93 	int obsolete_swapins;	/* swapins */
94 	int obsolete_swapouts;	/* swapouts */
95 	int pgswapin;		/* pages swapped in */
96 	int pgswapout;		/* pages swapped out */
97 	int forks;  		/* forks */
98 	int forks_ppwait;	/* forks where parent waits */
99 	int forks_sharevm;	/* forks where vmspace is shared */
100 	int pga_zerohit;	/* pagealloc where zero wanted and zero
101 				   was available */
102 	int pga_zeromiss;	/* pagealloc where zero wanted and zero
103 				   not available */
104 	int zeroaborts;		/* number of times page zeroing was
105 				   aborted */
106 
107 	/* fault subcounters */
108 	int fltnoram;	/* number of times fault was out of ram */
109 	int fltnoanon;	/* number of times fault was out of anons */
110 	int fltnoamap;	/* number of times fault was out of amap chunks */
111 	int fltpgwait;	/* number of times fault had to wait on a page */
112 	int fltpgrele;	/* number of times fault found a released page */
113 	int fltrelck;	/* number of times fault relock called */
114 	int fltrelckok;	/* number of times fault relock is a success */
115 	int fltanget;	/* number of times fault gets anon page */
116 	int fltanretry;	/* number of times fault retrys an anon get */
117 	int fltamcopy;	/* number of times fault clears "needs copy" */
118 	int fltnamap;	/* number of times fault maps a neighbor anon page */
119 	int fltnomap;	/* number of times fault maps a neighbor obj page */
120 	int fltlget;	/* number of times fault does a locked pgo_get */
121 	int fltget;	/* number of times fault does an unlocked get */
122 	int flt_anon;	/* number of times fault anon (case 1a) */
123 	int flt_acow;	/* number of times fault anon cow (case 1b) */
124 	int flt_obj;	/* number of times fault is on object page (2a) */
125 	int flt_prcopy;	/* number of times fault promotes with copy (2b) */
126 	int flt_przero;	/* number of times fault promotes with zerofill (2b) */
127 
128 	/* daemon counters */
129 	int pdwoke;	/* number of times daemon woke up */
130 	int pdrevs;	/* number of times daemon rev'd clock hand */
131 	int pdswout;	/* number of times daemon called for swapout */
132 	int pdfreed;	/* number of pages daemon freed since boot */
133 	int pdscans;	/* number of pages daemon scanned since boot */
134 	int pdanscan;	/* number of anonymous pages scanned by daemon */
135 	int pdobscan;	/* number of object pages scanned by daemon */
136 	int pdreact;	/* number of pages daemon reactivated since boot */
137 	int pdbusy;	/* number of times daemon found a busy page */
138 	int pdpageouts;	/* number of times daemon started a pageout */
139 	int pdpending;	/* number of times daemon got a pending pagout */
140 	int pddeact;	/* number of pages daemon deactivates */
141 	int pdreanon;	/* anon pages reactivated due to min threshold */
142 	int pdrevnode;	/* vnode pages reactivated due to min threshold */
143 	int pdrevtext;	/* vtext pages reactivated due to min threshold */
144 
145 	int fpswtch;	/* FPU context switches */
146 	int kmapent;	/* number of kernel map entries */
147 };
148 
149 struct _ps_strings {
150 	void	*val;
151 };
152 
153 #endif /*_UVM_UVMEXP_ */
154