perfstat_process interfaces

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

The field of the perfstat_process_t structure includes:
Item Descriptor
pid Process ID
proc_name Name of the process
proc_priority Priority of the process
num_threads Thread count
proc_uid Information of the owner
proc_classid WLM class name
proc_size Virtual size of the process
proc_real_mem_data Real memory used for the data in kilobytes
proc_real_mem_text Real memory used for text in kilobytes
proc_virt_mem_data Virtual memory used for data in kilobytes
proc_virt_mem_text Virtual memory used for text in kilobytes
shared_lib_data_size Data size from shared library in kilobytes
heap_size Heap size in kilobytes
real_inuse The real memory in kilobytes used by the process including the segments
virt_inuse The virtual memory in kilobytes used by the process including the segments
pinned Pinned memory in kilobytes used for the process that is inclusive of all segments
pgsp_inuse Paging space in kilobytes uses inclusive of all segments
filepages File pages in kilobytes used including shared pages
real_inuse_map Real memory in kilobytes used for shared memory and memory mapped regions
virt_inuse_map Virtual memory in kilobytes used for shared memory and memory mapped regions
pinned_inuse_map Pinned memory in kilobytes for shared memory and memory mapped regions
ucpu_time User mode CPU time in milliseconds
scpu_time System mode CPU time in milliseconds
last_timebase Timebase counter
inBytes Bytes read from the disk
outBytes Bytes written to the disk
inOps In operations from disk
outOps Out operations from disk
The following is an example of code for the perfstat_process API:
#include <libperfstat.h>

void main()
{
  perfstat_process_t *proct;
  perfstat_id_t id;
  int i,rc,proc_count;

  /* Get the count of processes */
  proc_count = perfstat_process(NULL, NULL,sizeof(perfstat_process_t),0);

  /* check for error */
  if(proc_count <= 0)
  {
    perror("Error in perfstat_process");
    exit(-1) ;
  }
  printf("Number of Processes = %d\n",proc_count);

  /* Allocate enough memory */
  proct = (perfstat_process_t *)calloc(proc_count,sizeof(perfstat_process_t));
  if(proct == NULL)
  {
    perror("Memory Allocation Error");
    exit(-1) ;
  }

  strcpy(id.name,"");
  rc = perfstat_process(&id,proct,sizeof(perfstat_process_t),proc_count); 
  if(rc <= 0) 
  { 
    perror("Error in perfstat_process"); 
    exit(-1) ; 
  } 

  printf("\n =======Process Related metrics =======\n"); 
  for(i=0 ; i<proc_count ;i++)
  {
    printf("Process Name =                     %s\n",proct[i].proc_name);
    printf("Process ID =                       %lld\n",proct[i].pid);
    printf("Process priority =                 %d\n",proct[i].proc_priority);
    printf("Thread Count =                     %lld\n",proct[i].num_threads); 
    printf("\nCredential Information\n");
    printf("Owner Info =                       %lld\n",proct[i].proc_uid);
    printf("WLM Class Name =                   %lld\n",proct[i].proc_classid);
    printf("\nMemory Related Statistics \n");
    printf("Process Virtual Size =             %lld KB \n",proct[i].proc_size);
    printf("Real Memory used for Data =        %lld KB \n",proct[i].proc_real_mem_data);
    printf("Real Memory used for Text =        %lld KB \n",proct[i].proc_real_mem_text);
    printf("Virtual Memory used for Data =     %lld KB \n",proct[i].proc_virt_mem_data);
    printf("Virtual Memory used for Text =     %lld KB \n",proct[i].proc_virt_mem_text);
    printf("Data Size from Shared Library =    %lld KB \n",proct[i].shared_lib_data_size);
    printf("Heap Size =                        %lld KB \n",proct[i].heap_size);
    printf("Real memory in use by process =    %lld KB \n",proct[i].real_inuse);
    printf("Virtual memory in use by process=  %lld KB \n",proct[i].virt_inuse);
    printf("Pinned Memory for this process =   %lld KB \n",proct[i].pinned);
    printf("Paging Space in use =              %lld KB \n",proct[i].pgsp_inuse);
    printf("File Pages used =                  %lld KB \n",proct[i].filepages);
    printf("Real memory used for Shared Memory and Memory Mapped regions =%lld KB \n", proct[i].real_inuse_map);
    printf("Virtual Memory used for Shared Memory and Memory Mapped regions =%lld KB \n", proct[i].virt_inuse_map);
    printf("Pinned memory for Shared Memory and Memory Mapped regions =%lld KB \n", proct[i].pinned_inuse_map);
    printf("\nCPU Related Statistics \n");
    printf("User Mode CPU time =               %lf ms\n",proct[i].ucpu_time);
    printf("System Mode CPU time =             %lf ms\n",proct[i].scpu_time);
    printf("Timebase Counter =                 %lld\n", proct[i].last_timebase);
    printf("\nDisk Related Statistics \n");
    printf("Bytes Written to Disk =            %lld\n",proct[i].inBytes);
    printf("Bytes Read from Disk =             %lld\n",proct[i].outBytes);
    printf("In Operations from Disk =          %lld\n",proct[i].inOps);
    printf("Out Operations from Disk =         %lld\n",proct[i].outOps);
    printf("=====================================\n");
    printf("\n\n");
    }
}

