library: Fix up stat API
Adjusted vmstat to use the new API for memory and CPU statistics
This commit is contained in:
139
vmstat.c
139
vmstat.c
@ -52,6 +52,7 @@
|
||||
#include "proc/version.h"
|
||||
#include <proc/vmstat.h>
|
||||
#include <proc/readstat.h>
|
||||
#include <proc/meminfo.h>
|
||||
|
||||
#define UNIT_B 1
|
||||
#define UNIT_k 1000
|
||||
@ -285,11 +286,10 @@ static void new_format(void)
|
||||
unsigned int tog = 0; /* toggle switch for cleaner code */
|
||||
unsigned int i;
|
||||
unsigned int hz = Hertz;
|
||||
unsigned int running, blocked, dummy_1, dummy_2;
|
||||
jiff cpu_use[2], cpu_nic[2], cpu_sys[2], cpu_idl[2], cpu_iow[2],
|
||||
cpu_xxx[2], cpu_yyy[2], cpu_sto[2];
|
||||
jiff duse, dsys, didl, diow, dstl, Div, divo2;
|
||||
unsigned long pgpgin[2], pgpgout[2], pswpin[2], pswpout[2];
|
||||
unsigned long pgpgin[2], pgpgout[2], pswpin[2] = {0,0}, pswpout[2];
|
||||
unsigned int intr[2], ctxt[2];
|
||||
unsigned int sleep_half;
|
||||
unsigned long kb_per_page = sysconf(_SC_PAGESIZE) / 1024ul;
|
||||
@ -299,10 +299,10 @@ static void new_format(void)
|
||||
char timebuf[32];
|
||||
struct procps_vmstat *vm_info;
|
||||
struct procps_stat_info *sys_info;
|
||||
struct procps_meminfo *mem_info;
|
||||
|
||||
sleep_half = (sleep_time / 2);
|
||||
new_header();
|
||||
meminfo();
|
||||
|
||||
if (procps_vmstat_new(&vm_info) < 0)
|
||||
xerrx(EXIT_FAILURE,
|
||||
@ -316,40 +316,59 @@ static void new_format(void)
|
||||
if (procps_stat_read(sys_info, 0) < 0)
|
||||
xerrx(EXIT_FAILURE,
|
||||
_("Unable to read system stat information"));
|
||||
if (procps_meminfo_new(&mem_info) < 0)
|
||||
xerrx(EXIT_FAILURE,
|
||||
_("Unable to create meminfo structure"));
|
||||
if (procps_meminfo_read(mem_info) < 0)
|
||||
xerrx(EXIT_FAILURE,
|
||||
_("Unable to read meminfo information"));
|
||||
|
||||
if (t_option) {
|
||||
(void) time( &the_time );
|
||||
tm_ptr = localtime( &the_time );
|
||||
strftime(timebuf, sizeof(timebuf), "%Y-%m-%d %H:%M:%S", tm_ptr);
|
||||
}
|
||||
|
||||
duse = procps_stat_get_cpu(sys_info, PROCPS_CPU_USER) +
|
||||
/* Do the intial fill */
|
||||
cpu_use[tog] = procps_stat_get_cpu(sys_info, PROCPS_CPU_USER) +
|
||||
procps_stat_get_cpu(sys_info, PROCPS_CPU_NICE);
|
||||
dsys = procps_stat_get_cpu(sys_info, PROCPS_CPU_SYSTEM) +
|
||||
cpu_sys[tog] = procps_stat_get_cpu(sys_info, PROCPS_CPU_SYSTEM);
|
||||
procps_stat_get_cpu(sys_info, PROCPS_CPU_IRQ) +
|
||||
procps_stat_get_cpu(sys_info, PROCPS_CPU_SIRQ);
|
||||
didl = procps_stat_get_cpu(sys_info, PROCPS_CPU_IDLE);
|
||||
diow = procps_stat_get_cpu(sys_info, PROCPS_CPU_IOWAIT);
|
||||
dstl = procps_stat_get_cpu(sys_info, PROCPS_CPU_STOLEN);
|
||||
Div = duse + dsys + didl + diow + dstl;
|
||||
if (!Div) Div = 1, didl = 1;
|
||||
cpu_idl[tog] = procps_stat_get_cpu(sys_info, PROCPS_CPU_IDLE);
|
||||
cpu_iow[tog] = procps_stat_get_cpu(sys_info, PROCPS_CPU_IOWAIT);
|
||||
cpu_sto[tog] = procps_stat_get_cpu(sys_info, PROCPS_CPU_STOLEN);
|
||||
intr[tog] = procps_stat_get(sys_info, PROCPS_STAT_INTR);
|
||||
ctxt[tog] = procps_stat_get(sys_info, PROCPS_STAT_CTXT);
|
||||
pgpgin[tog] = procps_vmstat_get(vm_info, PROCPS_VMSTAT_PGPGIN);
|
||||
pgpgout[tog] = procps_vmstat_get(vm_info, PROCPS_VMSTAT_PGPGOUT);
|
||||
pswpin[tog] = procps_vmstat_get(vm_info, PROCPS_VMSTAT_PSWPIN);
|
||||
pswpout[tog] = procps_vmstat_get(vm_info, PROCPS_VMSTAT_PSWPOUT);
|
||||
|
||||
Div = cpu_use[tog] + cpu_sys[tog] + cpu_idl[tog] + cpu_iow[tog] + cpu_sto[tog];
|
||||
if (!Div) {
|
||||
Div = 1;
|
||||
cpu_idl[tog] = 1;
|
||||
}
|
||||
divo2 = Div / 2UL;
|
||||
|
||||
printf(w_option ? wide_format : format,
|
||||
running, blocked,
|
||||
unitConvert(kb_swap_used), unitConvert(kb_main_free),
|
||||
unitConvert(a_option?kb_inactive:kb_main_buffers),
|
||||
unitConvert(a_option?kb_active:kb_main_cached),
|
||||
procps_stat_get(sys_info, PROCPS_STAT_PROCS_RUN),
|
||||
procps_stat_get(sys_info, PROCPS_STAT_PROCS_BLK),
|
||||
unitConvert(procps_meminfo_get(mem_info, PROCPS_SWAP_USED)),
|
||||
unitConvert(procps_meminfo_get(mem_info, PROCPS_MEM_FREE)),
|
||||
unitConvert(procps_meminfo_get(mem_info, (a_option?PROCPS_MEM_INACTIVE:PROCPS_MEM_BUFFERS))),
|
||||
unitConvert(procps_meminfo_get(mem_info, a_option?PROCPS_MEM_ACTIVE:PROCPS_MEM_CACHED)),
|
||||
(unsigned)( (unitConvert(procps_vmstat_get(vm_info, PROCPS_VMSTAT_PSWPIN) * kb_per_page) * hz + divo2) / Div ),
|
||||
(unsigned)( (unitConvert(procps_vmstat_get(vm_info, PROCPS_VMSTAT_PSWPOUT) * kb_per_page) * hz + divo2) / Div ),
|
||||
(unsigned)( (procps_vmstat_get(vm_info, PROCPS_VMSTAT_PGPGIN) * hz + divo2) / Div ),
|
||||
(unsigned)( (procps_vmstat_get(vm_info, PROCPS_VMSTAT_PGPGOUT) * hz + divo2) / Div ),
|
||||
(unsigned)( (procps_stat_get(sys_info, PROCPS_STAT_INTERRUPTS) * hz + divo2) / Div ),
|
||||
(unsigned)( (procps_stat_get(sys_info, PROCPS_STAT_CONTEXT) * hz + divo2) / Div ),
|
||||
(unsigned)( (100*duse + divo2) / Div ),
|
||||
(unsigned)( (100*dsys + divo2) / Div ),
|
||||
(unsigned)( (100*didl + divo2) / Div ),
|
||||
(unsigned)( (100*diow + divo2) / Div ),
|
||||
(unsigned)( (100*dstl + divo2) / Div )
|
||||
(unsigned)( (intr[tog] * hz + divo2) / Div ),
|
||||
(unsigned)( (ctxt[tog] * hz + divo2) / Div ),
|
||||
(unsigned)( (100*cpu_use[tog] + divo2) / Div ),
|
||||
(unsigned)( (100*cpu_sys[tog] + divo2) / Div ),
|
||||
(unsigned)( (100*cpu_idl[tog] + divo2) / Div ),
|
||||
(unsigned)( (100*cpu_iow[tog] + divo2) / Div ),
|
||||
(unsigned)( (100*cpu_sto[tog] + divo2) / Div )
|
||||
);
|
||||
|
||||
if (t_option) {
|
||||
@ -365,28 +384,31 @@ static void new_format(void)
|
||||
new_header();
|
||||
tog = !tog;
|
||||
|
||||
meminfo();
|
||||
|
||||
if (procps_stat_read(sys_info,0) < 0)
|
||||
xerrx(EXIT_FAILURE,
|
||||
_("Unable to read system stat information"));
|
||||
cpu_use[tog] = procps_stat_get_cpu(sys_info, PROCPS_CPU_USER);
|
||||
cpu_nic[tog] = procps_stat_get_cpu(sys_info, PROCPS_CPU_NICE);
|
||||
if (procps_vmstat_read(vm_info) < 0)
|
||||
xerrx(EXIT_FAILURE,
|
||||
_("Unable to read vmstat information"));
|
||||
|
||||
cpu_use[tog] = procps_stat_get_cpu(sys_info, PROCPS_CPU_USER) +
|
||||
procps_stat_get_cpu(sys_info, PROCPS_CPU_NICE);
|
||||
cpu_sys[tog] = procps_stat_get_cpu(sys_info, PROCPS_CPU_SYSTEM);
|
||||
procps_stat_get_cpu(sys_info, PROCPS_CPU_IRQ) +
|
||||
procps_stat_get_cpu(sys_info, PROCPS_CPU_SIRQ);
|
||||
cpu_idl[tog] = procps_stat_get_cpu(sys_info, PROCPS_CPU_IDLE);
|
||||
cpu_iow[tog] = procps_stat_get_cpu(sys_info, PROCPS_CPU_IOWAIT);
|
||||
cpu_sto[tog] = procps_stat_get_cpu(sys_info, PROCPS_CPU_STOLEN);
|
||||
|
||||
if (procps_vmstat_read(vm_info) < 0)
|
||||
xerrx(EXIT_FAILURE,
|
||||
_("Unable to read vmstat information"));
|
||||
intr[tog] = procps_stat_get(sys_info, PROCPS_STAT_INTR);
|
||||
ctxt[tog] = procps_stat_get(sys_info, PROCPS_STAT_CTXT);
|
||||
pgpgin[tog] = procps_vmstat_get(vm_info, PROCPS_VMSTAT_PGPGIN);
|
||||
pgpgout[tog] = procps_vmstat_get(vm_info, PROCPS_VMSTAT_PGPGOUT);
|
||||
pswpin[tog] = procps_vmstat_get(vm_info, PROCPS_VMSTAT_PSWPIN);
|
||||
pswpout[tog] = procps_vmstat_get(vm_info, PROCPS_VMSTAT_PSWPOUT);
|
||||
|
||||
if (procps_meminfo_read(mem_info) < 0)
|
||||
xerrx(EXIT_FAILURE,
|
||||
_("Unable to read memory information"));
|
||||
|
||||
if (t_option) {
|
||||
(void) time( &the_time );
|
||||
@ -394,11 +416,8 @@ static void new_format(void)
|
||||
strftime(timebuf, sizeof(timebuf), "%Y-%m-%d %H:%M:%S", tm_ptr);
|
||||
}
|
||||
|
||||
duse =
|
||||
cpu_use[tog] - cpu_use[!tog] + cpu_nic[tog] - cpu_nic[!tog];
|
||||
dsys =
|
||||
cpu_sys[tog] - cpu_sys[!tog] + cpu_xxx[tog] -
|
||||
cpu_xxx[!tog] + cpu_yyy[tog] - cpu_yyy[!tog];
|
||||
duse = cpu_use[tog] - cpu_use[!tog];
|
||||
dsys = cpu_sys[tog] - cpu_sys[!tog];
|
||||
didl = cpu_idl[tog] - cpu_idl[!tog];
|
||||
diow = cpu_iow[tog] - cpu_iow[!tog];
|
||||
dstl = cpu_sto[tog] - cpu_sto[!tog];
|
||||
@ -417,11 +436,14 @@ static void new_format(void)
|
||||
if (!Div) Div = 1, didl = 1;
|
||||
divo2 = Div / 2UL;
|
||||
printf(w_option ? wide_format : format,
|
||||
running,
|
||||
blocked,
|
||||
unitConvert(kb_swap_used),unitConvert(kb_main_free),
|
||||
unitConvert(a_option?kb_inactive:kb_main_buffers),
|
||||
unitConvert(a_option?kb_active:kb_main_cached),
|
||||
procps_stat_get(sys_info, PROCPS_STAT_PROCS_RUN),
|
||||
procps_stat_get(sys_info, PROCPS_STAT_PROCS_BLK),
|
||||
unitConvert(procps_meminfo_get(mem_info, PROCPS_SWAP_USED)),
|
||||
unitConvert(procps_meminfo_get(mem_info, PROCPS_MEM_FREE)),
|
||||
unitConvert(procps_meminfo_get(mem_info,
|
||||
(a_option?PROCPS_MEM_INACTIVE:PROCPS_MEM_BUFFERS))),
|
||||
unitConvert(procps_meminfo_get(mem_info,
|
||||
(a_option?PROCPS_MEM_ACTIVE:PROCPS_MEM_CACHED))),
|
||||
/*si */
|
||||
(unsigned)( ( unitConvert((pswpin [tog] - pswpin [!tog])*kb_per_page)+sleep_half )/sleep_time ),
|
||||
/* so */
|
||||
@ -816,8 +838,7 @@ static void sum_format(void)
|
||||
{
|
||||
struct procps_stat_info *sys_info;
|
||||
struct procps_vmstat *vm_info;
|
||||
|
||||
meminfo();
|
||||
struct procps_meminfo *mem_info;
|
||||
|
||||
if (procps_stat_new(&sys_info) < 0)
|
||||
xerrx(EXIT_FAILURE,
|
||||
@ -832,16 +853,26 @@ static void sum_format(void)
|
||||
xerrx(EXIT_FAILURE,
|
||||
_("Unable to read vmstat information"));
|
||||
|
||||
printf(_("%13lu %s total memory\n"), unitConvert(kb_main_total), szDataUnit);
|
||||
printf(_("%13lu %s used memory\n"), unitConvert(kb_main_used), szDataUnit);
|
||||
printf(_("%13lu %s active memory\n"), unitConvert(kb_active), szDataUnit);
|
||||
printf(_("%13lu %s inactive memory\n"), unitConvert(kb_inactive), szDataUnit);
|
||||
printf(_("%13lu %s free memory\n"), unitConvert(kb_main_free), szDataUnit);
|
||||
printf(_("%13lu %s buffer memory\n"), unitConvert(kb_main_buffers), szDataUnit);
|
||||
printf(_("%13lu %s swap cache\n"), unitConvert(kb_main_cached), szDataUnit);
|
||||
printf(_("%13lu %s total swap\n"), unitConvert(kb_swap_total), szDataUnit);
|
||||
printf(_("%13lu %s used swap\n"), unitConvert(kb_swap_used), szDataUnit);
|
||||
printf(_("%13lu %s free swap\n"), unitConvert(kb_swap_free), szDataUnit);
|
||||
printf(_("%13lu %s total memory\n"), unitConvert(procps_meminfo_get(
|
||||
mem_info, PROCPS_MEM_TOTAL)), szDataUnit);
|
||||
printf(_("%13lu %s used memory\n"), unitConvert(procps_meminfo_get(
|
||||
mem_info, PROCPS_MEM_USED)), szDataUnit);
|
||||
printf(_("%13lu %s active memory\n"), unitConvert(procps_meminfo_get(
|
||||
mem_info, PROCPS_MEM_ACTIVE)), szDataUnit);
|
||||
printf(_("%13lu %s inactive memory\n"), unitConvert(
|
||||
procps_meminfo_get(mem_info, PROCPS_MEM_INACTIVE)), szDataUnit);
|
||||
printf(_("%13lu %s free memory\n"), unitConvert(procps_meminfo_get(
|
||||
mem_info, PROCPS_MEM_FREE)), szDataUnit);
|
||||
printf(_("%13lu %s buffer memory\n"), unitConvert(procps_meminfo_get(
|
||||
mem_info, PROCPS_MEM_BUFFERS)), szDataUnit);
|
||||
printf(_("%13lu %s swap cache\n"), unitConvert(procps_meminfo_get(
|
||||
mem_info, PROCPS_MEM_CACHED)), szDataUnit);
|
||||
printf(_("%13lu %s total swap\n"), unitConvert(procps_meminfo_get(
|
||||
mem_info, PROCPS_SWAP_TOTAL)), szDataUnit);
|
||||
printf(_("%13lu %s used swap\n"), unitConvert(procps_meminfo_get(
|
||||
mem_info, PROCPS_SWAP_USED)), szDataUnit);
|
||||
printf(_("%13lu %s free swap\n"), unitConvert(procps_meminfo_get(
|
||||
mem_info, PROCPS_SWAP_FREE)), szDataUnit);
|
||||
printf(_("%13lld non-nice user cpu ticks\n"), procps_stat_get_cpu(sys_info, PROCPS_CPU_USER));
|
||||
printf(_("%13lld nice user cpu ticks\n"), procps_stat_get_cpu(sys_info, PROCPS_CPU_NICE));
|
||||
printf(_("%13lld system cpu ticks\n"), procps_stat_get_cpu(sys_info, PROCPS_CPU_SYSTEM));
|
||||
@ -856,8 +887,8 @@ static void sum_format(void)
|
||||
printf(_("%13lu pages paged out\n"), procps_vmstat_get(vm_info, PROCPS_VMSTAT_PGPGOUT));
|
||||
printf(_("%13lu pages swapped in\n"), procps_vmstat_get(vm_info, PROCPS_VMSTAT_PSWPIN));
|
||||
printf(_("%13lu pages swapped out\n"), procps_vmstat_get(vm_info, PROCPS_VMSTAT_PSWPOUT));
|
||||
printf(_("%13u interrupts\n"), procps_stat_get(sys_info, PROCPS_STAT_INTERRUPTS));
|
||||
printf(_("%13u CPU context switches\n"), procps_stat_get(sys_info, PROCPS_STAT_CONTEXT));
|
||||
printf(_("%13u interrupts\n"), procps_stat_get(sys_info, PROCPS_STAT_INTR));
|
||||
printf(_("%13u CPU context switches\n"), procps_stat_get(sys_info, PROCPS_STAT_CTXT));
|
||||
printf(_("%13u boot time\n"), procps_stat_get(sys_info, PROCPS_STAT_BTIME));
|
||||
printf(_("%13u forks\n"), procps_stat_get(sys_info, PROCPS_STAT_PROCS));
|
||||
}
|
||||
|
Reference in New Issue
Block a user