/* IBM_PROLOG_BEGIN_TAG */ /* This is an automatically generated prolog. */ /* */ /* bos72V src/bos/kernel/sys/vminfo.h 1.19.5.12 */ /* */ /* Licensed Materials - Property of IBM */ /* */ /* COPYRIGHT International Business Machines Corp. 1988,2020 */ /* All Rights Reserved */ /* */ /* US Government Users Restricted Rights - Use, duplication or */ /* disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* */ /* IBM_PROLOG_END_TAG */ /* @(#)19 1.19.5.12 src/bos/kernel/sys/vminfo.h, sysvmm, bos72V, v2020_28A5 7/1/20 11:48:31 */ #ifndef _H_VMINFO #define _H_VMINFO /* * COMPONENT_NAME: (SYSVMM) Virtual Memory Manager * * FUNCTIONS: * * ORIGINS: 27, 83 * */ #include #include #include #include #ifdef __cplusplus extern "C" { #endif /* Information shown by vmstat command. */ struct vminfo { uint pgexct; /* count of page faults */ uint pgrclm; /* count of page reclaims */ uint lockexct; /* count of lockmisses */ uint backtrks; /* count of backtracks */ uint pageins; /* count of pages paged in */ uint pageouts; /* count of pages paged out */ uint pgspgins; /* count of page ins from paging space */ uint pgspgouts; /* count of page outs from paging space */ uint numsios; /* count of start I/Os */ uint numiodone; /* count of iodones */ uint zerofills; /* count of zero filled pages */ uint exfills; /* count of exec filled pages */ uint scans; /* count of page scans by clock */ uint cycles; /* count of clock hand cycles */ uint pgsteals; /* count of page steals */ uint freewts; /* count of free frame waits */ uint extendwts; /* count of extend XPT waits */ uint pendiowts; /* count of pending I/O waits */ uint pings; /* count of ping-pongs: source => alias */ uint pongs; /* count of ping-pongs: alias => source */ uint pangs; /* count of ping-pongs: alias => alias */ uint dpongs; /* count of ping-pongs: alias page delete */ uint wpongs; /* count of ping-pongs: alias page writes */ uint cachef; /* count of ping-pong cache flushes */ uint cachei; /* count of ping-pong cache invalidates */ /* * the next fields need to be computed by vmgetinfo * system call, else their value will be inaccurate. */ rpn64_t numfrb; /* number of pages on free list */ rpn64_t numclient; /* number of client frames */ rpn64_t numcompress; /* no of frames in compressed segments */ rpn64_t numperm; /* number frames non-working segments */ rpn64_t maxperm; /* max number of frames non-working */ rpn64_t memsizepgs; /* real memory size in 4K pages */ rpn64_t numvpages; /* accessed virtual pages */ rpn64_t minperm; /* no fileonly page steals */ rpn64_t minfree; /* minimun pages free list (fblru) */ rpn64_t maxfree; /* maxfree pages free list (fblru) */ rpn64_t maxclient; /* max number of client frames */ #ifndef RPTYPES #define RPTYPES 2 #endif rpn64_t rpgcnt[RPTYPES];/* repaging cnt */ rpn64_t numpout; /* number of fblru page-outs */ rpn64_t numremote; /* number of fblru remote page-outs */ rpn64_t numwseguse; /* count of pages in use for working seg */ rpn64_t numpseguse; /* count of pages in use for persistent seg */ rpn64_t numclseguse; /* count of pages in use for client seg */ rpn64_t numwsegpin; /* count of pages pinned for working seg */ rpn64_t numpsegpin; /* count of pages pinned for persistent seg */ rpn64_t numclsegpin; /* count of pages pinned for client seg */ uint lgpg_size; /* Hardware large page size */ rpn64_t lgpg_cnt; /* Total number of large pages on the system */ rpn64_t lgpg_numfrb; /* Number of large pages on the freelist(s) */ rpn64_t lgpg_inuse; /* Number of large pages in use */ rpn64_t lgpg_hi; /* Large page high water count */ rpn64_t numralloc; /* number of remote allocations */ cnt64_t numspecsegs; /* number of special dataseg id's */ cnt64_t numspecfree; /* number of free special dataseg id's */ cnt64_t specsegshi; /* special dataseg id's high water count */ /* Current number of free paging space blocks, and the thresholds * when SIGDANGER and SIGKILL signals will be sent to processes. */ rpn64_t psfreeblks; /* number of free paging space blocks */ rpn64_t npswarn; /* threshold when SIGDANGER is sent */ rpn64_t npskill; /* threshold when SIGKILL is sent */ rpn64_t normlmbmem; /* #nonremoveable pages for DR. */ rpn64_t pfrsvdblks; /* number of system reserved blocks */ rpn64_t pfavail; /* number of pages available for pinning */ rpn64_t pfpinavail; /* app-level num pages avail for pinning */ rpn64_t nreplaced[RPTYPES]; /* number of pages replaced */ rpn64_t nrepaged[RPTYPES]; /* number of pages repaged */ rpn64_t minpgahead; /* min number of pageahead pages */ rpn64_t maxpgahead; /* max number of pageahead pages */ rpn64_t numpermio; /* number of fblru non-w.s. pageouts */ cnt64_t hisid; /* max index + 1 of sids ever used */ cnt64_t hiesid; /* max index + 1 of esids ever used, * always set to -1 on 64 bit kernel */ rpn64_t system_pgs; /* pages on SCBs marked V_SYSTEM */ rpn64_t nonsys_pgs; /* pages on SCBs not marked V_SYSTEM */ rpn64_t unmngd_pgs; /* pages not on SCBs */ uint memgrd_succ_pgs;/* pages memguard successfully removed */ uint memgrd_fail_pgs;/* pages memguard failed to remove */ rpn64_t soft_wseguse; /* # soft pages in use for working seg */ rpn64_t soft_pseguse; /* # soft pages in use for pers seg */ rpn64_t soft_clseguse; /* # soft pages in use for client seg */ rpn64_t nloaned; /* # pages loaned to hypervisor for CMO */ size64_t memavailable; /* # bytes mem avail w/o paging working */ uint64_t flags; /* See VMINFO_FLAG* */ rpn64_t true_memsizepgs; /* true # of log/phys 4k pages */ rpn64_t true_numfrb; /* true # of free page frames */ rpn64_t ame_memsizepgs; /* # of expanded log/phys 4k pages */ rpn64_t ame_numfrb; /* # of expaned free page frames */ amef_t ame_factor_tgt; /* target AME expansion factor */ amef_t ame_factor_actual; /* actual AME expansion factor */ size64_t ame_deficit_size; /* deficit, in bytes btwn tgt and actual */ size64_t cmem_cpool_size; /* size of comp. pool in bytes */ size64_t cmem_cpool_free; /* free memory in comp. pool in bytes */ size64_t cmem_ucpool_size; /* size of uncomp. pool in bytes */ rpn64_t cmem_tot_ncpgs; /* # of compressed pages */ size64_t cmem_tot_csize; /* size of comp. pages in comp. form */ uint64_t cmem_ncomp_ops; /* # of compression ops (page-outs) */ uint64_t cmem_ndecomp_ops; /* # of decompression ops (page-ins) */ rpn64_t cmem_wseg_ncpgs; /* # of comp. working storage pgs */ size64_t cmem_wseg_csize; /* size of comp. working storage pgs */ rpn64_t klock_tot_npgs; /* total number of kernel locked pgs */ rpn64_t klock_pin_npgs; /* number of pinned kernel locked pgs */ size64_t cmem_max_cpool_size; /* maximum compressed pool size */ size64_t cmem_tgt_cpool_size; /* target compressed pool size */ ssize64_t bsr_mem_total; /* Total bytes of the BSR facility */ uint64_t bsr_support_window;/* Bit mask for supported window size*/ ssize64_t bsr_mem_free; /* Available bytes of the BSR facility */ uint64_t bsr_free_window; /* Bit mask for free window size */ rpn64_t klock_tot_steals; /* # of kernel locked pages stolen by lru*/ rpn64_t klock_pta_steals; /* # of PTA locked pages stolen by lru */ rpn64_t klock_kstk_steals; /* # of kstack locked pages stolen by lru*/ rpn64_t soft_16mb_wseguse; /* # soft 16m pages in use for working seg*/ #ifndef _NUM_PG_PSIZE #define _NUM_PG_PSIZE 2 /* # of pageable page sizes */ #endif uint64_t cmem_ncomps[_NUM_PG_PSIZE]; /* comp ops per psx */ uint64_t cmem_ndecomps[_NUM_PG_PSIZE]; /* decomp ops per psx */ /* NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE * * When adding members to struct vminfo they must also be * added to struct vminfo64 below. */ }; extern struct vminfo vmminfo; #define vmpf_pgexct vmminfo.pgexct #define vmpf_pgrclm vmminfo.pgrclm #define vmpf_lockexct vmminfo.lockexct #define vmpf_backtrks vmminfo.backtrks #define vmpf_pageins vmminfo.pageins #define vmpf_pageouts vmminfo.pageouts #define vmpf_pgspgins vmminfo.pgspgins #define vmpf_pgspgouts vmminfo.pgspgouts #define vmpf_numsios vmminfo.numsios #define vmpf_numiodone vmminfo.numiodone #define vmpf_zerofills vmminfo.zerofills #define vmpf_exfills vmminfo.exfills #define vmpf_scans vmminfo.scans #define vmpf_cycles vmminfo.cycles #define vmpf_pgsteals vmminfo.pgsteals #define vmpf_freewts vmminfo.freewts #define vmpf_extendwts vmminfo.extendwts #define vmpf_pendiowts vmminfo.pendiowts #define vmpf_pings vmminfo.pings #define vmpf_pangs vmminfo.pangs #define vmpf_pongs vmminfo.pongs #define vmpf_dpongs vmminfo.dpongs #define vmpf_wpongs vmminfo.wpongs #define vmpf_cachef vmminfo.cachef #define vmpf_cachei vmminfo.cachei #define vmpf_numfrb vmminfo.numfrb #define vmpf_numclient vmminfo.numclient #define vmpf_numcompress vmminfo.numcompress #define vmpf_numperm vmminfo.numperm #define vmpf_maxperm vmminfo.maxperm #define vmpf_memsizepgs vmminfo.memsizepgs #define vmpf_minperm vmminfo.minperm #define vmpf_minfree vmminfo.minfree #define vmpf_maxfree vmminfo.maxfree #define vmpf_maxclient vmminfo.maxclient #define vmpf_rpgcnt vmminfo.rpgcnt #define vmpf_numpout vmminfo.numpout #define vmpf_numremote vmminfo.numremote #define vmpf_numwseguse vmminfo.numwseguse #define vmpf_numpseguse vmminfo.numpseguse #define vmpf_numclseguse vmminfo.numclseguse #define vmpf_numwsegpin vmminfo.numwsegpin #define vmpf_numpsegpin vmminfo.numpsegpin #define vmpf_numclsegpin vmminfo.numclsegpin #define vmpf_numvpages vmminfo.numvpages #define vmpf_psfreeblks vmminfo.psfreeblks #define vmpf_npswarn vmminfo.npswarn #define vmpf_npskill vmminfo.npskill #define vmpf_normlmbmem vmminfo.normlmbmem #define vmpf_pfrsvdblks vmminfo.pfrsvdblks #define vmpf_pfavail vmminfo.pfavail #define vmpf_pfpinavail vmminfo.pfpinavail #define vmpf_lgpg_cnt vmminfo.lgpg_cnt #define vmpf_lgpg_size vmminfo.lgpg_size #define vmpf_lgpg_numfrb vmminfo.lgpg_numfrb #define vmpf_lgpg_inuse vmminfo.lgpg_inuse #define vmpf_lgpg_hi vmminfo.lgpg_hi #define vmpf_numspecsegs vmminfo.numspecsegs #define vmpf_numspecfree vmminfo.numspecfree #define vmpf_specsegshi vmminfo.specsegshi #define vmpf_numralloc vmminfo.numralloc #define vmpf_nreplaced vmminfo.nreplaced #define vmpf_nrepaged vmminfo.nrepaged #define vmpf_minpgahead vmminfo.minpgahead #define vmpf_maxpgahead vmminfo.maxpgahead #define vmpf_numpermio vmminfo.numpermio #define vmpf_hisid vmminfo.hisid #define vmpf_hiesid vmminfo.hiesid #define vmpf_system_pgs vmminfo.system_pgs #define vmpf_nonsys_pgs vmminfo.nonsys_pgs #define vmpf_unmngd_pgs vmminfo.unmngd_pgs #define vmpf_memgrd_succ_pgs vmminfo.memgrd_succ_pgs #define vmpf_memgrd_fail_pgs vmminfo.memgrd_fail_pgs #define vmpf_flags vmminfo.flags #define vmpf_true_memsizepgs vmminfo.true_memsizepgs #define vmpf_true_numfrb vmminfo.true_numfrb #define vmpf_ame_memsizepgs vmminfo.ame_memsizepgs #define vmpf_ame_numfrb vmminfo.ame_numfrb #define vmpf_ame_factor_tgt vmminfo.ame_factor_tgt #define vmpf_ame_factor_actual vmminfo.ame_factor_actual #define vmpf_ame_deficit_size vmminfo.ame_deficit_size #define vmpf_cmem_cpool_size vmminfo.cmem_cpool_size #define vmpf_cmem_cpool_free vmminfo.cmem_cpool_free #define vmpf_cmem_ucpool_size vmminfo.cmem_ucpool_size #define vmpf_cmem_tot_ncpgs vmminfo.cmem_tot_ncpgs #define vmpf_cmem_tot_csize vmminfo.cmem_tot_csize #define vmpf_cmem_ncomp_ops vmminfo.cmem_ncomp_ops #define vmpf_cmem_ndecomp_ops vmminfo.cmem_ndecomp_ops #define vmpf_cmem_wseg_ncpgs vmminfo.cmem_wseg_ncpgs #define vmpf_cmem_wseg_csize vmminfo.cmem_wseg_csize #define vmpf_cmem_ncomps(x) vmminfo.cmem_ncomps[(x)] #define vmpf_cmem_ndecomps(x) vmminfo.cmem_ndecomps[(x)] /* struct for VMINFO64 */ struct vminfo64 { uint64_t pgexct; /* count of page faults */ uint64_t pgrclm; /* count of page reclaims */ uint64_t lockexct; /* count of lockmisses */ uint64_t backtrks; /* count of backtracks */ uint64_t pageins; /* count of pages paged in */ uint64_t pageouts; /* count of pages paged out */ uint64_t pgspgins; /* count of page ins from paging space */ uint64_t pgspgouts; /* count of page outs from paging space */ uint64_t numsios; /* count of start I/Os */ uint64_t numiodone; /* count of iodones */ uint64_t zerofills; /* count of zero filled pages */ uint64_t exfills; /* count of exec filled pages */ uint64_t scans; /* count of page scans by clock */ uint64_t cycles; /* count of clock hand cycles */ uint64_t pgsteals; /* count of page steals */ uint64_t freewts; /* count of free frame waits */ uint64_t extendwts; /* count of extend XPT waits */ uint64_t pendiowts; /* count of pending I/O waits */ /* * the next fields need to be computed by vmgetinfo * system call, else their value will be inaccurate. */ rpn64_t numfrb; /* number of pages on free list */ rpn64_t numclient; /* number of client frames */ rpn64_t numcompress; /* no of frames in compressed segments */ rpn64_t numperm; /* number frames non-working segments */ rpn64_t maxperm; /* max number of frames non-working */ rpn64_t memsizepgs; /* real memory size in 4K pages */ rpn64_t numvpages; /* accessed virtual pages */ rpn64_t minperm; /* no fileonly page steals */ rpn64_t minfree; /* minimun pages free list (fblru) */ rpn64_t maxfree; /* maxfree pages free list (fblru) */ rpn64_t maxclient; /* max number of client frames */ #ifndef RPTYPES #define RPTYPES 2 #endif rpn64_t rpgcnt[RPTYPES];/* repaging cnt */ rpn64_t numpout; /* number of fblru page-outs */ rpn64_t numremote; /* number of fblru remote page-outs */ rpn64_t numwseguse; /* count of pages in use for working seg */ rpn64_t numpseguse; /* count of pages in use for persistent seg */ rpn64_t numclseguse; /* count of pages in use for client seg */ rpn64_t numwsegpin; /* count of pages pinned for working seg */ rpn64_t numpsegpin; /* count of pages pinned for persistent seg */ rpn64_t numclsegpin; /* count of pages pinned for client seg */ psize_t lgpg_size; /* Hardware large page size */ rpn64_t lgpg_cnt; /* Total number of large pages on the system */ rpn64_t lgpg_numfrb; /* Number of large pages on the freelist(s) */ rpn64_t lgpg_inuse; /* Number of large pages in use */ rpn64_t lgpg_hi; /* Large page high water count */ rpn64_t numralloc; /* number of remote allocations */ cnt64_t numspecsegs; /* number of special dataseg id's */ cnt64_t numspecfree; /* number of free special dataseg id's */ cnt64_t specsegshi; /* special dataseg id's high water count */ /* Current number of free paging space blocks, and the thresholds * when SIGDANGER and SIGKILL signals will be sent to processes. */ rpn64_t psfreeblks; /* number of free paging space blocks */ rpn64_t npswarn; /* threshold when SIGDANGER is sent */ rpn64_t npskill; /* threshold when SIGKILL is sent */ rpn64_t normlmbmem; /* #nonremoveable pages for DR. */ rpn64_t pfrsvdblks; /* number of system reserved blocks */ rpn64_t pfavail; /* number of pages available for pinning */ rpn64_t pfpinavail; /* app-level num pages avail for pinning */ rpn64_t nreplaced[RPTYPES]; /* number of pages replaced */ rpn64_t nrepaged[RPTYPES]; /* number of pages repaged */ rpn64_t minpgahead; /* min number of pageahead pages */ rpn64_t maxpgahead; /* max number of pageahead pages */ rpn64_t numpermio; /* number of fblru non-w.s. pageouts */ cnt64_t hisid; /* max index + 1 of sids ever used */ cnt64_t hiesid; /* max index + 1 of esids ever used, * always set to -1 on 64 bit kernel */ rpn64_t system_pgs; /* pages on SCBs marked V_SYSTEM */ rpn64_t nonsys_pgs; /* pages on SCBs not marked V_SYSTEM */ rpn64_t unmngd_pgs; /* pages not on SCBs */ uint64_t memgrd_succ_pgs;/* pages memguard successfully removed */ uint64_t memgrd_fail_pgs;/* pages memguard failed to remove */ rpn64_t soft_wseguse; /* # soft pages in use for working seg */ rpn64_t soft_pseguse; /* # soft pages in use for pers seg */ rpn64_t soft_clseguse; /* # soft pages in use for client seg */ rpn64_t nloaned; /* # pages loaned to hypervisor for CMO */ size64_t memavailable; /* # bytes mem avail w/o paging working */ uint64_t flags; /* See VMINFO_FLAG* */ rpn64_t true_memsizepgs; /* true # of log/phys 4k pages */ rpn64_t true_numfrb; /* true # of free page frames */ rpn64_t ame_memsizepgs; /* # of expanded log/phys 4k pages */ rpn64_t ame_numfrb; /* # of expaned free page frames */ amef_t ame_factor_tgt; /* target AME expansion factor */ amef_t ame_factor_actual; /* actual AME expansion factor */ size64_t ame_deficit_size; /* deficit, in bytes btwn tgt and actual */ size64_t cmem_cpool_size; /* size of comp. pool in bytes */ size64_t cmem_cpool_free; /* free memory in comp. pool in bytes */ size64_t cmem_ucpool_size; /* size of uncomp. pool in bytes */ rpn64_t cmem_tot_ncpgs; /* # of compressed pages */ size64_t cmem_tot_csize; /* size of comp. pages in comp. form */ uint64_t cmem_ncomp_ops; /* # of compression ops (page-outs) */ uint64_t cmem_ndecomp_ops; /* # of decompression ops (page-ins) */ rpn64_t cmem_wseg_ncpgs; /* # of comp. working storage pgs */ size64_t cmem_wseg_csize; /* size of comp. working storage pgs */ rpn64_t klock_tot_npgs; /* total number of kernel locked pgs */ rpn64_t klock_pin_npgs; /* number of pinned kernel locked pgs */ size64_t cmem_max_cpool_size; /* maximum compressed pool size */ size64_t cmem_tgt_cpool_size; /* target compressed pool size */ ssize64_t bsr_mem_total; /* Total bytes of the BSR facility */ uint64_t bsr_support_window;/* Bit mask for supported window size*/ ssize64_t bsr_mem_free; /* Available bytes of the BSR facility */ uint64_t bsr_free_window; /* Bit mask for free window size */ rpn64_t klock_tot_steals; /* # of kernel locked pages stolen by lru*/ rpn64_t klock_pta_steals; /* # of PTA locked pages stolen by lru */ rpn64_t klock_kstk_steals; /* # of kstack locked pages stolen by lru*/ rpn64_t soft_16mb_wseguse; /* # soft 16m pages in use for working seg*/ #ifndef _NUM_PG_PSIZE #define _NUM_PG_PSIZE 2 /* # of pageable page sizes */ #endif uint64_t cmem_ncomps[_NUM_PG_PSIZE]; /* comp ops per psx */ uint64_t cmem_ndecomps[_NUM_PG_PSIZE]; /* decomp ops per psx */ /* NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE * * When adding members to struct vminfo64 they must also be * added to struct vminfo above. */ }; struct vminfo_psize { psize_t psize; /* IN: page size */ /* The rest of this struct is output from vmgetinfo() */ uint64_t attr; /* bitmap of page size's attributes */ /* Page size attributes reported in the vminfo_psize.attr field: */ #define VM_PSIZE_ATTR_PAGEABLE 0x1 /* page size supports paging */ uint64_t pgexct; /* count of page faults */ uint64_t pgrclm; /* count of page reclaims */ uint64_t lockexct; /* count of lockmisses */ uint64_t backtrks; /* count of backtracks */ uint64_t pageins; /* count of pages paged in */ uint64_t pageouts; /* count of pages paged out */ uint64_t pgspgins; /* count of page ins from paging space */ uint64_t pgspgouts; /* count of page outs from paging space */ uint64_t numsios; /* count of start I/Os */ uint64_t numiodone; /* count of iodones */ uint64_t zerofills; /* count of zero filled pages */ uint64_t exfills; /* count of exec filled pages */ uint64_t scans; /* count of page scans by clock */ uint64_t cycles; /* count of clock hand cycles */ uint64_t pgsteals; /* count of page steals */ uint64_t freewts; /* count of free frame waits */ uint64_t extendwts; /* count of extend XPT waits */ uint64_t pendiowts; /* count of pending I/O waits */ /* * the next fields need to be computed by vmgetinfo * system call, else their value will be inaccurate. */ rpn64_t numframes; /* # of real memory frames of this psize */ rpn64_t numfrb; /* number of pages on free list */ rpn64_t numclient; /* number of client frames */ rpn64_t numcompress; /* no of frames in compressed segments */ rpn64_t numperm; /* number frames non-working segments */ rpn64_t numvpages; /* accessed virtual pages */ rpn64_t minfree; /* minimun pages free list (fblru) */ rpn64_t maxfree; /* maxfree pages free list (fblru) */ #ifndef RPTYPES #define RPTYPES 2 #endif rpn64_t rpgcnt[RPTYPES];/* repaging cnt */ rpn64_t numpout; /* number of fblru page-outs */ rpn64_t numremote; /* number of fblru remote page-outs */ rpn64_t numwseguse; /* count of pages in use for working seg */ rpn64_t numpseguse; /* count of pages in use for persistent seg */ rpn64_t numclseguse; /* count of pages in use for client seg */ rpn64_t numwsegpin; /* count of pages pinned for working seg */ rpn64_t numpsegpin; /* count of pages pinned for persistent seg */ rpn64_t numclsegpin; /* count of pages pinned for client seg */ rpn64_t numpgsp_pgs; /* # of wseg pages with allocated paging space */ rpn64_t numralloc; /* number of remote allocations */ rpn64_t pfrsvdblks; /* number of system reserved blocks */ rpn64_t pfavail; /* number of pages available for pinning */ rpn64_t pfpinavail; /* app-level num pages avail for pinning */ rpn64_t numpermio; /* number of fblru non-w.s. pageouts */ rpn64_t system_pgs; /* pages on SCBs marked V_SYSTEM */ rpn64_t nonsys_pgs; /* pages on SCBs not marked V_SYSTEM */ rpn64_t soft_wseguse; /* # soft pages in use for working seg */ rpn64_t soft_pseguse; /* # soft pages in use for pers seg */ rpn64_t soft_clseguse; /* # soft pages in use for client seg */ size64_t memavailable; /* # bytes mem avail w/o paging working */ uint64_t flags; /* See VMINFO_FLAG* */ rpn64_t true_numfrb; /* true # of free page frames */ rpn64_t ame_numfrb; /* # of expaned free page frames */ size64_t cmem_ucpool_size; /* size of uncomp. pool in bytes */ rpn64_t cmem_tot_ncpgs; /* # of compressed pages */ size64_t cmem_tot_csize; /* size of comp. pages in comp. form */ uint64_t cmem_ncomp_ops; /* # of compression ops (page-outs) */ uint64_t cmem_ndecomp_ops; /* # of decompression ops (page-ins) */ rpn64_t cmem_wseg_ncpgs; /* # of comp. working storage pgs */ size64_t cmem_wseg_csize; /* size of comp. working storage pgs */ rpn64_t klock_tot_npgs; /* total number of kernel locked pgs */ rpn64_t klock_pin_npgs; /* number of pinned kernel locked pgs */ rpn64_t true_numframes; /* true # of frames of this page size */ rpn64_t ame_numframes; /* AME # of frames of this page size */ rpn64_t ame_deficit_npgs; /* # deficit frames of this page size */ rpn64_t klock_tot_steals; /* # of kernel locked pages stolen by lru*/ rpn64_t klock_pta_steals; /* # of PTA locked pages stolen by lru */ rpn64_t klock_kstk_steals; /* # of kstack locked pages stolen by lru*/ }; extern struct vminfo_psize vmminfo_psizes[]; /* Macros for referencing variables in vminfo_psize. */ #define VMPFPS_REF(p) vmminfo_psizes[(p)] #define vmpfps_psize(p) VMPFPS_REF(p).psize #define vmpfps_attr(p) VMPFPS_REF(p).attr #define vmpfps_pgexct(p) VMPFPS_REF(p).pgexct #define vmpfps_pgrclm(p) VMPFPS_REF(p).pgrclm #define vmpfps_lockexct(p) VMPFPS_REF(p).lockexct #define vmpfps_backtrks(p) VMPFPS_REF(p).backtrks #define vmpfps_pageins(p) VMPFPS_REF(p).pageins #define vmpfps_pageouts(p) VMPFPS_REF(p).pageouts #define vmpfps_pgspgins(p) VMPFPS_REF(p).pgspgins #define vmpfps_pgspgouts(p) VMPFPS_REF(p).pgspgouts #define vmpfps_numsios(p) VMPFPS_REF(p).numsios #define vmpfps_numiodone(p) VMPFPS_REF(p).numiodone #define vmpfps_zerofills(p) VMPFPS_REF(p).zerofills #define vmpfps_exfills(p) VMPFPS_REF(p).exfills #define vmpfps_scans(p) VMPFPS_REF(p).scans #define vmpfps_cycles(p) VMPFPS_REF(p).cycles #define vmpfps_pgsteals(p) VMPFPS_REF(p).pgsteals #define vmpfps_freewts(p) VMPFPS_REF(p).freewts #define vmpfps_extendwts(p) VMPFPS_REF(p).extendwts #define vmpfps_pendiowts(p) VMPFPS_REF(p).pendiowts #define vmpfps_numfrb(p) VMPFPS_REF(p).numfrb #define vmpfps_numclient(p) VMPFPS_REF(p).numclient #define vmpfps_numcompress(p) VMPFPS_REF(p).numcompress #define vmpfps_numperm(p) VMPFPS_REF(p).numperm #define vmpfps_minfree(p) VMPFPS_REF(p).minfree #define vmpfps_maxfree(p) VMPFPS_REF(p).maxfree #define vmpfps_rpgcnt(p,y) VMPFPS_REF(p).rpgcnt[(y)] #define vmpfps_numpout(p) VMPFPS_REF(p).numpout #define vmpfps_numframes(p) VMPFPS_REF(p).numframes #define vmpfps_numremote(p) VMPFPS_REF(p).numremote #define vmpfps_numwseguse(p) VMPFPS_REF(p).numwseguse #define vmpfps_numpseguse(p) VMPFPS_REF(p).numpseguse #define vmpfps_numclseguse(p) VMPFPS_REF(p).numclseguse #define vmpfps_numwseguse_soft(p) VMPFPS_REF(p).soft_wseguse #define vmpfps_numpseguse_soft(p) VMPFPS_REF(p).soft_pseguse #define vmpfps_numclseguse_soft(p) VMPFPS_REF(p).soft_clseguse #define vmpfps_numwsegpin(p) VMPFPS_REF(p).numwsegpin #define vmpfps_numpsegpin(p) VMPFPS_REF(p).numpsegpin #define vmpfps_numclsegpin(p) VMPFPS_REF(p).numclsegpin #define vmpfps_numpgsp_pgs(p) VMPFPS_REF(p).numpgsp_pgs #define vmpfps_numvpages(p) VMPFPS_REF(p).numvpages #define vmpfps_pfrsvdblks(p) VMPFPS_REF(p).pfrsvdblks #define vmpfps_pfavail(p) VMPFPS_REF(p).pfavail #define vmpfps_pfpinavail(p) VMPFPS_REF(p).pfpinavail #define vmpfps_numralloc(p) VMPFPS_REF(p).numralloc #define vmpfps_numpermio(p) VMPFPS_REF(p).numpermio #define vmpfps_system_pgs(p) VMPFPS_REF(p).system_pgs #define vmpfps_nonsys_pgs(p) VMPFPS_REF(p).nonsys_pgs #define vmpfps_flags(p) VMPFPS_REF(p).flags #define vmpfps_true_numfrb(p) VMPFPS_REF(p).true_numfrb #define vmpfps_ame_numfrb(p) VMPFPS_REF(p).ame_numfrb #define vmpfps_cmem_ucpool_size(p) VMPFPS_REF(p).cmem_ucpool_size #define vmpfps_cmem_tot_ncpgs(p) VMPFPS_REF(p).cmem_tot_ncpgs #define vmpfps_cmem_tot_csize(p) VMPFPS_REF(p).cmem_tot_csize #define vmpfps_cmem_ncomp_ops(p) VMPFPS_REF(p).cmem_ncomp_ops #define vmpfps_cmem_ndecomp_ops(p) VMPFPS_REF(p).cmem_ndecomp_ops #define vmpfps_cmem_wseg_ncpgs(p) VMPFPS_REF(p).cmem_wseg_ncpgs #define vmpfps_cmem_wseg_csize(p) VMPFPS_REF(p).cmem_wseg_csize /* Paging space information returned by swapqry() system call */ struct pginfo { dev_t devno; /* device number */ uint size; /* size in PAGESIZE blocks */ uint free; /* # of free PAGESIZE blocks */ uint iocnt; /* number of pending i/o's */ }; /* extended version of pginfo structure */ struct pginfo_ext { dev_t devno; /* device number */ uint size; /* size in PAGESIZE blocks */ uint free; /* # of free PAGESIZE blocks */ uint iocnt; /* number of pending i/o's */ uint chksum_size; /* size of checksum in bits */ }; #ifdef _KERNEL /* 32bit application representation of pginfo structure */ struct pginfo32 { dev32_t devno; /* device number */ uint size; /* size in PAGESIZE blocks */ uint free; /* # of free PAGESIZE blocks */ uint iocnt; /* number of pending i/o's */ }; struct pginfo32_ext { dev32_t devno; /* device number */ uint size; /* size in PAGESIZE blocks */ uint free; /* # of free PAGESIZE blocks */ uint iocnt; /* number of pending i/o's */ uint chksum_size; /* size of checksum in bits */ }; #endif /* Output of VMSHMID_TO_VMID command */ struct vmshmid_to_vmid { int shmid; /* INPUT: shared memory id */ int num_vmids; /* INPUT: size of vmids array*/ /* OUTPUT: number vmids copied */ vmid64_t *vmids; /* OUTPUT: where vmids are copied */ } ; /* struct to report page information for the VM_PAGE_INFO command */ struct vm_page_info { uint64_t addr; /* IN: address on which to report */ size64_t pagesize; /* OUT: size of page backing addr */ }; /* struct to report the system's IPC limits */ struct ipc_limits { /* Semaphore limits */ size64_t semmni; /* max # of semaphore id's */ size64_t semmsl; /* max # of semaphores per sem id */ size64_t semopm; /* max # of op's per semop() call */ size64_t semvmx; /* max value of a semaphore */ size64_t semume; /* max # of undo entries per proc */ size64_t semaem; /* adjust on exit max value */ /* Message limits */ size64_t msgmax; /* max message size */ size64_t msgmnb; /* max # of bytes per queue */ size64_t msgmni; /* max # of message queue id's */ size64_t msgmnm; /* max # of messages per queue id */ /* Shared memory limits */ size64_t shmmni; /* max # of shared memory id's */ size64_t shmmax64; /* 64bit proc max shm region size */ uint shmmax32; /* 32bit proc max shm region size */ uint shmmin; /* min shared memory region size */ size64_t shmseg64; /* max # of shm segs per 64bit proc */ uint shmseg32; /* max # of shm segs per 32bit proc * (non-extended shm) */ }; /* struct to report mem info per SRAD */ struct vm_srad_meminfo { int vmsrad_in_size; /* size of the structure provided by the caller */ int vmsrad_out_size; /* number of bytes returned by the service. */ size64_t vmsrad_total_pg; /* total number of bytes of memory in * pageable frames in the SRAD */ size64_t vmsrad_free_pg; /* total number of bytes of free memory in * pageable frames in the SRAD */ size64_t vmsrad_file; /* number of file cache bytes that could * be stolen by the LRU daemon */ int vmsrad_aff_priv_pct; /* effective percentage of private memory that * can get affinitized to this vmpool by default * page placement based on the tunable * enhanced_affinity_private, the pool's * computational usage, and the SRAD's memory to * cpu capacity ratio. */ int vmsrad_aff_avail_pct; /* percentage of available computational memory * left in the vmpool based on the tunable * enhanced_affinity_vmpool_limit and the average * system computational percentage. */ size64_t vmsrad_total_nonpg; /* total number of bytes of memory in * nonpageable frames in the SRAD */ size64_t vmsrad_free_nonpg; /* total number of bytes of free memory in * nonpageable frames in the SRAD */ }; #define vmsrad_total vmsrad_total_pg /* for compatibility - the original * name was incorrect */ #define vmsrad_free vmsrad_free_pg /* for compatibility */ #define VM_MEMINFO_OLDSIZE (sizeof(struct vm_srad_meminfo) - 2*sizeof(size64_t)) /* size of old struct - if passed in_size * equals this, then do not return nonpg data */ /* Structure to report kernel's real memory usage (see VMINFO64_KMEM). * It reports total pages in memory, pinned pages, and kernel locked * unpinned pages for input page-size. Note that unpinned klocked pages * are not necessarily in memory if kernel pages were actually paged out. * This is just a sum over all segments of each type (i.e. kernel heap, * mbuf heap, PTA, etc). They are computed in vmgetinfo() by looping over * all sidx in the system. */ enum vm_kmem_type_e { VM_KER_SEG = 0, VM_KHEAP_SEG, VM_MBUFHEAP_SEG, VM_PTA_SEG, VM_UGALLOC_SEG, VM_PRIV_SEG, VM_KTHR_SEG, VM_KPROC_STK_SEG, VM_OTHER_SEG, VM_KMEM_TYPES }; struct vm_kmem_stats { rpn64_t total; rpn64_t pinned; rpn64_t klocked; }; /* * Structure to report page fault time for a process (VM_PROC_PF_INFO) * and thread (VM_THREAD_PF_INFO). It reports time taken for page faults. * Faults may be major/minor and for text/kernel/data. * * NOTES: * 1. Information for calling thread or process can be obtained by * setting id field to -1. * 2. flags field is currently unused. Setting to a non-zero value * will cause an error (EINVAL). * 3. minor (no sleep) page fault times are measured in CPU * utilization (PURR/SPURR) units, and major (involving sleep) * page fault times are measured in wall clock time (timebase) units. * Both are converted to real time in timestruc64_t format when * reporting to user. */ #define VM_PF_INFO_VER 0x1 #if defined(_ALL_SOURCE) && (defined(__64BIT__) || defined(_LONG_LONG)) struct vm_pf_info { /* INPUT */ uint32_t version; /* Set to VM_PF_INFO_VER */ uint32_t flags; /* Unused. MUST be zero */ id64_t id; /* pid or tid */ /* OUTPUT */ struct timestruc64_t text_major_pf_time; struct timestruc64_t data_major_pf_time; struct timestruc64_t kernel_major_pf_time; struct timestruc64_t text_minor_pf_time; struct timestruc64_t data_minor_pf_time; struct timestruc64_t kernel_minor_pf_time; uint64_t minor_pf_count; uint64_t major_pf_count; }; #endif #define VM_KMEM_INFO_VER VM_KMEM_TYPES struct vm_kmem_psize { /* IN: this are set on input to vmgetinfo() */ unsigned int version; unsigned int psize; /* OUT: Following fields are returned from vmgetinfo() */ struct vm_kmem_stats stats[VM_KMEM_TYPES]; }; /* vmgetinfo system call */ extern int vmgetinfo (void *out, int command, int arg); extern int wpar_vmgetinfo(cid_t cid, void *out, int command, int arg); #ifdef _KERNEL #if defined(__64BIT_KERNEL) || defined(__FULL_PROTO) extern int kvmgetinfo(void *out, int command, int arg); #endif /* __64BIT_KERNEL || __FULL_PROTO */ #endif /* _KERNEL */ /* command values: */ #define VMINFO 0 #define VMSHMID_TO_VMID 1 #define VMINFO_ABRIDGED 2 #define VMGETMEMPVARS 3 #define VMSETMEMPVARS 4 #define VMGETKERVARS 5 #define VMSETKERVARS 6 #define VM_PAGE_INFO 7 #define VMPERF 8 #define IPC_LIMITS 9 #define BOSBOOT_VARS 10 /* values 11-99 are reserved for internal use. */ #define VM_NEW_HEAP_PSIZE 100 /* advisory psize for future sbrk allocs */ #define VM_STAGGER_DATA 101 /* stagger the present sbreak value */ #define VMINFO_GETPSIZES 102 /* report a system's supported page sizes */ #define VMINFO_PSIZE 103 /* report statistics for a page size */ #define VMINFO64 104 /* VMINFO with all 64 bit fields */ #define VMINFO64_SLOW 105 /* VMINFO64 but slow scb-walk */ #define VM_SRAD_MEMINFO 106 /* Free/stealable pages per SRAD */ #define VM_AFFINITIZED_MEMINFO 107 /* Private affintized mem per proc */ #define VM_UPD_PGHINTS 108 /* Update page hints at pmig time */ #define KVMINFO_USR 109 /* kvmgetinfo() - report user-view of VMINFO */ #define KVMINFO_SYS 110 /* kvmgetinfo() - report system-view of VMINFO */ #define VMINFO64_KMEM 111 /* kernel memory usage by seg type */ #define VM_PROC_PF_INFO 112 /* Page fault time for process */ #define VM_THREAD_PF_INFO 113 /* Page fault time for thread */ #ifdef _NO_PROTO extern blkcnt_t psdanger(); extern int swapoff(); extern int swapon(); extern int swapqry(); #else extern blkcnt_t psdanger(int); extern int swapoff(char *); extern int swapon(char *); extern int swapqry(char *, struct pginfo *); #endif /* defines for valid paging device checksum sizes */ #define PGDEV_CHKSUM_0 0 #define PGDEV_CHKSUM_8 8 #define PGDEV_CHKSUM_16 16 #define PGDEV_CHKSUM_32 32 #define VALID_PGDEV_CHKSUM(_chksum_size) \ ((_chksum_size) == PGDEV_CHKSUM_0 || \ (_chksum_size) == PGDEV_CHKSUM_8 || \ (_chksum_size) == PGDEV_CHKSUM_16 || \ (_chksum_size) == PGDEV_CHKSUM_32) /* defines for _swapon_ext flags */ #define SWAPON_CHKSUM 1 /* means that arg 2 is a checksum */ #define SWAPON_WPAR 2 /* means that arg 2 is a WPAR id */ /* definse for _swapqry_ext flags */ #define SWAPQRY_PGINFO 1 /* means that arg 2 is a pginfo_ext* */ /* system call to allow user-space programs set their default * page placement policies */ int vm_mem_policy(int, int *, int *, int); /* Commands accepted by vm_mem_policy (except for the min/max values) */ enum { VM_MIN_POLCMD = 0, VM_GET_POLICY, VM_SET_POLICY, VM_MAX_POLCMD }; /* Types of memory policies that can be set through vm_mem_policy() */ enum { VM_POLICY_TEXT = 0, VM_POLICY_STACK, VM_POLICY_DATA, VM_POLICY_SHM_NAMED, VM_POLICY_SHM_ANON, VM_POLICY_MAPPED_FILE, VM_POLICY_UNMAPPED_FILE, VM_NUM_POLICIES }; /* Flag values for vminfo[64|_psize].flags */ #define VMINFO_FLAG_VMI_MV_EXP 0x1 /* metrics relative to expanded memory */ #define VMINFO_FLAG_SYS_MV_EXP 0x2 /* system memory view is expanded */ /* Compression system calls */ int accel_compress(void *, size_t, void *, size_t *, int); int accel_decompress(void *, size_t, void *, size_t *, int); #ifdef _KERNEL /* Input flags for kaccel_compress/decompress */ #define ACC_BUF_PINNED 0x0001 /* uc_buf, c_buf already pinned */ int kaccel_compress(void *, size_t, void *, size_t *, int); int kaccel_decompress(void *, size_t, void *, size_t *, int); #endif /* _KERNEL */ #ifdef __cplusplus } #endif #endif /* _H_VMINFO */