Author: trasz
Date: Fri Nov  8 11:09:50 2019
New Revision: 354533
URL: https://svnweb.freebsd.org/changeset/base/354533

Log:
  Humanize more columns in the vmstat(8) output and adjust widths.
  The few columns that are not humanized are usually 0.  This makes
  the output mostly aligned.
  
  Reviewed by:  allanjude
  MFC after:    2 weeks
  Differential Revision:        https://reviews.freebsd.org/D22185

Modified:
  head/usr.bin/vmstat/vmstat.c

Modified: head/usr.bin/vmstat/vmstat.c
==============================================================================
--- head/usr.bin/vmstat/vmstat.c        Fri Nov  8 07:56:14 2019        
(r354532)
+++ head/usr.bin/vmstat/vmstat.c        Fri Nov  8 11:09:50 2019        
(r354533)
@@ -646,9 +646,8 @@ getcpuinfo(u_long *maskp, int *maxidp)
 
 
 static void
-prthuman(const char *name, uint64_t val, int size)
+prthuman(const char *name, uint64_t val, int size, int flags)
 {
-       int flags;
        char buf[10];
        char fmt[128];
 
@@ -656,7 +655,7 @@ prthuman(const char *name, uint64_t val, int size)
 
        if (size < 5 || size > 9)
                xo_errx(1, "doofus");
-       flags = HN_B | HN_NOSPACE | HN_DECIMAL;
+       flags |= HN_NOSPACE | HN_DECIMAL;
        humanize_number(buf, size, val, "", HN_AUTOSCALE, flags);
        xo_attr("value", "%ju", (uintmax_t) val);
        xo_emit(fmt, size, buf);
@@ -784,20 +783,21 @@ dovmstat(unsigned int interval, int reps)
                fill_vmmeter(&sum);
                fill_vmtotal(&total);
                xo_open_container("processes");
-               xo_emit("{:runnable/%1d} {:waiting/%ld} "
-                   "{:swapped-out/%ld}", total.t_rq - 1, total.t_dw +
+               xo_emit("{:runnable/%2d} {:waiting/%2ld} "
+                   "{:swapped-out/%2ld}", total.t_rq - 1, total.t_dw +
                    total.t_pw, total.t_sw);
                xo_close_container("processes");
                xo_open_container("memory");
 #define vmstat_pgtok(a) ((uintmax_t)(a) * (sum.v_page_size >> 10))
 #define        rate(x) (((x) * rate_adj + halfuptime) / uptime)        /* 
round */
                if (hflag) {
-                       xo_emit("");
                        prthuman("available-memory",
-                           total.t_avm * (uint64_t)sum.v_page_size, 5);
-                       xo_emit(" ");
+                           total.t_avm * (uint64_t)sum.v_page_size, 5, HN_B);
                        prthuman("free-memory",
-                           total.t_free * (uint64_t)sum.v_page_size, 5);
+                           total.t_free * (uint64_t)sum.v_page_size, 5, HN_B);
+                       prthuman("total-page-faults",
+                           (unsigned long)rate(sum.v_vm_faults -
+                           osum.v_vm_faults), 5, 0);
                        xo_emit(" ");
                } else {
                        xo_emit(" ");
@@ -807,10 +807,10 @@ dovmstat(unsigned int interval, int reps)
                        xo_emit("{:free-memory/%7ju}",
                            vmstat_pgtok(total.t_free));
                        xo_emit(" ");
+                       xo_emit("{:total-page-faults/%5lu} ",
+                           (unsigned long)rate(sum.v_vm_faults -
+                           osum.v_vm_faults));
                }
-               xo_emit("{:total-page-faults/%5lu} ",
-                   (unsigned long)rate(sum.v_vm_faults -
-                   osum.v_vm_faults));
                xo_close_container("memory");
 
                xo_open_container("paging-rates");
@@ -820,22 +820,44 @@ dovmstat(unsigned int interval, int reps)
                xo_emit("{:paged-in/%3lu} ",
                    (unsigned long)rate(sum.v_swapin + sum.v_vnodein -
                    (osum.v_swapin + osum.v_vnodein)));
