Date: Sat, 21 Jun 2014 23:30:32 GMT From: zkorchev@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r269835 - soc2014/zkorchev/freebsd_head/usr.bin/vmstat Message-ID: <201406212330.s5LNUWuI024973@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201406212330.s5LNUWuI024973>