perfstat_cpu_total_rset interface

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

Selected fields from the perfstat_cpu_t structure include:

Item Descriptor
processorHz Processor speed in Hertz (from ODM)
description Processor type (from ODM)
CPUs Current number of active processors
ncpus_cfg Number of configured processors (maximum number of processors that this copy of AIX® can handle simultaneously)
ncpus_high Maximum number of active processors; that is, the maximum number of active processors since the last reboot
User Total number of clock ticks spent in user mode
Sys Total number of clock ticks spent in system (kernel) mode
Idle Total number of clock ticks spent idle with no I/O pending
Wait Total number of clock ticks spent idle with I/O pending

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

The following code shows an example of how the perfstat_cpu_total_rset interface is used from the global environment:
#include <stdio.h>
#include <stdlib.h>
#include <libperfstat.h>
int main(){
    perfstat_cpu_total_t *cpustats;
    perfstat_id_wpar_t wparid;
    int rc,i;
    wparid.spec = WPARNAME;
  
    rc =  perfstat_cpu_total_rset(NULL,NULL,sizeof(perfstat_cpu_total_t),0); 
    if (rc <= 0) {
        perror("perfstat_cpu_total_rset");
        exit(-1);
    }

    cpustats=calloc(rc,sizeof(perfstat_cpu_total_t));
    if(cpustats==NULL){
       perror("MALLOC error:");
       exit(-1);
    }

    strcpy(wparid.u.wparname,"test");
    rc =  perfstat_cpu_total_rset(&wparid, cpustats, sizeof(perfstat_cpu_total_t), rc);

    if (rc <= 0) {
        perror("perfstat_cpu_total_rset");
        exit(-1);
    }
    for(i=0;i<rc;i++){
    printf("Number of active logical processors=%d\n",cpustats[i].ncpus);
    printf("Number of configured processors=%d\n",cpustats[i].ncpus_cfg);
    printf("Processor description=%s\n",cpustats[i].description);
    printf("Processor speed in Hz=%lld\n",cpustats[i].processorHZ);
    printf("Raw total number of clock ticks spent in user mode=%lld\n",cpustats[i].user);
    printf("Raw total number of clock ticks spent in system mode=%lld\n",cpustats[i].sys);
    printf("Raw total number of clock ticks spent idle=%lld\n",cpustats[i].idle);
    printf("Raw total number of clock ticks spent wait=%lld\n",cpustats[i].wait);
    }
    return 0;
}
The program produces output that is similar to the following output:
Number of active logical processors=8
Number of configured processors=8
Processor description=PowerPC_POWER7
Processor speed in Hz=3304000000
Raw total number of clock ticks spent in user mode=86400
Raw total number of clock ticks spent in system mode=30636100
Raw total number of clock ticks spent idle=2826632699
Raw total number of clock ticks spent wait=852000
The following code shows an example of how perfstat_cpu_total_rset is used from the WPAR environment:
#include <stdio.h>
#include <stdlib.h>
#include <libperfstat.h>
int main(){
    perfstat_cpu_total_t *cpustats;
    perfstat_id_wpar_t wparid;
    int rc,i;
      
    rc =  perfstat_cpu_total_rset(NULL,NULL,sizeof(perfstat_cpu_total_t),0); 
    if (rc <= 0) {
        perror("perfstat_cpu_total_rset");
        exit(-1);
    }

    cpustats=calloc(rc,sizeof(perfstat_cpu_total_t));
    if(cpustats==NULL){
       perror("MALLOC error:");
       exit(-1);
    }

    rc =  perfstat_cpu_total_rset(NULL, cpustats, sizeof(perfstat_cpu_total_t), rc);

    if (rc <= 0) {
        perror("perfstat_cpu_total_rset");
        exit(-1);
    }
    for(i=0;i<rc;i++){
    printf("Number of active logical processors=%d\n",cpustats[i].ncpus);
    printf("Number of configured processors=%d\n",cpustats[i].ncpus_cfg);
    printf("Processor description=%s\n",cpustats[i].description);
    printf("Processor speed in Hz=%lld\n",cpustats[i].processorHZ);
    printf("Raw total number of clock ticks spent in user mode=%lld\n",cpustats[i].user);
    printf("Raw total number of clock ticks spent in system mode=%lld\n",cpustats[i].sys);
    printf("Raw total number of clock ticks spent idle=%lld\n",cpustats[i].idle);
    printf("Raw total number of clock ticks spent wait=%lld\n",cpustats[i].wait);
    }
    return 0;
}