perfstat_memory_page_wpar Interface

The perfstat_memory_page_wpar interface returns a set of structures of type perfstat_memory_page_wpar_t, which is defined in the libperfstat.h file.

Selected fields from the perfstat_memory_page_wpar_t structure include:
Item Descriptor
Psize Page size in bytes
real_total Amount of Global real memory (in units of the psize)
real_pinned Amount of WPAR pinned memory (in units of psize)
Pgins Number of WPAR pages paged in
Pgouts Number of WPAR pages paged out

Several other paging-space-related metrics (such as number of system calls, number of reads, writes, forks, execs, and load average) are also returned. For a complete list of other paging-space-related metrics, see the perfstat_memory_page_wpar_t section in the libperfstat.h header file.

The following program emulates vmstat behavior and also shows an example of how perfstat_memory_page_wpar is used from the global environment:
#include <stdio.h>
#include <stdlib.h>
#include <libperfstat.h>

int main(){
int i, psizes, rc;
perfstat_memory_page_wpar_t *pageinfo;
perfstat_id_wpar_t wparid;
wparid.spec = WPARNAME;
strcpy(wparid.u.wparname,"test");
perfstat_psize_t psize;

psize.psize = FIRST_PSIZE;
/* Get the number of page sizes */
psizes = perfstat_memory_page_wpar(&wparid, NULL, NULL, sizeof(perfstat_memory_page_wpar_t),0);
/*check for error */
if (psizes <= 0 ){
    perror("perfstat_memory_page_wpar ");
    exit(-1);
}

/*Allocate enough memory to hold the structures */
pageinfo = (perfstat_memory_page_wpar_t *)calloc(psizes, sizeof(perfstat_memory_page_wpar_t));

/*check for memory allocation */
if (!pageinfo){
   perror("calloc");
   exit(-1);
}

/* call the API and get the data */
rc = perfstat_memory_page_wpar(&wparid, &psize, pageinfo , 
sizeof(perfstat_memory_page_wpar_t), psizes);
/* check the return values for any error */
if (rc <= 0){
    perror("perfstat_memory_page_wpar ");
    exit(-1);
}

for(i=0;i<psizes;i++){
	printf("Page size in bytes=%lld\n",pageinfo[i].psize);
	printf("Number of real memory frames of this page size=%lld\n",pageinfo[i].real_total);
	printf("Number of pages pinned=%lld\n",pageinfo[i].real_pinned);
	printf("Number of pages in use=%lld\n",pageinfo[i].real_inuse);
	printf("Number of page faults=%lld\n",pageinfo[i].pgexct);
	printf("Number of pages paged in=%lld\n",pageinfo[i].pgins);
	printf("Number of pages paged out=%lld\n",pageinfo[i].pgouts);
	printf("Number of page ins from paging space=%lld\n",pageinfo[i].pgspins);
	printf("Number of page outs from paging space=%lld\n",pageinfo[i].pgspouts);
	printf("Number of page scans by clock=%lld\n",pageinfo[i].scans);
	printf("Number of page steals=%lld\n",pageinfo[i].pgsteals);
}
}
The program produces output that is similar to the following output:
Page size in bytes=4096
Number of real memory frames of this page size=572640
Number of pages pinned=143
Number of pages in use=2542
Number of page faults=1613483
Number of pages paged in=1296
Number of pages paged out=58
Number of page ins from paging space=0
Number of page outs from paging space=0
Number of page scans by clock=0
Number of page steals=0
Page size in bytes=65536
Number of real memory frames of this page size=29746
Number of pages pinned=20
Number of pages in use=20
Number of page faults=25294
Number of pages paged in=0
Number of pages paged out=0
Number of page ins from paging space=0
Number of page outs from paging space=0
Number of page scans by clock=0
Number of page steals=0
Page size in bytes=0
Number of real memory frames of this page size=0
Number of pages pinned=0
Number of pages in use=0
Number of page faults=0
Number of pages paged in=0
Number of pages paged out=0
Number of page ins from paging space=0
Number of page outs from paging space=0
Number of page scans by clock=0
Number of page steals=0
Page size in bytes=0
Number of real memory frames of this page size=0
Number of pages pinned=0
Number of pages in use=0
Number of page faults=0
Number of pages paged in=0
Number of pages paged out=0
Number of page ins from paging space=0
Number of page outs from paging space=0
Number of page scans by clock=0
Number of page steals=0
The following code shows an example of how perfstat_memory_page_wpar is used from the WPAR environment:
#include <stdio.h>
#include <stdlib.h>
#include <libperfstat.h>

int main(){
int i, psizes, rc;
perfstat_memory_page_wpar_t *pageinfo;
perfstat_id_wpar_t wparid;
perfstat_psize_t psize;

psize.psize = FIRST_PSIZE;
/* Get the number of page sizes */
psizes = perfstat_memory_page_wpar(&wparid, NULL, NULL, sizeof(perfstat_memory_page_wpar_t),0);
/*check for error */
if (psizes <= 0 ){
    perror("perfstat_memory_page_wpar ");
    exit(-1);
}

/*Allocate enough memory to hold the structures */
pageinfo = (perfstat_memory_page_wpar_t *)calloc(psizes, sizeof(perfstat_memory_page_wpar_t));

/*check for memory allocation */
if (!pageinfo){
   perror("calloc");
   exit(-1);
}

/* call the API and get the data */
rc = perfstat_memory_page_wpar(NULL, &psize, pageinfo , 
sizeof(perfstat_memory_page_wpar_t), psizes);
/* check the return values for any error */
if (rc <= 0){
    perror("perfstat_memory_page_wpar ");
    exit(-1);
}

for(i=0;i<psizes;i++){
	printf("Page size in bytes=%lld\n",pageinfo[i].psize);
	printf("Number of real memory frames of this page size=%lld\n",pageinfo[i].real_total);
	printf("Number of pages pinned=%lld\n",pageinfo[i].real_pinned);
	printf("Number of pages in use=%lld\n",pageinfo[i].real_inuse);
	printf("Number of page faults=%lld\n",pageinfo[i].pgexct);
	printf("Number of pages paged in=%lld\n",pageinfo[i].pgins);
	printf("Number of pages paged out=%lld\n",pageinfo[i].pgouts);
	printf("Number of page ins from paging space=%lld\n",pageinfo[i].pgspins);
	printf("Number of page outs from paging space=%lld\n",pageinfo[i].pgspouts);
	printf("Number of page scans by clock=%lld\n",pageinfo[i].scans);
	printf("Number of page steals=%lld\n",pageinfo[i].pgsteals);
}
}