cvs commit: src/usr.bin/top machine.c
Giorgos Keramidas
keramida at ceid.upatras.gr
Sun Apr 17 06:59:13 PDT 2005
On 2005-04-17 23:01, Bruce Evans <bde at zeta.org.au> wrote:
> On Sun, 17 Apr 2005, Giorgos Keramidas wrote:
> >That's probably I could manage to do later today or tomorrow. For the
> >moment, how does the following change look (change of NICE to NIC and
> >removal of CPU column)?
>
> The NICE column cannot be shrunk, because all 4 columns in it are used.
Ok, I didn't know that :-)
> top -S output on sledge:
>
> %%%
> PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU CPU COMMAND
> 11 root 1 171 52 0K 16K CPU1 1 22.2H 98.97% 98.97% idle
> 12 root 1 171 52 0K 16K RUN 0 22.2H 98.93% 98.93% idle
> 59 root 1 20 0 0K 16K syncer 1 1:07 0.00% 0.00% sync
> 45 root 1 -32 -151 0K 16K WAIT 0 0:36 0.00% 0.00% swi4
> 4 root 1 -8 0 0K 16K - 1 0:16 0.00% 0.00% g_do
> 3 root 1 -8 0 0K 16K - 1 0:11 0.00% 0.00% g_up
> [...]
> %%%
>
> This also shows recent severe lossage in the COMMAND column, and bogus
> extra newlines after the "processes" and "Swap" rows (these only show
> up in output to a file).
>
> There used to be only 3 columns for NICE, but that broke when the priority
> range was expanded from [0..127] to [0..255] in rev.1.35 of machine.c and
> associated kernel changes. Rev.1.36 of machine.c fixed this by adding a
> 4th column for NICE. Before rev.1.36, "NICE" wasn't truncated to "NIC"
> in the header. The value was just in the columns under "NIC" with the
> column under "E" left blank to serve as a separator.
>
> Just removing the CPU column doesn't seem right. ps has a -C flag to
> switch between WCPU and CPU.
We can add a new toggle command to top, i.e. 'C', that toggles between
displaying WCPU or CPU. This should regain us a lot of the space lost
from COMMAND after I added THR.
%%%
Diff also online at:
http://people.freebsd.org/~keramida/diff/top.wcputog.diff
Index: contrib/top/commands.c
===================================================================
RCS file: /home/ncvs/src/contrib/top/commands.c,v
retrieving revision 1.11
diff -u -r1.11 commands.c
--- contrib/top/commands.c 14 Apr 2005 15:02:03 -0000 1.11
+++ contrib/top/commands.c 17 Apr 2005 13:53:19 -0000
@@ -71,6 +71,7 @@
d - change number of displays to show\n\
e - list errors generated by last \"kill\" or \"renice\" command\n\
i or I - toggle the displaying of idle processes\n\
+C - toggle the displaying of weighted CPU percentage\n\
H - toggle the displaying of threads\n\
k - kill processes; send a signal to a list of processes\n\
m - toggle the display between 'cpu' and 'io' modes\n\
Index: contrib/top/machine.h
===================================================================
RCS file: /home/ncvs/src/contrib/top/machine.h,v
retrieving revision 1.6
diff -u -r1.6 machine.h
--- contrib/top/machine.h 17 Jul 2003 23:56:40 -0000 1.6
+++ contrib/top/machine.h 17 Apr 2005 13:37:40 -0000
@@ -60,6 +60,7 @@
int self; /* show self */
int system; /* show system processes */
int thread; /* show threads */
+ int wcpu; /* show weighted cpu */
int uid; /* only this uid (unless uid == -1) */
char *command; /* only this command (unless == NULL) */
};
Index: contrib/top/top.c
===================================================================
RCS file: /home/ncvs/src/contrib/top/top.c,v
retrieving revision 1.16
diff -u -r1.16 top.c
--- contrib/top/top.c 14 Apr 2005 15:02:03 -0000 1.16
+++ contrib/top/top.c 17 Apr 2005 13:43:26 -0000
@@ -193,9 +193,9 @@
fd_set readfds;
#ifdef ORDER
- static char command_chars[] = "\f qh?en#sdkriIutHmSo";
+ static char command_chars[] = "\f qh?en#sdkriIutHCmSo";
#else
- static char command_chars[] = "\f qh?en#sdkriIutHmS";
+ static char command_chars[] = "\f qh?en#sdkriIutHCmS";
#endif
/* these defines enumerate the "strchr"s of the commands in command_chars */
#define CMD_redraw 0
@@ -216,10 +216,11 @@
#define CMD_user 14
#define CMD_selftog 15
#define CMD_thrtog 16
-#define CMD_viewtog 17
-#define CMD_viewsys 18
+#define CMD_wcputog 17
+#define CMD_viewtog 18
+#define CMD_viewsys 19
#ifdef ORDER
-#define CMD_order 19
+#define CMD_order 20
#endif
/* set the buffer for stdout */
@@ -250,6 +251,7 @@
ps.system = No;
ps.uid = -1;
ps.thread = No;
+ ps.wcpu = 1;
ps.command = NULL;
/* get preset options from the environment */
@@ -275,7 +277,7 @@
optind = 1;
}
- while ((i = getopt(ac, av, "SIHbinquvs:d:U:m:o:t")) != EOF)
+ while ((i = getopt(ac, av, "CSIHbinquvs:d:U:m:o:t")) != EOF)
{
switch(i)
{
@@ -383,15 +385,19 @@
case 't':
ps.self = (ps.self == -1) ? getpid() : -1;
break;
-
+
+ case 'C':
+ ps.wcpu = !ps.wcpu;
+ break;
+
case 'H':
ps.thread = !ps.thread;
break;
-
+
default:
fprintf(stderr, "\
Top version %s\n\
-Usage: %s [-HISbinqut] [-d x] [-s x] [-o field] [-U username] [number]\n",
+Usage: %s [-CHISbinqut] [-d x] [-s x] [-o field] [-U username] [number]\n",
version_string(), myname);
exit(1);
}
@@ -993,6 +999,15 @@
reset_display();
putchar('\r');
break;
+ case CMD_wcputog:
+ ps.wcpu = !ps.wcpu;
+ new_message(MT_standout | MT_delayed,
+ "Displaying %sCPU",
+ ps.wcpu ? "W" : "");
+ header_text = format_header(uname_field);
+ reset_display();
+ putchar('\r');
+ break;
case CMD_viewtog:
if (++displaymode == DISP_MAX)
displaymode = 0;
Index: usr.bin/top/machine.c
===================================================================
RCS file: /home/ncvs/src/usr.bin/top/machine.c,v
retrieving revision 1.71
diff -u -r1.71 machine.c
--- usr.bin/top/machine.c 16 Apr 2005 15:43:38 -0000 1.71
+++ usr.bin/top/machine.c 17 Apr 2005 13:51:12 -0000
@@ -103,20 +103,20 @@
"%5d %-*.*s %6ld %6ld %6ld %6ld %6ld %6ld %6.2f%% %.*s"
static char smp_header_thr[] =
- " PID %-*.*s THR PRI NICE SIZE RES STATE C TIME WCPU CPU COMMAND";
+ " PID %-*.*s THR PRI NICE SIZE RES STATE C TIME %6s COMMAND";
static char smp_header[] =
- " PID %-*.*s " "PRI NICE SIZE RES STATE C TIME WCPU CPU COMMAND";
+ " PID %-*.*s " "PRI NICE SIZE RES STATE C TIME %6s COMMAND";
#define smp_Proc_format \
- "%5d %-*.*s %s%3d %4d%7s %6s %-6.6s %1x%7s %5.2f%% %5.2f%% %.*s"
+ "%5d %-*.*s %s%3d %4d%7s %6s %-6.6s %1x%7s %5.2f%% %.*s"
static char up_header_thr[] =
- " PID %-*.*s THR PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND";
+ " PID %-*.*s THR PRI NICE SIZE RES STATE TIME %6s COMMAND";
static char up_header[] =
- " PID %-*.*s " "PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND";
+ " PID %-*.*s " "PRI NICE SIZE RES STATE TIME %6s COMMAND";
#define up_Proc_format \
- "%5d %-*.*s %s%3d %4d%7s %6s %-6.6s%.0d%7s %5.2f%% %5.2f%% %.*s"
+ "%5d %-*.*s %s%3d %4d%7s %6s %-6.6s%.0d%7s %5.2f%% %.*s"
/* process state names for the "STATE" column of the display */
@@ -298,17 +298,17 @@
prehead = smpmode ?
(ps.thread ? smp_header : smp_header_thr) :
(ps.thread ? up_header : up_header_thr);
+ snprintf(Header, sizeof(Header), prehead,
+ namelength, namelength, uname_field,
+ ps.wcpu ? "WCPU" : "CPU");
break;
case DISP_IO:
prehead = io_header;
+ snprintf(Header, sizeof(Header), prehead,
+ namelength, namelength, uname_field);
break;
}
-
- snprintf(Header, sizeof(Header), prehead,
- namelength, namelength, uname_field);
-
cmdlengthdelta = strlen(Header) - 7;
-
return (Header);
}
@@ -780,8 +780,7 @@
status,
smpmode ? pp->ki_lastcpu : 0,
format_time(cputime),
- 100.0 * weighted_cpu(pct, pp),
- 100.0 * pct,
+ ps.wcpu ? (100.0 * weighted_cpu(pct, pp)) : (100.0 * pct),
screen_width > cmdlengthdelta ?
screen_width - cmdlengthdelta :
0,
%%%
More information about the cvs-src
mailing list