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