The program produces the output similar to the following:

Number of Processes = 77

 =======Process Related metrics =======
Process Name =                     swapper
Process ID =                       0
Process priority =                 16
Thread Count =                     0

Credential Information
Owner Info =                       0
WLM Class Name =                   257

Memory Related Statistics
Process Virtual Size =             384 KB
Real Memory used for Data =        384 KB
Real Memory used for Text =        0 KB
Virtual Memory used for Data =     384 KB
Virtual Memory used for Text =     0 KB
Data Size from Shared Library =    0 KB
Heap Size =                        0 KB
Real memory in use by process =    384 KB
Virtual memory in use by process=  384 KB
Pinned Memory for this process =   320 KB
Paging Space in use =              0 KB
File Pages used =                  0 KB
Real memory used for Shared Memory and Memory Mapped regions =0 KB
Virtual Memory used for Shared Memory and Memory Mapped regions =0 KB
Pinned memory for Shared Memory and Memory Mapped regions =0 KB

CPU Related Statistics
User Mode CPU time =               0.000000 ms
System Mode CPU time =             9262.345828 ms
Timebase Counter =                 7290723200327369

Disk Related Statistics
Bytes Written to Disk =            0
Bytes Read from Disk =             32768
In Operations from Disk =          0
Out Operations from Disk =         8
=====================================
The program displays an output that is similar to the following example output:
Number of Processes = 77

 =======Process Related metrics =======
Process Name =                     swapper
Process ID =                       0
Process priority =                 16
Thread Count =                     0

Credential Information
Owner Info =                       0
WLM Class Name =                   257

Memory Related Statistics
Process Virtual Size =             384 KB
Real Memory used for Data =        384 KB
Real Memory used for Text =        0 KB
Virtual Memory used for Data =     384 KB
Virtual Memory used for Text =     0 KB
Data Size from Shared Library =    0 KB
Heap Size =                        0 KB
Real memory in use by process =    384 KB
Virtual memory in use by process=  384 KB
Pinned Memory for this process =   320 KB
Paging Space in use =              0 KB
File Pages used =                  0 KB
Real memory used for Shared Memory and Memory Mapped regions =0 KB
Virtual Memory used for Shared Memory and Memory Mapped regions =0 KB
Pinned memory for Shared Memory and Memory Mapped regions =0 KB

CPU Related Statistics
User Mode CPU time =               0.000000 ms
System Mode CPU time =             9262.345828 ms
Timebase Counter =                 7290723200327369

Disk Related Statistics
Bytes Written to Disk =            0
Bytes Read from Disk =             32768
In Operations from Disk =          0
Out Operations from Disk =         8
=====================================