-               xo_emit("{:paged-out/%3lu} ",
+               xo_emit("{:paged-out/%3lu}",
                    (unsigned long)rate(sum.v_swapout + sum.v_vnodeout -
                    (osum.v_swapout + osum.v_vnodeout)));
-               xo_emit("{:freed/%5lu} ",
-                   (unsigned long)rate(sum.v_tfree - osum.v_tfree));
-               xo_emit("{:scanned/%4lu} ",
-                   (unsigned long)rate(sum.v_pdpages - osum.v_pdpages));
+               if (hflag) {
+                       prthuman("freed",
+                           (unsigned long)rate(sum.v_tfree - osum.v_tfree),
+                           5, 0);
+                       prthuman("scanned",
+                           (unsigned long)rate(sum.v_pdpages - osum.v_pdpages),
+                           5, 0);
+                       xo_emit(" ");
+               } else {
+                       xo_emit(" ");
+                       xo_emit("{:freed/%5lu} ",
+                           (unsigned long)rate(sum.v_tfree - osum.v_tfree));
+                       xo_emit("{:scanned/%4lu} ",
+                           (unsigned long)rate(sum.v_pdpages - 
osum.v_pdpages));
+               }
                xo_close_container("paging-rates");
 
                devstats();
                xo_open_container("fault-rates");
-               xo_emit("{:interrupts/%4lu} {:system-calls/%5lu} "
-                   "{:context-switches/%5lu}",
-                   (unsigned long)rate(sum.v_intr - osum.v_intr),
-                   (unsigned long)rate(sum.v_syscall - osum.v_syscall),
-                   (unsigned long)rate(sum.v_swtch - osum.v_swtch));
+               xo_emit("{:interrupts/%4lu}",
+                   (unsigned long)rate(sum.v_intr - osum.v_intr));
+               if (hflag) {
+                       prthuman("system-calls",
+                           (unsigned long)rate(sum.v_syscall - osum.v_syscall),
+                           5, 0);
+                       prthuman("context-switches",
+                           (unsigned long)rate(sum.v_swtch - osum.v_swtch),
+                           5, 0);
+               } else {
+                       xo_emit(" ");
+                       xo_emit("{:system-calls/%5lu} "
+                           "{:context-switches/%5lu}",
+                           (unsigned long)rate(sum.v_syscall - osum.v_syscall),
+                           (unsigned long)rate(sum.v_swtch - osum.v_swtch));
+               }
                xo_close_container("fault-rates");
                if (Pflag)
                        pcpustats(cpumask, maxid);
@@ -867,14 +889,14 @@ printhdr(int maxid, u_long cpumask)
 
        num_shown = MIN(num_selected, maxshowdevs);
        if (hflag)
-               xo_emit("{T:procs}  {T:memory}      {T:/page%*s}", 19, "");
+               xo_emit(" {T:procs}    {T:memory}    {T:/page%*s}", 19, "");
        else
                xo_emit("{T:procs}     {T:memory}       {T:/page%*s}", 19, "");
        if (num_shown > 1)
-               xo_emit("    {T:/disks %*s}", num_shown * 4 - 7, "");
+               xo_emit("   {T:/disks %*s}  ", num_shown * 4 - 7, "");
        else if (num_shown == 1)
                xo_emit("   {T:disks}");
-       xo_emit("   {T:faults}      ");
+       xo_emit(" {T:faults}      ");
        if (Pflag) {
                for (i = 0; i <= maxid; i++) {
                        if (cpumask & (1ul << i))
@@ -882,10 +904,10 @@ printhdr(int maxid, u_long cpumask)
                }
                xo_emit("\n");
        } else
-               xo_emit("   {T:cpu}\n");
+               xo_emit(" {T:cpu}\n");
        if (hflag) {
-               xo_emit("{T:r} {T:b} {T:w}  {T:avm}   {T:fre}   {T:flt}  {T:re}"
-                   "  {T:pi}  {T:po}    {T:fr}   {T:sr} ");
+               xo_emit(" {T:r}  {T:b}  {T:w}  {T:avm}  {T:fre}  {T:flt}  
{T:re}"
+                   "  {T:pi}  {T:po}   {T:fr}   {T:sr} ");
        } else {
                xo_emit("{T:r} {T:b} {T:w}     {T:avm}     {T:fre}  {T:flt}  "
                    "{T:re}  {T:pi}  {T:po}    {T:fr}   {T:sr} ");
@@ -896,7 +918,7 @@ printhdr(int maxid, u_long cpumask)
                        xo_emit("{T:/%c%c%d} ", dev_select[i].device_name[0],
                            dev_select[i].device_name[1],
                            dev_select[i].unit_number);
-       xo_emit("  {T:in}    {T:sy}    {T:cs}");
+       xo_emit("  {T:in}   {T:sy}   {T:cs}");
        if (Pflag) {
                for (i = 0; i <= maxid; i++) {
                        if (cpumask & (1ul << i))
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to