201 lines
7.7 KiB
C
201 lines
7.7 KiB
C
/* $OpenBSD: uvmexp.h,v 1.15 2024/05/01 12:54:27 mpi Exp $ */
|
|
|
|
#ifndef _UVM_UVMEXP_
|
|
#define _UVM_UVMEXP_
|
|
|
|
/*
|
|
* CTL_VM identifiers
|
|
*/
|
|
#define VM_METER 1 /* struct vmmeter */
|
|
#define VM_LOADAVG 2 /* struct loadavg */
|
|
#define VM_PSSTRINGS 3 /* PSSTRINGS */
|
|
#define VM_UVMEXP 4 /* struct uvmexp */
|
|
#define VM_SWAPENCRYPT 5 /* int */
|
|
#define VM_NKMEMPAGES 6 /* int - # kmem_map pages */
|
|
#define VM_ANONMIN 7
|
|
#define VM_VTEXTMIN 8
|
|
#define VM_VNODEMIN 9
|
|
#define VM_MAXSLP 10
|
|
#define VM_USPACE 11
|
|
#define VM_MALLOC_CONF 12 /* config for userland malloc */
|
|
#define VM_MAXID 13 /* number of valid vm ids */
|
|
|
|
#define CTL_VM_NAMES { \
|
|
{ 0, 0 }, \
|
|
{ "vmmeter", CTLTYPE_STRUCT }, \
|
|
{ "loadavg", CTLTYPE_STRUCT }, \
|
|
{ "psstrings", CTLTYPE_STRUCT }, \
|
|
{ "uvmexp", CTLTYPE_STRUCT }, \
|
|
{ "swapencrypt", CTLTYPE_NODE }, \
|
|
{ "nkmempages", CTLTYPE_INT }, \
|
|
{ "anonmin", CTLTYPE_INT }, \
|
|
{ "vtextmin", CTLTYPE_INT }, \
|
|
{ "vnodemin", CTLTYPE_INT }, \
|
|
{ "maxslp", CTLTYPE_INT }, \
|
|
{ "uspace", CTLTYPE_INT }, \
|
|
{ "malloc_conf", CTLTYPE_STRING }, \
|
|
}
|
|
|
|
/*
|
|
* uvmexp: global data structures that are exported to parts of the kernel
|
|
* other than the vm system.
|
|
*
|
|
* Locks used to protect struct members in this file:
|
|
* a atomic operations
|
|
* I immutable after creation
|
|
* K kernel lock
|
|
* F uvm_lock_fpageq
|
|
* L uvm_lock_pageq
|
|
* S uvm_swap_data_lock
|
|
* p copy of per-CPU counters, used only by userland.
|
|
*/
|
|
struct uvmexp {
|
|
/* vm_page constants */
|
|
int pagesize; /* size of a page (PAGE_SIZE): must be power of 2 */
|
|
int pagemask; /* page mask */
|
|
int pageshift; /* page shift */
|
|
|
|
/* vm_page counters */
|
|
int npages; /* [I] number of pages we manage */
|
|
int free; /* [F] number of free pages */
|
|
int active; /* [L] # of active pages */
|
|
int inactive; /* [L] # of pages that we free'd but may want back */
|
|
int paging; /* number of pages in the process of being paged out */
|
|
int wired; /* number of wired pages */
|
|
|
|
int zeropages; /* [F] number of zero'd pages */
|
|
int reserve_pagedaemon; /* [I] # of pages reserved for pagedaemon */
|
|
int reserve_kernel; /* [I] # of pages reserved for kernel */
|
|
int percpucaches; /* [a] # of pages in per-CPU caches */
|
|
int vnodepages; /* XXX # of pages used by vnode page cache */
|
|
int vtextpages; /* XXX # of pages used by vtext vnodes */
|
|
|
|
/* pageout params */
|
|
int freemin; /* [I] min number of free pages */
|
|
int freetarg; /* [I] target number of free pages */
|
|
int inactarg; /* target number of inactive pages */
|
|
int wiredmax; /* [I] max number of wired pages */
|
|
int anonmin; /* min threshold for anon pages */
|
|
int vtextmin; /* min threshold for vtext pages */
|
|
int vnodemin; /* min threshold for vnode pages */
|
|
int anonminpct; /* min percent anon pages */
|
|
int vtextminpct;/* min percent vtext pages */
|
|
int vnodeminpct;/* min percent vnode pages */
|
|
|
|
/* swap */
|
|
int nswapdev; /* [S] number of configured swap devices in system */
|
|
int swpages; /* [S] number of PAGE_SIZE'ed swap pages */
|
|
int swpginuse; /* [S] number of swap pages in use */
|
|
int swpgonly; /* [a] number of swap pages in use, not also in RAM */
|
|
int nswget; /* [a] number of swap pages moved from disk to RAM */
|
|
int nanon; /* XXX number total of anon's in system */
|
|
int unused05; /* formerly nanonneeded */
|
|
int unused06; /* formerly nfreeanon */
|
|
|
|
/* stat counters */
|
|
int faults; /* [p] page fault count */
|
|
int traps; /* trap count */
|
|
int intrs; /* interrupt count */
|
|
int swtch; /* context switch count */
|
|
int softs; /* software interrupt count */
|
|
int syscalls; /* system calls */
|
|
int pageins; /* [p] pagein operation count */
|
|
/* pageouts are in pdpageouts below */
|
|
int pcphit; /* [a] # of pagealloc from per-CPU cache */
|
|
int pcpmiss; /* [a] # of times a per-CPU cache was empty */
|
|
int pgswapin; /* pages swapped in */
|
|
int pgswapout; /* pages swapped out */
|
|
int forks; /* forks */
|
|
int forks_ppwait; /* forks where parent waits */
|
|
int forks_sharevm; /* forks where vmspace is shared */
|
|
int pga_zerohit; /* pagealloc where zero wanted and zero
|
|
was available */
|
|
int pga_zeromiss; /* pagealloc where zero wanted and zero
|
|
not available */
|
|
int unused09; /* formerly zeroaborts */
|
|
|
|
/* fault subcounters */
|
|
int fltnoram; /* [p] # of times fault was out of ram */
|
|
int fltnoanon; /* [p] # of times fault was out of anons */
|
|
int fltnoamap; /* [p] # of times fault was out of amap chunks */
|
|
int fltpgwait; /* [p] # of times fault had to wait on a page */
|
|
int fltpgrele; /* [p] # of times fault found a released page */
|
|
int fltrelck; /* [p] # of times fault relock called */
|
|
int fltrelckok; /* [p] # of times fault relock is a success */
|
|
int fltanget; /* [p] # of times fault gets anon page */
|
|
int fltanretry; /* [p] # of times fault retrys an anon get */
|
|
int fltamcopy; /* [p] # of times fault clears "needs copy" */
|
|
int fltnamap; /* [p] # of times fault maps a neighbor anon page */
|
|
int fltnomap; /* [p] # of times fault maps a neighbor obj page */
|
|
int fltlget; /* [p] # of times fault does a locked pgo_get */
|
|
int fltget; /* [p] # of times fault does an unlocked get */
|
|
int flt_anon; /* [p] # of times fault anon (case 1a) */
|
|
int flt_acow; /* [p] # of times fault anon cow (case 1b) */
|
|
int flt_obj; /* [p] # of times fault is on object page (2a) */
|
|
int flt_prcopy; /* [p] # of times fault promotes with copy (2b) */
|
|
int flt_przero; /* [p] # of times fault promotes with zerofill (2b) */
|
|
|
|
/* daemon counters */
|
|
int pdwoke; /* [F] # of times daemon woke up */
|
|
int pdrevs; /* number of times daemon rev'd clock hand */
|
|
int pdswout; /* number of times daemon called for swapout */
|
|
int pdfreed; /* number of pages daemon freed since boot */
|
|
int pdscans; /* number of pages daemon scanned since boot */
|
|
int pdanscan; /* number of anonymous pages scanned by daemon */
|
|
int pdobscan; /* number of object pages scanned by daemon */
|
|
int pdreact; /* number of pages daemon reactivated since boot */
|
|
int pdbusy; /* number of times daemon found a busy page */
|
|
int pdpageouts; /* number of times daemon started a pageout */
|
|
int pdpending; /* number of times daemon got a pending pagout */
|
|
int pddeact; /* number of pages daemon deactivates */
|
|
int unused11; /* formerly pdreanon */
|
|
int unused12; /* formerly pdrevnode */
|
|
int unused13; /* formerly pdrevtext */
|
|
|
|
int fpswtch; /* FPU context switches */
|
|
int kmapent; /* number of kernel map entries */
|
|
};
|
|
|
|
struct _ps_strings {
|
|
void *val;
|
|
};
|
|
|
|
#ifdef _KERNEL
|
|
|
|
/*
|
|
* Per-cpu UVM counters.
|
|
*/
|
|
extern struct cpumem *uvmexp_counters;
|
|
|
|
enum uvm_exp_counters {
|
|
/* stat counters */
|
|
faults, /* page fault count */
|
|
pageins, /* pagein operation count */
|
|
|
|
/* fault subcounters */
|
|
flt_noram, /* number of times fault was out of ram */
|
|
flt_noanon, /* number of times fault was out of anons */
|
|
flt_noamap, /* number of times fault was out of amap chunks */
|
|
flt_pgwait, /* number of times fault had to wait on a page */
|
|
flt_pgrele, /* number of times fault found a released page */
|
|
flt_relck, /* number of times fault relock called */
|
|
flt_relckok, /* number of times fault relock is a success */
|
|
flt_anget, /* number of times fault gets anon page */
|
|
flt_anretry, /* number of times fault retrys an anon get */
|
|
flt_amcopy, /* number of times fault clears "needs copy" */
|
|
flt_namap, /* number of times fault maps a neighbor anon page */
|
|
flt_nomap, /* number of times fault maps a neighbor obj page */
|
|
flt_lget, /* number of times fault does a locked pgo_get */
|
|
flt_get, /* number of times fault does an unlocked get */
|
|
flt_anon, /* number of times fault anon (case 1a) */
|
|
flt_acow, /* number of times fault anon cow (case 1b) */
|
|
flt_obj, /* number of times fault is on object page (2a) */
|
|
flt_prcopy, /* number of times fault promotes with copy (2b) */
|
|
flt_przero, /* number of times fault promotes with zerofill (2b) */
|
|
|
|
exp_ncounters
|
|
};
|
|
|
|
#endif /* _KERNEL */
|
|
#endif /*_UVM_UVMEXP_ */
|