Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 19 Dec 2014 18:22:42 +0100
From:      =?UTF-8?Q?Fernando_Apestegu=C3=ADa?= <fernando.apesteguia@gmail.com>
To:        John Baldwin <jhb@freebsd.org>
Cc:        FreeBSD Hackers <freebsd-hackers@freebsd.org>, Allan Jude <allanjude@freebsd.org>
Subject:   Re: top -d1 behavior
Message-ID:  <CAGwOe2bMka=sRz7Ug%2B0SsGxHaXKGUsUkb%2Bg9MY9w6byteUyk%2Bg@mail.gmail.com>
In-Reply-To: <201412181449.16974.jhb@freebsd.org>
References:  <CAGwOe2Zp2cHhCb%2Br_m5HZYJFyc=3DDsPEi7v_7ZVxJ0fkO1jEA@mail.gmail.com> <201412161203.44257.jhb@freebsd.org> <CAGwOe2bvp-sa6tCgSUcSut8uWu5on7NOunOp26bL-d7PPfkuMg@mail.gmail.com> <201412181449.16974.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Dec 18, 2014 at 8:49 PM, John Baldwin <jhb@freebsd.org> wrote:
> On Wednesday, December 17, 2014 5:27:40 pm Fernando Apestegu=C3=ADa wrote=
:
>> On Tue, Dec 16, 2014 at 6:03 PM, John Baldwin <jhb@freebsd.org> wrote:
>> > On Sunday, November 23, 2014 4:57:33 pm Fernando Apestegu=C3=ADa 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 state=
s
>> > 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 fr=
om
>> > 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 b=
ut
> just hadn't replied until I sent the previous message.  Here's a real ver=
sion
> of the patch if you would like to test it.

I don't know what I was doing wrong, but I couldn't apply your patch
cleanly, sorry (patch -p0 < /path/to/patch). Anyway, I translated the
changes to the code and it worked for me. Sample output:

last pid:  8084;  load averages:  0.36,  0.26,  0.23
                                                                    up
1+00:47:24  16:38:10
47 processes:  1 running, 46 sleeping
CPU: 32.0% user,  0.0% nice,  8.1% system,  0.1% interrupt, 59.8% idle
Mem: 361M Active, 1024M Inact, 630M Wired, 528K Cache, 361M Buf, 1931M Free
Swap: 128M Total, 40M Used, 88M Free, 31% Inuse

...
[snip]

If you are to commit this, could you please close PR 195717?


>
> Index: contrib/top/display.c
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> --- contrib/top/display.c       (revision 275828)
> +++ contrib/top/display.c       (working copy)
> @@ -557,46 +557,6 @@
>  }
>  }
>
> -z_cpustates()
> -
> -{
> -    register int i =3D 0;
> -    register char **names;
> -    register char *thisname;
> -    register int *lp;
> -    int cpu, value;
> -
> -for (cpu =3D 0; cpu < num_cpus; cpu++) {
> -    names =3D cpustate_names;
> -
> -    /* show tag and bump lastline */
> -    if (num_cpus =3D=3D 1)
> -       printf("\nCPU: ");
> -    else {
> -       value =3D printf("\nCPU %d: ", cpu);
> -       while (value++ <=3D cpustates_column)
> -               printf(" ");
> -    }
> -    lastline++;
> -
> -    while ((thisname =3D *names++) !=3D NULL)
> -    {
> -       if (*thisname !=3D '\0')
> -       {
> -           printf("%s    %% %s", (i++ % num_cpustates) =3D=3D 0 ? "" : "=
, ", thisname);
> -       }
> -    }
> -}
> -
> -    /* fill the "last" array with all -1s, to insure correct updating */
> -    lp =3D lcpustates;
> -    i =3D num_cpustates * num_cpus;
> -    while (--i >=3D 0)
> -    {
> -       *lp++ =3D -1;
> -    }
> -}
> -
>  /*
>   *  *_memory(stats) - print "Memory: " followed by the memory summary st=
ring
>   *
> Index: contrib/top/top.c
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> --- contrib/top/top.c   (revision 275828)
> +++ contrib/top/top.c   (working copy)
> @@ -176,7 +176,6 @@
>      int  preset_argc =3D 0;
>      char **av;
>      int  ac;
> -    char dostates =3D No;
>      char do_unames =3D Yes;
>      char interactive =3D Maybe;
>      char warnings =3D 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 =3D Yes;
> -       }
> +       (*d_cpustates)(system_info.cpustates);
>
>         /* display memory stats */
>         (*d_memory)(system_info.memory);
>
> --
> John Baldwin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAGwOe2bMka=sRz7Ug%2B0SsGxHaXKGUsUkb%2Bg9MY9w6byteUyk%2Bg>