summaryrefslogtreecommitdiffstats
path: root/usr.bin/systat/vmstat.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/systat/vmstat.c')
-rw-r--r--usr.bin/systat/vmstat.c234
1 files changed, 118 insertions, 116 deletions
diff --git a/usr.bin/systat/vmstat.c b/usr.bin/systat/vmstat.c
index f9bdc17..7779de3 100644
--- a/usr.bin/systat/vmstat.c
+++ b/usr.bin/systat/vmstat.c
@@ -74,7 +74,43 @@ static const char rcsid[] =
static struct Info {
long time[CPUSTATES];
- struct vmmeter Cnt;
+ u_int v_swtch; /* context switches */
+ u_int v_trap; /* calls to trap */
+ u_int v_syscall; /* calls to syscall() */
+ u_int v_intr; /* device interrupts */
+ u_int v_soft; /* software interrupts */
+ /*
+ * Virtual memory activity.
+ */
+ u_int v_vm_faults; /* number of address memory faults */
+ u_int v_cow_faults; /* number of copy-on-writes */
+ u_int v_zfod; /* pages zero filled on demand */
+ u_int v_ozfod; /* optimized zero fill pages */
+ u_int v_swapin; /* swap pager pageins */
+ u_int v_swapout; /* swap pager pageouts */
+ u_int v_swappgsin; /* swap pager pages paged in */
+ u_int v_swappgsout; /* swap pager pages paged out */
+ u_int v_vnodein; /* vnode pager pageins */
+ u_int v_vnodeout; /* vnode pager pageouts */
+ u_int v_vnodepgsin; /* vnode_pager pages paged in */
+ u_int v_vnodepgsout; /* vnode pager pages paged out */
+ u_int v_intrans; /* intransit blocking page faults */
+ u_int v_reactivated; /* number of pages reactivated from free list */
+ u_int v_pdwakeups; /* number of times daemon has awaken from sleep */
+ u_int v_pdpages; /* number of pages analyzed by daemon */
+
+ u_int v_dfree; /* pages freed by daemon */
+ u_int v_pfree; /* pages freed by exiting processes */
+ u_int v_tfree; /* total pages freed */
+ /*
+ * Distribution of page usages.
+ */
+ u_int v_page_size; /* page size in bytes */
+ u_int v_free_count; /* number of pages free */
+ u_int v_wire_count; /* number of pages wired down */
+ u_int v_active_count; /* number of pages active */
+ u_int v_inactive_count; /* number of pages inactive */
+ u_int v_cache_count; /* number of pages on buffer cache queue */
struct vmtotal Total;
struct nchstats nchstats;
long nchcount;
@@ -88,8 +124,6 @@ static struct Info {
struct statinfo cur, last, run;
-#define cnt s.Cnt
-#define oldcnt s1.Cnt
#define total s.Total
#define nchtotal s.nchstats
#define oldnchtotal s1.nchstats
@@ -142,21 +176,6 @@ closekre(w)
wrefresh(w);
}
-
-static struct nlist namelist[] = {
-#define X_CNT 0
- { "_cnt" },
-#define X_INTRNAMES 1
- { "_intrnames" },
-#define X_EINTRNAMES 2
- { "_eintrnames" },
-#define X_INTRCNT 3
- { "_intrcnt" },
-#define X_EINTRCNT 4
- { "_eintrcnt" },
- { "" },
-};
-
/*
* These constants define where the major pieces are laid out
*/
@@ -191,18 +210,7 @@ initkre()
char *intrnamebuf, *cp;
int i;
- if (namelist[0].n_type == 0) {
- if (kvm_nlist(kd, namelist)) {
- nlisterr(namelist);
- return(0);
- }
- if (namelist[0].n_type == 0) {
- error("No namelist");
- return(0);
- }
- }
-
- if (num_devices = getnumdevs() < 0) {
+ if ((num_devices = getnumdevs()) < 0) {
warnx("%s", devstat_errbuf);
return(0);
}
@@ -218,14 +226,13 @@ initkre()
return(0);
if (nintr == 0) {
- nintr = (namelist[X_EINTRCNT].n_value -
- namelist[X_INTRCNT].n_value) / sizeof (long);
+ GETSYSCTL("hw.nintr", nintr);
intrloc = calloc(nintr, sizeof (long));
intrname = calloc(nintr, sizeof (long));
- intrnamebuf = malloc(namelist[X_EINTRNAMES].n_value -
- namelist[X_INTRNAMES].n_value);
- if (intrnamebuf == 0 || intrname == 0 || intrloc == 0) {
- error("Out of memory\n");
+ intrnamebuf = sysctl_dynread("hw.intrnames", NULL);
+ if (intrnamebuf == NULL || intrname == NULL ||
+ intrloc == NULL) {
+ error("Out of memory");
if (intrnamebuf)
free(intrnamebuf);
if (intrname)
@@ -235,8 +242,6 @@ initkre()
nintr = 0;
return(0);
}
- NREAD(X_INTRNAMES, intrnamebuf, NVAL(X_EINTRNAMES) -
- NVAL(X_INTRNAMES));
for (cp = intrnamebuf, i = 0; i < nintr; i++) {
intrname[i] = cp;
cp += strlen(cp) + 1;
@@ -453,7 +458,7 @@ showkre()
putfloat(avenrun[1], STATROW, STATCOL + 23, 6, 2, 0);
putfloat(avenrun[2], STATROW, STATCOL + 29, 6, 2, 0);
mvaddstr(STATROW, STATCOL + 53, buf);
-#define pgtokb(pg) ((pg) * cnt.v_page_size / 1024)
+#define pgtokb(pg) ((pg) * s.v_page_size / 1024)
putint(pgtokb(total.t_arm), MEMROW + 2, MEMCOL + 3, 8);
putint(pgtokb(total.t_armshr), MEMROW + 2, MEMCOL + 11, 8);
putint(pgtokb(total.t_avm), MEMROW + 2, MEMCOL + 19, 9);
@@ -469,34 +474,34 @@ showkre()
putint(total.t_sl, PROCSROW + 1, PROCSCOL + 12, 3);
putint(total.t_sw, PROCSROW + 1, PROCSCOL + 15, 3);
if (extended_vm_stats == 0) {
- PUTRATE(Cnt.v_zfod, VMSTATROW + 0, VMSTATCOL + 4, 5);
+ PUTRATE(v_zfod, VMSTATROW + 0, VMSTATCOL + 4, 5);
}
- PUTRATE(Cnt.v_cow_faults, VMSTATROW + 1, VMSTATCOL + 3, 6);
- putint(pgtokb(cnt.v_wire_count), VMSTATROW + 2, VMSTATCOL, 9);
- putint(pgtokb(cnt.v_active_count), VMSTATROW + 3, VMSTATCOL, 9);
- putint(pgtokb(cnt.v_inactive_count), VMSTATROW + 4, VMSTATCOL, 9);
- putint(pgtokb(cnt.v_cache_count), VMSTATROW + 5, VMSTATCOL, 9);
- putint(pgtokb(cnt.v_free_count), VMSTATROW + 6, VMSTATCOL, 9);
- PUTRATE(Cnt.v_dfree, VMSTATROW + 7, VMSTATCOL, 9);
- PUTRATE(Cnt.v_pfree, VMSTATROW + 8, VMSTATCOL, 9);
- PUTRATE(Cnt.v_reactivated, VMSTATROW + 9, VMSTATCOL, 9);
- PUTRATE(Cnt.v_pdwakeups, VMSTATROW + 10, VMSTATCOL, 9);
- PUTRATE(Cnt.v_pdpages, VMSTATROW + 11, VMSTATCOL, 9);
- PUTRATE(Cnt.v_intrans, VMSTATROW + 12, VMSTATCOL, 9);
+ PUTRATE(v_cow_faults, VMSTATROW + 1, VMSTATCOL + 3, 6);
+ putint(pgtokb(s.v_wire_count), VMSTATROW + 2, VMSTATCOL, 9);
+ putint(pgtokb(s.v_active_count), VMSTATROW + 3, VMSTATCOL, 9);
+ putint(pgtokb(s.v_inactive_count), VMSTATROW + 4, VMSTATCOL, 9);
+ putint(pgtokb(s.v_cache_count), VMSTATROW + 5, VMSTATCOL, 9);
+ putint(pgtokb(s.v_free_count), VMSTATROW + 6, VMSTATCOL, 9);
+ PUTRATE(v_dfree, VMSTATROW + 7, VMSTATCOL, 9);
+ PUTRATE(v_pfree, VMSTATROW + 8, VMSTATCOL, 9);
+ PUTRATE(v_reactivated, VMSTATROW + 9, VMSTATCOL, 9);
+ PUTRATE(v_pdwakeups, VMSTATROW + 10, VMSTATCOL, 9);
+ PUTRATE(v_pdpages, VMSTATROW + 11, VMSTATCOL, 9);
+ PUTRATE(v_intrans, VMSTATROW + 12, VMSTATCOL, 9);
if (extended_vm_stats) {
- PUTRATE(Cnt.v_zfod, VMSTATROW + 11, VMSTATCOL - 16, 9);
- PUTRATE(Cnt.v_ozfod, VMSTATROW + 12, VMSTATCOL - 16, 9);
+ PUTRATE(v_zfod, VMSTATROW + 11, VMSTATCOL - 16, 9);
+ PUTRATE(v_ozfod, VMSTATROW + 12, VMSTATCOL - 16, 9);
putint(
- ((s.Cnt.v_ozfod < s.Cnt.v_zfod) ?
- s.Cnt.v_ozfod * 100 / s.Cnt.v_zfod :
+ ((s.v_ozfod < s.v_zfod) ?
+ s.v_ozfod * 100 / s.v_zfod :
0
),
VMSTATROW + 13,
VMSTATCOL - 16,
9
);
- PUTRATE(Cnt.v_tfree, VMSTATROW + 14, VMSTATCOL - 16, 9);
+ PUTRATE(v_tfree, VMSTATROW + 14, VMSTATCOL - 16, 9);
}
putint(s.bufspace/1024, VMSTATROW + 13, VMSTATCOL, 9);
@@ -504,20 +509,20 @@ showkre()
putint(s.desiredvnodes, VMSTATROW + 15, VMSTATCOL, 9);
putint(s.numvnodes, VMSTATROW + 16, VMSTATCOL, 9);
putint(s.freevnodes, VMSTATROW + 17, VMSTATCOL, 9);
- PUTRATE(Cnt.v_vnodein, PAGEROW + 2, PAGECOL + 5, 5);
- PUTRATE(Cnt.v_vnodeout, PAGEROW + 2, PAGECOL + 10, 5);
- PUTRATE(Cnt.v_swapin, PAGEROW + 2, PAGECOL + 17, 5);
- PUTRATE(Cnt.v_swapout, PAGEROW + 2, PAGECOL + 22, 5);
- PUTRATE(Cnt.v_vnodepgsin, PAGEROW + 3, PAGECOL + 5, 5);
- PUTRATE(Cnt.v_vnodepgsout, PAGEROW + 3, PAGECOL + 10, 5);
- PUTRATE(Cnt.v_swappgsin, PAGEROW + 3, PAGECOL + 17, 5);
- PUTRATE(Cnt.v_swappgsout, PAGEROW + 3, PAGECOL + 22, 5);
- PUTRATE(Cnt.v_swtch, GENSTATROW + 1, GENSTATCOL, 5);
- PUTRATE(Cnt.v_trap, GENSTATROW + 1, GENSTATCOL + 5, 5);
- PUTRATE(Cnt.v_syscall, GENSTATROW + 1, GENSTATCOL + 10, 5);
- PUTRATE(Cnt.v_intr, GENSTATROW + 1, GENSTATCOL + 15, 5);
- PUTRATE(Cnt.v_soft, GENSTATROW + 1, GENSTATCOL + 20, 5);
- PUTRATE(Cnt.v_vm_faults, GENSTATROW + 1, GENSTATCOL + 25, 5);
+ PUTRATE(v_vnodein, PAGEROW + 2, PAGECOL + 5, 5);
+ PUTRATE(v_vnodeout, PAGEROW + 2, PAGECOL + 10, 5);
+ PUTRATE(v_swapin, PAGEROW + 2, PAGECOL + 17, 5);
+ PUTRATE(v_swapout, PAGEROW + 2, PAGECOL + 22, 5);
+ PUTRATE(v_vnodepgsin, PAGEROW + 3, PAGECOL + 5, 5);
+ PUTRATE(v_vnodepgsout, PAGEROW + 3, PAGECOL + 10, 5);
+ PUTRATE(v_swappgsin, PAGEROW + 3, PAGECOL + 17, 5);
+ PUTRATE(v_swappgsout, PAGEROW + 3, PAGECOL + 22, 5);
+ PUTRATE(v_swtch, GENSTATROW + 1, GENSTATCOL, 5);
+ PUTRATE(v_trap, GENSTATROW + 1, GENSTATCOL + 5, 5);
+ PUTRATE(v_syscall, GENSTATROW + 1, GENSTATCOL + 10, 5);
+ PUTRATE(v_intr, GENSTATROW + 1, GENSTATCOL + 15, 5);
+ PUTRATE(v_soft, GENSTATROW + 1, GENSTATCOL + 20, 5);
+ PUTRATE(v_vm_faults, GENSTATROW + 1, GENSTATCOL + 25, 5);
mvprintw(DISKROW, DISKCOL + 5, " ");
for (i = 0, c = 0; i < num_devices && c < MAXDRIVES; i++)
if (dev_select[i].selected) {
@@ -721,51 +726,48 @@ getinfo(s, st)
enum state st;
{
struct devinfo *tmp_dinfo;
- size_t len, size;
- int mib[2], err;
-
- len = sizeof(s->time);
- err = sysctlbyname("kern.cp_time", &s->time, &len, NULL, 0);
- if (err || len != sizeof(s->time))
- perror("kern.cp_time");
-
- len = sizeof(cur.cp_time);
- err = sysctlbyname("kern.cp_time", &cur.cp_time, &len, NULL, 0);
- if (err || len != sizeof(cur.cp_time))
- perror("kern.cp_time");
-
- NREAD(X_CNT, &s->Cnt, sizeof s->Cnt);
-
- len = sizeof(s->bufspace);
- err = sysctlbyname("vfs.bufspace", &s->bufspace, &len, NULL, 0);
- if (err || len != sizeof(s->bufspace))
- perror("vfs.bufspace");
-
- len = sizeof(s->desiredvnodes);
- err = sysctlbyname("kern.maxvnodes", &s->desiredvnodes, &len, NULL, 0);
- if (err || len != sizeof(s->desiredvnodes))
- perror("kern.maxvnodes");
-
- len = sizeof(s->numvnodes);
- err = sysctlbyname("debug.numvnodes", &s->numvnodes, &len, NULL, 0);
- if (err || len != sizeof(s->numvnodes))
- perror("debug.numvnodes");
-
- len = sizeof(s->freevnodes);
- err = sysctlbyname("debug.freevnodes", &s->freevnodes, &len, NULL, 0);
- if (err || len != sizeof(s->freevnodes))
- perror("debug.freevnodes");
-
- len = sizeof(s->nchstats);
- err = sysctlbyname("vfs.cache.nchstats", &s->nchstats, &len, NULL, 0);
- if (err || len != sizeof(s->nchstats))
- perror("vfs.cache.nchstats");
-
- NREAD(X_INTRCNT, s->intrcnt, nintr * LONG);
-
- len = sizeof(s->numdirtybuffers);
- err = sysctlbyname("vfs.numdirtybuffers", &s->numdirtybuffers, &len,
- NULL, 0);
+ size_t size;
+ int mib[2];
+
+ GETSYSCTL("kern.cp_time", s->time);
+ GETSYSCTL("kern.cp_time", cur.cp_time);
+ GETSYSCTL("vm.stats.sys.v_swtch", s->v_swtch);
+ GETSYSCTL("vm.stats.sys.v_trap", s->v_trap);
+ GETSYSCTL("vm.stats.sys.v_syscall", s->v_syscall);
+ GETSYSCTL("vm.stats.sys.v_intr", s->v_intr);
+ GETSYSCTL("vm.stats.sys.v_soft", s->v_soft);
+ GETSYSCTL("vm.stats.vm.v_vm_faults", s->v_vm_faults);
+ GETSYSCTL("vm.stats.vm.v_cow_faults", s->v_cow_faults);
+ GETSYSCTL("vm.stats.vm.v_zfod", s->v_zfod);
+ GETSYSCTL("vm.stats.vm.v_ozfod", s->v_ozfod);
+ GETSYSCTL("vm.stats.vm.v_swapin", s->v_swapin);
+ GETSYSCTL("vm.stats.vm.v_swapout", s->v_swapout);
+ GETSYSCTL("vm.stats.vm.v_swappgsin", s->v_swappgsin);
+ GETSYSCTL("vm.stats.vm.v_swappgsout", s->v_swappgsout);
+ GETSYSCTL("vm.stats.vm.v_vnodein", s->v_vnodein);
+ GETSYSCTL("vm.stats.vm.v_vnodeout", s->v_vnodeout);
+ GETSYSCTL("vm.stats.vm.v_vnodepgsin", s->v_vnodepgsin);
+ GETSYSCTL("vm.stats.vm.v_vnodepgsout", s->v_vnodepgsout);
+ GETSYSCTL("vm.stats.vm.v_intrans", s->v_intrans);
+ GETSYSCTL("vm.stats.vm.v_reactivated", s->v_reactivated);
+ GETSYSCTL("vm.stats.vm.v_pdwakeups", s->v_pdwakeups);
+ GETSYSCTL("vm.stats.vm.v_pdpages", s->v_pdpages);
+ GETSYSCTL("vm.stats.vm.v_dfree", s->v_dfree);
+ GETSYSCTL("vm.stats.vm.v_pfree", s->v_pfree);
+ GETSYSCTL("vm.stats.vm.v_tfree", s->v_tfree);
+ GETSYSCTL("vm.stats.vm.v_page_size", s->v_page_size);
+ GETSYSCTL("vm.stats.vm.v_free_count", s->v_free_count);
+ GETSYSCTL("vm.stats.vm.v_wire_count", s->v_wire_count);
+ GETSYSCTL("vm.stats.vm.v_active_count", s->v_active_count);
+ GETSYSCTL("vm.stats.vm.v_inactive_count", s->v_inactive_count);
+ GETSYSCTL("vm.stats.vm.v_cache_count", s->v_cache_count);
+ GETSYSCTL("vfs.bufspace", s->bufspace);
+ GETSYSCTL("kern.maxvnodes", s->desiredvnodes);
+ GETSYSCTL("debug.numvnodes", s->numvnodes);
+ GETSYSCTL("debug.freevnodes", s->freevnodes);
+ GETSYSCTL("vfs.cache.nchstats", s->nchstats);
+ GETSYSCTL("vfs.numdirtybuffers", s->numdirtybuffers);
+ getsysctl("hw.intrcnt", s->intrcnt, nintr * LONG);
size = sizeof(s->Total);
mib[0] = CTL_VM;
OpenPOWER on IntegriCloud