top -d1 behavior

John Baldwin jhb at freebsd.org
Thu Dec 18 19:49:34 UTC 2014


On Wednesday, December 17, 2014 5:27:40 pm Fernando Apesteguía wrote:
> On Tue, Dec 16, 2014 at 6:03 PM, John Baldwin <jhb at freebsd.org> wrote:
> > On Sunday, November 23, 2014 4:57:33 pm Fernando Apesteguía wrote:
> >> > Neither seem like what the user would expect.
> >>
> >> Agreed. But this is mostly unexpected (and can lead scripts to fail):
> >
> > Actually, I think having it output the states since boot would be more
> > consistent with other tools like iostat/vmstat/etc.  They report states
> > on the first iteration that are states since boot.  For example:
> >
> > % iostat 1
> >        tty            ada0             ada1              cd0             cpu
> >  tin  tout  KB/t tps  MB/s   KB/t tps  MB/s   KB/t tps  MB/s  us ni sy in id
> >    8   225 20.41  12  0.24  20.56  12  0.24   2.79   0  0.00   3  0  2  0 95
> >    0  6230 60.00   6  0.35  64.80  10  0.62   0.00   0  0.00   9  0 91  0  0
> >    0  6195 64.00   5  0.31  51.43   7  0.35   0.00   0  0.00  11  0 89  0  1
> >
> > Can you test this test patch to see if it gives you what you expect from
> > top -d1?
> 
> Yes it does.
> 
> I thought however that the discussion was over :) so I filed a PR[1]
> to at least warn in the man page about the special behavior for this
> case.
> 
> I would rather fix top and leave the man page as it is.

I think fixing top makes the most sense.  I saw this thread a while ago but
just hadn't replied until I sent the previous message.  Here's a real version
of the patch if you would like to test it.

Index: contrib/top/display.c
===================================================================
--- contrib/top/display.c	(revision 275828)
+++ contrib/top/display.c	(working copy)
@@ -557,46 +557,6 @@
 }
 }
 
-z_cpustates()
-
-{
-    register int i = 0;
-    register char **names;
-    register char *thisname;
-    register int *lp;
-    int cpu, value;
-
-for (cpu = 0; cpu < num_cpus; cpu++) {
-    names = cpustate_names;
-
-    /* show tag and bump lastline */
-    if (num_cpus == 1)
-	printf("\nCPU: ");
-    else {
-	value = printf("\nCPU %d: ", cpu);
-	while (value++ <= cpustates_column)
-		printf(" ");
-    }
-    lastline++;
-
-    while ((thisname = *names++) != NULL)
-    {
-	if (*thisname != '\0')
-	{
-	    printf("%s    %% %s", (i++ % num_cpustates) == 0 ? "" : ", ", thisname);
-	}
-    }
-}
-
-    /* fill the "last" array with all -1s, to insure correct updating */
-    lp = lcpustates;
-    i = num_cpustates * num_cpus;
-    while (--i >= 0)
-    {
-	*lp++ = -1;
-    }
-}
-
 /*
  *  *_memory(stats) - print "Memory: " followed by the memory summary string
  *
Index: contrib/top/top.c
===================================================================
--- contrib/top/top.c	(revision 275828)
+++ contrib/top/top.c	(working copy)
@@ -176,7 +176,6 @@
     int  preset_argc = 0;
     char **av;
     int  ac;
-    char dostates = No;
     char do_unames = Yes;
     char interactive = Maybe;
     char warnings = 0;
@@ -643,23 +642,7 @@
 			system_info.procstates);
 
 	/* display the cpu state percentage breakdown */
-	if (dostates)	/* but not the first time */
-	{
-	    (*d_cpustates)(system_info.cpustates);
-	}
-	else
-	{
-	    /* we'll do it next time */
-	    if (smart_terminal)
-	    {
-		z_cpustates();
-	    }
-	    else
-	    {
-		putchar('\n');
-	    }
-	    dostates = Yes;
-	}
+	(*d_cpustates)(system_info.cpustates);
 
 	/* display memory stats */
 	(*d_memory)(system_info.memory);

-- 
John Baldwin


More information about the freebsd-hackers mailing list