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