socsvn commit: r269835 - soc2014/zkorchev/freebsd_head/usr.bin/vmstat
zkorchev at FreeBSD.org
zkorchev at FreeBSD.org
Sat Jun 21 23:30:33 UTC 2014
Author: zkorchev
Date: Sat Jun 21 23:30:31 2014
New Revision: 269835
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=269835
Log:
vmstat fixes
Modified:
soc2014/zkorchev/freebsd_head/usr.bin/vmstat/vmstat.8
soc2014/zkorchev/freebsd_head/usr.bin/vmstat/vmstat.c
Modified: soc2014/zkorchev/freebsd_head/usr.bin/vmstat/vmstat.8
==============================================================================
--- soc2014/zkorchev/freebsd_head/usr.bin/vmstat/vmstat.8 Sat Jun 21 23:30:10 2014 (r269834)
+++ soc2014/zkorchev/freebsd_head/usr.bin/vmstat/vmstat.8 Sat Jun 21 23:30:31 2014 (r269835)
@@ -116,8 +116,6 @@
by type.
.It Fl n
Change the maximum number of disks to display from the default of 2.
-.It Fl O
-Output the results in JSON format.
.It Fl P
Report per-cpu system/user/idle cpu statistics.
.It Fl p
Modified: soc2014/zkorchev/freebsd_head/usr.bin/vmstat/vmstat.c
==============================================================================
--- soc2014/zkorchev/freebsd_head/usr.bin/vmstat/vmstat.c Sat Jun 21 23:30:10 2014 (r269834)
+++ soc2014/zkorchev/freebsd_head/usr.bin/vmstat/vmstat.c Sat Jun 21 23:30:31 2014 (r269835)
@@ -75,8 +75,9 @@
#include <time.h>
#include <unistd.h>
#include <libutil.h>
-
-#include "sol.h"
+#if defined(SOL_ON)
+# include <sol.h>
+#endif
/*
* Upward approximation of the maximum number of characters needed to
@@ -146,7 +147,7 @@
static int nflag;
static int Pflag;
static int hflag;
-static int Oflag;
+static int sol_format;
static kvm_t *kd;
@@ -234,13 +235,6 @@
errx(1, "number of devices %d is < 0",
maxshowdevs);
break;
- case 'O':
-#if defined(SOL_ON)
- Oflag = 1;
-#else
- errx(1, "vmstat compiled without -O support");
-#endif
- break;
case 'p':
if (devstat_buildmatch(optarg, &matches, &num_matches) != 0)
errx(1, "%s", devstat_errbuf);
@@ -327,7 +321,7 @@
interval = 1 * 1000;
#if defined(SOL_ON)
- if (Oflag) sol_init(&sol_stream, SOL_JSON);
+ sol_format = sol_init(&sol_stream);
#endif
if (todo & FORKSTAT)
@@ -348,7 +342,7 @@
dovmstat(interval, reps);
#if defined(SOL_ON)
- if (Oflag) sol_term(&sol_stream);
+ if (sol_format) sol_term(&sol_stream);
#endif
exit(0);
@@ -660,7 +654,7 @@
len = humanize_number(buf, size, val, "", HN_AUTOSCALE, flags);
#if defined(SOL_ON)
- if (Oflag)
+ if (sol_format)
sol_string(&sol_stream, buf, len);
else
#endif
@@ -683,6 +677,9 @@
int ncpus, maxid;
u_long cpumask;
int rate_adj;
+#if defined(SOL_ON)
+ int repeat = (reps != 0); // whether the output will be repeated
+#endif
uptime = getuptime();
halfuptime = uptime / 2;
@@ -724,6 +721,12 @@
hz = clockrate.hz;
}
+#if defined(SOL_ON)
+ if (sol_format && repeat) {
+ sol_array_start(&sol_stream);
+ }
+#endif
+
if (Pflag) {
ncpus = getcpuinfo(&cpumask, &maxid);
size_cp_times = sizeof(long) * (maxid + 1) * CPUSTATES;
@@ -731,7 +734,7 @@
last_cp_times = calloc(1, size_cp_times);
}
for (hdrcnt = 1;;) {
- if (!--hdrcnt && !Oflag)
+ if (!--hdrcnt && !sol_format)
printhdr(ncpus, cpumask);
if (kd != NULL) {
if (kvm_getcptime(kd, cur.cp_time) < 0)
@@ -783,7 +786,7 @@
errx(1, "%s", devstat_errbuf);
break;
case 1:
- if (!Oflag) printhdr(ncpus, cpumask);
+ if (!sol_format) printhdr(ncpus, cpumask);
break;
default:
break;
@@ -800,62 +803,60 @@
#define rate(x) (((x) * rate_adj + halfuptime) / uptime) /* round */
#if defined(SOL_ON)
- if (Oflag)
+ if (sol_format)
{
sol_map_start(&sol_stream);
- sol_map_key(&sol_stream, "procs_r", 7);
+ SOL_MAP_KEYL(&sol_stream, "procs_r");
sol_integer(&sol_stream, total.t_rq - 1);
- sol_map_key(&sol_stream, "procs_b", 7);
+ SOL_MAP_KEYL(&sol_stream, "procs_b");
sol_integer(&sol_stream, total.t_dw + total.t_pw);
- sol_map_key(&sol_stream, "procs_w", 7);
+ SOL_MAP_KEYL(&sol_stream, "procs_w");
sol_integer(&sol_stream, total.t_sw);
if (hflag) {
- sol_map_key(&sol_stream, "hmem_avg", 8);
+ SOL_MAP_KEYL(&sol_stream, "hmem_avg");
prthuman(total.t_avm * (u_int64_t)sum.v_page_size, 7);
- sol_map_key(&sol_stream, "hmem_free", 9);
+ SOL_MAP_KEYL(&sol_stream, "hmem_free");
prthuman(total.t_free * (u_int64_t)sum.v_page_size, 6);
} else {
- sol_map_key(&sol_stream, "mem_avg", 7);
+ SOL_MAP_KEYL(&sol_stream, "mem_avg");
sol_integer(&sol_stream, vmstat_pgtok(total.t_avm));
- sol_map_key(&sol_stream, "mem_free", 8);
+ SOL_MAP_KEYL(&sol_stream, "mem_free");
sol_integer(&sol_stream, vmstat_pgtok(total.t_free));
}
- sol_map_key(&sol_stream, "page_flt", 8);
+ SOL_MAP_KEYL(&sol_stream, "page_flt");
sol_integer(&sol_stream, (unsigned long)rate(sum.v_vm_faults - osum.v_vm_faults));
- sol_map_key(&sol_stream, "page_re", 7);
+ SOL_MAP_KEYL(&sol_stream, "page_re");
sol_integer(&sol_stream, (unsigned long)rate(sum.v_reactivated - osum.v_reactivated));
- sol_map_key(&sol_stream, "page_pi", 7);
+ SOL_MAP_KEYL(&sol_stream, "page_pi");
sol_integer(&sol_stream, (unsigned long)rate(sum.v_swapin + sum.v_vnodein - (osum.v_swapin + osum.v_vnodein)));
- sol_map_key(&sol_stream, "page_po", 7);
+ SOL_MAP_KEYL(&sol_stream, "page_po");
sol_integer(&sol_stream, (unsigned long)rate(sum.v_swapout + sum.v_vnodeout - (osum.v_swapout + osum.v_vnodeout)));
- sol_map_key(&sol_stream, "page_fr", 7);
+ SOL_MAP_KEYL(&sol_stream, "page_fr");
sol_integer(&sol_stream, (unsigned long)rate(sum.v_tfree - osum.v_tfree));
- sol_map_key(&sol_stream, "page_sr", 7);
+ SOL_MAP_KEYL(&sol_stream, "page_sr");
sol_integer(&sol_stream, (unsigned long)rate(sum.v_pdpages - osum.v_pdpages));
devstats();
- sol_map_key(&sol_stream, "fault_in", 8);
+ SOL_MAP_KEYL(&sol_stream, "fault_in");
sol_integer(&sol_stream, (unsigned long)rate(sum.v_intr - osum.v_intr));
- sol_map_key(&sol_stream, "fault_sy", 8);
+ SOL_MAP_KEYL(&sol_stream, "fault_sy");
sol_integer(&sol_stream, (unsigned long)rate(sum.v_syscall - osum.v_syscall));
- sol_map_key(&sol_stream, "fault_cs", 8);
+ SOL_MAP_KEYL(&sol_stream, "fault_cs");
sol_integer(&sol_stream, (unsigned long)rate(sum.v_swtch - osum.v_swtch));
- // 3
-
if (Pflag)
pcpustats(ncpus, cpumask, maxid);
else
@@ -920,6 +921,10 @@
halfuptime = 0;
(void)usleep(interval * 1000);
}
+
+#if defined(SOL_ON)
+ if (sol_format && repeat) sol_array_end(&sol_stream);
+#endif
}
static void
@@ -1102,11 +1107,11 @@
} while (0)
#if defined(SOL_ON)
- if (Oflag)
+ if (sol_format)
{
sol_map_start(&sol_stream);
#define psum_out(str, val) do { \
- sol_map_key(&sol_stream, (str), sizeof(str) - 1); \
+ SOL_MAP_KEYL(&sol_stream, (str)); \
sol_integer(&sol_stream, (val)); \
} while (0)
psum();
@@ -1135,27 +1140,27 @@
lnchstats.ncs_miss + lnchstats.ncs_long;
#if defined(SOL_ON)
- if (Oflag)
+ if (sol_format)
{
- sol_map_key(&sol_stream, "total name lookups", sizeof("total name lookups") - 1);
+ SOL_MAP_KEYL(&sol_stream, "total name lookups");
sol_integer(&sol_stream, nchtotal);
- sol_map_key(&sol_stream, "cache hits + (%)", sizeof("cache hits + (%)") - 1);
+ SOL_MAP_KEYL(&sol_stream, "cache hits + (%)");
sol_integer(&sol_stream, PCT(lnchstats.ncs_goodhits, nchtotal));
- sol_map_key(&sol_stream, "cache hits - (%)", sizeof("cache hits - (%)") - 1);
+ SOL_MAP_KEYL(&sol_stream, "cache hits - (%)");
sol_integer(&sol_stream, PCT(lnchstats.ncs_neghits, nchtotal));
- sol_map_key(&sol_stream, "cache hits per dir (%)", sizeof("cache hits per dir (%)") - 1);
+ SOL_MAP_KEYL(&sol_stream, "cache hits per dir (%)");
sol_integer(&sol_stream, PCT(lnchstats.ncs_pass2, nchtotal));
- sol_map_key(&sol_stream, "deletions (%)", sizeof("deletions (%)") - 1);
+ SOL_MAP_KEYL(&sol_stream, "deletions (%)");
sol_integer(&sol_stream, PCT(lnchstats.ncs_badhits, nchtotal));
- sol_map_key(&sol_stream, "insertions (%)", sizeof("insertions (%)") - 1);
+ SOL_MAP_KEYL(&sol_stream, "insertions (%)");
sol_integer(&sol_stream, PCT(lnchstats.ncs_falsehits, nchtotal));
- sol_map_key(&sol_stream, "toolong (%)", sizeof("toolong (%)") - 1);
+ SOL_MAP_KEYL(&sol_stream, "toolong (%)");
sol_integer(&sol_stream, PCT(lnchstats.ncs_long, nchtotal));
sol_map_end(&sol_stream);
@@ -1182,40 +1187,40 @@
fill_vmmeter(&sum);
#if defined(SOL_ON)
- if (Oflag) {
+ if (sol_format) {
sol_map_start(&sol_stream);
- sol_map_key(&sol_stream, "fork", 4);
+ SOL_MAP_KEYL(&sol_stream, "fork");
sol_map_start(&sol_stream);
- sol_map_key(&sol_stream, "count", 5);
+ SOL_MAP_KEYL(&sol_stream, "count");
sol_integer(&sol_stream, sum.v_forks);
- sol_map_key(&sol_stream, "pages", 5);
+ SOL_MAP_KEYL(&sol_stream, "pages");
sol_integer(&sol_stream, sum.v_forkpages);
- sol_map_key(&sol_stream, "average", 7);
+ SOL_MAP_KEYL(&sol_stream, "average");
sol_float(&sol_stream, ((sum.v_forks == 0) ?
0.0 :
(double)sum.v_forkpages / sum.v_forks));
sol_map_end(&sol_stream);
- sol_map_key(&sol_stream, "vfork", 5);
+ SOL_MAP_KEYL(&sol_stream, "vfork");
sol_map_start(&sol_stream);
- sol_map_key(&sol_stream, "count", 5);
+ SOL_MAP_KEYL(&sol_stream, "count");
sol_integer(&sol_stream, sum.v_vforks);
- sol_map_key(&sol_stream, "pages", 5);
+ SOL_MAP_KEYL(&sol_stream, "pages");
sol_integer(&sol_stream, sum.v_vforkpages);
- sol_map_key(&sol_stream, "average", 7);
+ SOL_MAP_KEYL(&sol_stream, "average");
sol_float(&sol_stream, ((sum.v_vforks == 0) ?
0.0 :
(double)sum.v_vforkpages / sum.v_vforks));
sol_map_end(&sol_stream);
- sol_map_key(&sol_stream, "rfork", 5);
+ SOL_MAP_KEYL(&sol_stream, "rfork");
sol_map_start(&sol_stream);
- sol_map_key(&sol_stream, "count", 5);
+ SOL_MAP_KEYL(&sol_stream, "count");
sol_integer(&sol_stream, sum.v_rforks);
- sol_map_key(&sol_stream, "pages", 5);
+ SOL_MAP_KEYL(&sol_stream, "pages");
sol_integer(&sol_stream, sum.v_rforkpages);
- sol_map_key(&sol_stream, "average", 7);
+ SOL_MAP_KEYL(&sol_stream, "average");
sol_float(&sol_stream, ((sum.v_rforks == 0) ?
0.0 :
(double)sum.v_rforkpages / sum.v_rforks));
@@ -1273,7 +1278,7 @@
errx(1, "%s", devstat_errbuf);
#if defined(SOL_ON)
- if (Oflag) {
+ if (sol_format) {
char buf[2 + STRBUF_SIZEOF(dev_select[dn].unit_number) + 1];
size_t len = snprintf(buf, sizeof(buf), "%c%c%d", dev_select[dn].device_name[0],
dev_select[dn].device_name[1],
@@ -1320,13 +1325,13 @@
over = 0;
#if defined(SOL_ON)
- if (Oflag)
+ if (sol_format)
{
- sol_map_key(&sol_stream, "cpu_user", 8);
+ SOL_MAP_KEYL(&sol_stream, "cpu_user");
sol_float(&sol_stream, (cur.cp_time[CP_USER] + cur.cp_time[CP_NICE]) * lpct);
- sol_map_key(&sol_stream, "cpu_sys", 7);
+ SOL_MAP_KEYL(&sol_stream, "cpu_sys");
sol_float(&sol_stream, (cur.cp_time[CP_SYS] + cur.cp_time[CP_INTR]) * lpct);
- sol_map_key(&sol_stream, "cpu_idle", 8);
+ SOL_MAP_KEYL(&sol_stream, "cpu_idle");
sol_float(&sol_stream, cur.cp_time[CP_IDLE] * lpct);
}
else
@@ -1361,9 +1366,9 @@
}
#if defined(SOL_ON)
- if (Oflag)
+ if (sol_format)
{
- sol_map_key(&sol_stream, "cpu", 3);
+ SOL_MAP_KEYL(&sol_stream, "cpu");
sol_array_start(&sol_stream);
}
#endif
@@ -1381,19 +1386,19 @@
lpct = 0.0;
#if defined(SOL_ON)
- if (Oflag)
+ if (sol_format)
{
sol_map_start(&sol_stream);
- sol_map_key(&sol_stream, "user", 4);
+ SOL_MAP_KEYL(&sol_stream, "user");
sol_float(&sol_stream, (cur_cp_times[i * CPUSTATES + CP_USER] +
cur_cp_times[i * CPUSTATES + CP_NICE]) * lpct);
- sol_map_key(&sol_stream, "sys", 3);
+ SOL_MAP_KEYL(&sol_stream, "sys");
sol_float(&sol_stream, (cur_cp_times[i * CPUSTATES + CP_SYS] +
cur_cp_times[i * CPUSTATES + CP_INTR]) * lpct);
- sol_map_key(&sol_stream, "idle", 4);
+ SOL_MAP_KEYL(&sol_stream, "idle");
sol_float(&sol_stream, cur_cp_times[i * CPUSTATES + CP_IDLE] * lpct);
}
else
@@ -1411,7 +1416,7 @@
}
#if defined(SOL_ON)
- if (Oflag) sol_array_end(&sol_stream);
+ if (sol_format) sol_array_end(&sol_stream);
#endif
}
@@ -1460,7 +1465,7 @@
}
#if defined(SOL_ON)
- if (Oflag)
+ if (sol_format)
{
sol_map_start(&sol_stream);
@@ -1470,10 +1475,10 @@
sol_map_key(&sol_stream, intrname, strlen(intrname));
sol_map_start(&sol_stream);
- sol_map_key(&sol_stream, "total", 5);
+ SOL_MAP_KEYL(&sol_stream, "total");
sol_integer(&sol_stream, *intrcnt);
- sol_map_key(&sol_stream, "rate", 4);
+ SOL_MAP_KEYL(&sol_stream, "rate");
sol_integer(&sol_stream, *intrcnt / uptime);
sol_map_end(&sol_stream);
@@ -1482,13 +1487,13 @@
inttotal += *intrcnt++;
}
- sol_map_key(&sol_stream, "Total", 5);
+ SOL_MAP_KEYL(&sol_stream, "Total");
sol_map_start(&sol_stream);
- sol_map_key(&sol_stream, "total", 5);
+ SOL_MAP_KEYL(&sol_stream, "total");
sol_integer(&sol_stream, inttotal);
- sol_map_key(&sol_stream, "rate", 4);
+ SOL_MAP_KEYL(&sol_stream, "rate");
sol_integer(&sol_stream, inttotal / uptime);
sol_map_end(&sol_stream);
@@ -1544,7 +1549,7 @@
}
#if defined(SOL_ON)
- if (Oflag)
+ if (sol_format)
sol_map_start(&sol_stream);
else
#endif
@@ -1558,22 +1563,22 @@
continue;
#if defined(SOL_ON)
- if (Oflag)
+ if (sol_format)
{
const char *name = memstat_get_name(mtp);
sol_map_key(&sol_stream, name, strlen(name));
sol_map_start(&sol_stream);
- sol_map_key(&sol_stream, "inuse", 5);
+ SOL_MAP_KEYL(&sol_stream, "inuse");
sol_integer(&sol_stream, memstat_get_count(mtp));
- sol_map_key(&sol_stream, "memuse", 6);
+ SOL_MAP_KEYL(&sol_stream, "memuse");
sol_integer(&sol_stream, (memstat_get_bytes(mtp) + 1023) / 1024);
- sol_map_key(&sol_stream, "requests", 8);
+ SOL_MAP_KEYL(&sol_stream, "requests");
sol_integer(&sol_stream, memstat_get_numallocs(mtp));
- sol_map_key(&sol_stream, "size", 4);
+ SOL_MAP_KEYL(&sol_stream, "size");
sol_array_start(&sol_stream);
for (i = 0; i < 32; i++)
if (memstat_get_sizemask(mtp) & (1 << i))
@@ -1605,7 +1610,7 @@
memstat_mtl_free(mtlp);
#if defined(SOL_ON)
- if (Oflag) sol_map_end(&sol_stream);
+ if (sol_format) sol_map_end(&sol_stream);
#endif
}
@@ -1641,7 +1646,7 @@
}
#if defined(SOL_ON)
- if (Oflag)
+ if (sol_format)
{
sol_array_start(&sol_stream);
@@ -1651,28 +1656,28 @@
sol_map_start(&sol_stream);
const char *name = memstat_get_name(mtp);
- sol_map_key(&sol_stream, "item", 4);
+ SOL_MAP_KEYL(&sol_stream, "item");
sol_string(&sol_stream, name, strlen(name));
- sol_map_key(&sol_stream, "size", 4);
+ SOL_MAP_KEYL(&sol_stream, "size");
sol_integer(&sol_stream, memstat_get_size(mtp));
- sol_map_key(&sol_stream, "limit", 4);
+ SOL_MAP_KEYL(&sol_stream, "limit");
sol_integer(&sol_stream, memstat_get_countlimit(mtp));
- sol_map_key(&sol_stream, "used", 4);
+ SOL_MAP_KEYL(&sol_stream, "used");
sol_integer(&sol_stream, memstat_get_count(mtp));
- sol_map_key(&sol_stream, "free", 4);
+ SOL_MAP_KEYL(&sol_stream, "free");
sol_integer(&sol_stream, memstat_get_free(mtp));
- sol_map_key(&sol_stream, "req", 3);
+ SOL_MAP_KEYL(&sol_stream, "req");
sol_integer(&sol_stream, memstat_get_numallocs(mtp));
- sol_map_key(&sol_stream, "fail", 4);
+ SOL_MAP_KEYL(&sol_stream, "fail");
sol_integer(&sol_stream, memstat_get_failures(mtp));
- sol_map_key(&sol_stream, "sleep", 5);
+ SOL_MAP_KEYL(&sol_stream, "sleep");
sol_integer(&sol_stream, memstat_get_sleeps(mtp));
sol_map_end(&sol_stream);
@@ -1754,7 +1759,7 @@
usage(void)
{
(void)fprintf(stderr, "%s%s",
- "usage: vmstat [-afHhimPsz] [-c count] [-M core [-N system]] [-w wait] [-O]\n",
+ "usage: vmstat [-afHhimPsz] [-c count] [-M core [-N system]] [-w wait]\n",
" [-n devs] [-p type,if,pass] [disks]\n");
exit(1);
}
More information about the svn-soc-all
mailing list