1 /* $OpenBSD: uvmexp.h,v 1.9 2021/03/04 09:00:03 mpi 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_MALLOC_CONF 12 /* config for userland malloc */ 21 #define VM_MAXID 13 /* number of valid vm ids */ 22 23 #define CTL_VM_NAMES { \ 24 { 0, 0 }, \ 25 { "vmmeter", CTLTYPE_STRUCT }, \ 26 { "loadavg", CTLTYPE_STRUCT }, \ 27 { "psstrings", CTLTYPE_STRUCT }, \ 28 { "uvmexp", CTLTYPE_STRUCT }, \ 29 { "swapencrypt", CTLTYPE_NODE }, \ 30 { "nkmempages", CTLTYPE_INT }, \ 31 { "anonmin", CTLTYPE_INT }, \ 32 { "vtextmin", CTLTYPE_INT }, \ 33 { "vnodemin", CTLTYPE_INT }, \ 34 { "maxslp", CTLTYPE_INT }, \ 35 { "uspace", CTLTYPE_INT }, \ 36 { "malloc_conf", CTLTYPE_STRING }, \ 37 } 38 39 /* 40 * uvmexp: global data structures that are exported to parts of the kernel 41 * other than the vm system. 42 * 43 * Locks used to protect struct members in this file: 44 * a atomic operations 45 * I immutable after creation 46 * K kernel lock 47 * F uvm_lock_fpageq 48 */ 49 struct uvmexp { 50 /* vm_page constants */ 51 int pagesize; /* size of a page (PAGE_SIZE): must be power of 2 */ 52 int pagemask; /* page mask */ 53 int pageshift; /* page shift */ 54 55 /* vm_page counters */ 56 int npages; /* [I] number of pages we manage */ 57 int free; /* [F] number of free pages */ 58 int active; /* number of active pages */ 59 int inactive; /* number of pages that we free'd but may want back */ 60 int paging; /* number of pages in the process of being paged out */ 61 int wired; /* number of wired pages */ 62 63 int zeropages; /* [F] number of zero'd pages */ 64 int reserve_pagedaemon; /* [I] # of pages reserved for pagedaemon */ 65 int reserve_kernel; /* [I] # of pages reserved for kernel */ 66 int unused01; /* formerly anonpages */ 67 int vnodepages; /* XXX # of pages used by vnode page cache */ 68 int vtextpages; /* XXX # of pages used by vtext vnodes */ 69 70 /* pageout params */ 71 int freemin; /* min number of free pages */ 72 int freetarg; /* target number of free pages */ 73 int inactarg; /* target number of inactive pages */ 74 int wiredmax; /* max number of wired pages */ 75 int anonmin; /* min threshold for anon pages */ 76 int vtextmin; /* min threshold for vtext pages */ 77 int vnodemin; /* min threshold for vnode pages */ 78 int anonminpct; /* min percent anon pages */ 79 int vtextminpct;/* min percent vtext pages */ 80 int vnodeminpct;/* min percent vnode pages */ 81 82 /* swap */ 83 int nswapdev; /* number of configured swap devices in system */ 84 int swpages; /* [K] number of PAGE_SIZE'ed swap pages */ 85 int swpginuse; /* number of swap pages in use */ 86 int swpgonly; /* [a] number of swap pages in use, not also in RAM */ 87 int nswget; /* number of swap pages moved from disk to RAM */ 88 int nanon; /* XXX number total of anon's in system */ 89 int unused05; /* formerly nanonneeded */ 90 int unused06; /* formerly nfreeanon */ 91 92 /* stat counters */ 93 int faults; /* page fault count */ 94 int traps; /* trap count */ 95 int intrs; /* interrupt count */ 96 int swtch; /* context switch count */ 97 int softs; /* software interrupt count */ 98 int syscalls; /* system calls */ 99 int pageins; /* pagein operation count */ 100 /* pageouts are in pdpageouts below */ 101 int unused07; /* formerly obsolete_swapins */ 102 int unused08; /* formerly obsolete_swapouts */ 103 int pgswapin; /* pages swapped in */ 104 int pgswapout; /* pages swapped out */ 105 int forks; /* forks */ 106 int forks_ppwait; /* forks where parent waits */ 107 int forks_sharevm; /* forks where vmspace is shared */ 108 int pga_zerohit; /* pagealloc where zero wanted and zero 109 was available */ 110 int pga_zeromiss; /* pagealloc where zero wanted and zero 111 not available */ 112 int unused09; /* formerly zeroaborts */ 113 114 /* fault subcounters */ 115 int fltnoram; /* number of times fault was out of ram */ 116 int fltnoanon; /* number of times fault was out of anons */ 117 int fltnoamap; /* number of times fault was out of amap chunks */ 118 int fltpgwait; /* number of times fault had to wait on a page */ 119 int fltpgrele; /* number of times fault found a released page */ 120 int fltrelck; /* number of times fault relock called */ 121 int fltrelckok; /* number of times fault relock is a success */ 122 int fltanget; /* number of times fault gets anon page */ 123 int fltanretry; /* number of times fault retrys an anon get */ 124 int fltamcopy; /* number of times fault clears "needs copy" */ 125 int fltnamap; /* number of times fault maps a neighbor anon page */ 126 int fltnomap; /* number of times fault maps a neighbor obj page */ 127 int fltlget; /* number of times fault does a locked pgo_get */ 128 int fltget; /* number of times fault does an unlocked get */ 129 int flt_anon; /* number of times fault anon (case 1a) */ 130 int flt_acow; /* number of times fault anon cow (case 1b) */ 131 int flt_obj; /* number of times fault is on object page (2a) */ 132 int flt_prcopy; /* number of times fault promotes with copy (2b) */ 133 int flt_przero; /* number of times fault promotes with zerofill (2b) */ 134 135 /* daemon counters */ 136 int pdwoke; /* number of times daemon woke up */ 137 int pdrevs; /* number of times daemon rev'd clock hand */ 138 int pdswout; /* number of times daemon called for swapout */ 139 int pdfreed; /* number of pages daemon freed since boot */ 140 int pdscans; /* number of pages daemon scanned since boot */ 141 int pdanscan; /* number of anonymous pages scanned by daemon */ 142 int pdobscan; /* number of object pages scanned by daemon */ 143 int pdreact; /* number of pages daemon reactivated since boot */ 144 int pdbusy; /* number of times daemon found a busy page */ 145 int pdpageouts; /* number of times daemon started a pageout */ 146 int pdpending; /* number of times daemon got a pending pagout */ 147 int pddeact; /* number of pages daemon deactivates */ 148 int unused11; /* formerly pdreanon */ 149 int unused12; /* formerly pdrevnode */ 150 int unused13; /* formerly pdrevtext */ 151 152 int fpswtch; /* FPU context switches */ 153 int kmapent; /* number of kernel map entries */ 154 }; 155 156 struct _ps_strings { 157 void *val; 158 }; 159 160 #ifdef _KERNEL 161 162 /* 163 * Per-cpu UVM counters. 164 */ 165 extern struct cpumem *uvmexp_counters; 166 167 enum uvm_exp_counters { 168 /* stat counters */ 169 faults, /* page fault count */ 170 pageins, /* pagein operation count */ 171 172 /* fault subcounters */ 173 flt_noram, /* number of times fault was out of ram */ 174 flt_noanon, /* number of times fault was out of anons */ 175 flt_noamap, /* number of times fault was out of amap chunks */ 176 flt_pgwait, /* number of times fault had to wait on a page */ 177 flt_pgrele, /* number of times fault found a released page */ 178 flt_relck, /* number of times fault relock called */ 179 flt_relckok, /* number of times fault relock is a success */ 180 flt_anget, /* number of times fault gets anon page */ 181 flt_anretry, /* number of times fault retrys an anon get */ 182 flt_amcopy, /* number of times fault clears "needs copy" */ 183 flt_namap, /* number of times fault maps a neighbor anon page */ 184 flt_nomap, /* number of times fault maps a neighbor obj page */ 185 flt_lget, /* number of times fault does a locked pgo_get */ 186 flt_get, /* number of times fault does an unlocked get */ 187 flt_anon, /* number of times fault anon (case 1a) */ 188 flt_acow, /* number of times fault anon cow (case 1b) */ 189 flt_obj, /* number of times fault is on object page (2a) */ 190 flt_prcopy, /* number of times fault promotes with copy (2b) */ 191 flt_przero, /* number of times fault promotes with zerofill (2b) */ 192 193 exp_ncounters 194 }; 195 196 #endif /* _KERNEL */ 197 #endif /*_UVM_UVMEXP_ */ 198