Request for testing - top 3.8b1 in the base system
pluknet
pluknet at gmail.com
Tue Oct 21 09:46:24 PDT 2008
2008/9/28 Edwin Groothuis <edwin at freebsd.org>:
> I have made an update for the top(1) utility in the FreeBSD base
> system to get it from the 3.5b12 version to the 3.8b1 version.
>
> I have tried them on the amd64 architecture on FreeBSD -current and
> FreeBSD 7.0 and on the i386 architecture on FreeBSD 7.0.
>
> The big new features are a line upper part with kernel statistics
> (context-switches, traps, interrupts, faults etc) and the FLG table
> (if you window is big enough)
>
> Some features specific to FreeBSD (dual display (press m)), threaded
> processes, and jails have been ported to 3.8b1.
>
> The biggest fix (AFAICT) is the TIME and CPU table for threaded
> processes, which are now calculated properly.
>
> The new code can be found on
> http://www.mavetju.org/~edwin/freebsd-top-3.8b1-A.tar.gz
> Go to 3.8b1/usr.sbin/top and run "make" there to produce the binary,
> then run it via "./top".
>
> Please report any issues with it (compile time, run time) and a way
> to reproduce it (if possible). Thanks for your help!
>
> Edwin
btw, on my 6.2 it never changes 'Processes' count on 'S' press
and always shows all(+system ) procs (as if it in 'S' mode). Base top does it.
That is because 3.81 top has different semantics between active procs
and total ones.
'Processes' count displays active procs (+ threads in 'H' mode).
My small patch represents this. The first number displays actually
displayed procs(and threads)
and the second one displays all procs(and threads) in system.
Index: top/freebsd-top-3.8b1-A/contrib/top/top.c
===================================================================
--- top/freebsd-top-3.8b1-A/contrib/top/top.c (revision 5702)
+++ top/freebsd-top-3.8b1-A/contrib/top/top.c (working copy)
@@ -567,7 +567,8 @@
i_loadave(system_info.last_pid, system_info.load_avg);
i_uptime(&(gstate->statics->boottime), &curr_time);
i_timeofday(&curr_time);
- i_procstates(system_info.p_total, system_info.procstates,
gstate->pselect.threads);
+ i_procstates(system_info.p_total, system_info.p_active,
+ system_info.procstates, gstate->pselect.threads);
if (gstate->show_cpustates)
{
i_cpustates(system_info.cpustates);
@@ -601,7 +602,8 @@
u_loadave(system_info.last_pid, system_info.load_avg);
i_timeofday(&curr_time);
u_uptime(&(gstate->statics->boottime), &curr_time);
- u_procstates(system_info.p_total, system_info.procstates,
gstate->pselect.threads);
+ u_procstates(system_info.p_total, system_info.p_active,
+ system_info.procstates, gstate->pselect.threads);
u_cpustates(system_info.cpustates);
u_kernel(system_info.kernel);
u_memory(system_info.memory);
Index: top/freebsd-top-3.8b1-A/contrib/top/display.c
===================================================================
--- top/freebsd-top-3.8b1-A/contrib/top/display.c (revision 5702)
+++ top/freebsd-top-3.8b1-A/contrib/top/display.c (working copy)
@@ -1042,6 +1042,7 @@
}
static int ltotal = 0;
+static int lactive = 0;
static int lthreads = 0;
/*
@@ -1050,13 +1051,14 @@
void
-i_procstates(int total, int *brkdn, int threads)
+i_procstates(int total, int active, int *brkdn, int threads)
{
/* write current number of processes and remember the value */
display_fmt(0, y_procstate, 0, 0,
- "%d %s: ", total, threads ? "threads" : "processes");
+ "%d/%d %s: ", active, total, threads ? "threads" : "processes");
ltotal = total;
+ lactive = active;
/* remember where the summary starts */
x_procstate = virt_x;
@@ -1073,24 +1075,24 @@
}
void
-u_procstates(int total, int *brkdn, int threads)
+u_procstates(int total, int active, int *brkdn, int threads)
{
/* if threads state has changed, do a full update */
if (lthreads != threads)
{
- i_procstates(total, brkdn, threads);
+ i_procstates(total, active, brkdn, threads);
return;
}
/* update number of processes only if it has changed */
- if (ltotal != total)
+ if (ltotal != total || lactive != active)
{
display_fmt(0, y_procstate, 0, 0,
- "%d", total);
+ "%d/%d", active, total);
/* if number of digits differs, rewrite the label */
- if (digits(total) != digits(ltotal))
+ if (digits(total) != digits(ltotal) || digits(active) != digits(lactive))
{
display_fmt(-1, -1, 0, 0, " %s: ", threads ? "threads" : "processes");
x_procstate = virt_x;
@@ -1098,6 +1100,7 @@
/* save new total */
ltotal = total;
+ lactive = active;
}
/* see if any of the state numbers has changed */
Index: top/freebsd-top-3.8b1-A/contrib/top/display.h
===================================================================
--- top/freebsd-top-3.8b1-A/contrib/top/display.h (revision 5702)
+++ top/freebsd-top-3.8b1-A/contrib/top/display.h (working copy)
@@ -49,8 +49,8 @@
void i_uptime(time_t *bt, time_t *tod);
void u_uptime(time_t *bt, time_t *tod);
void i_timeofday(time_t *tod);
-void i_procstates(int total, int *brkdn, int threads);
-void u_procstates(int total, int *brkdn, int threads);
+void i_procstates(int total, int active, int *brkdn, int threads);
+void u_procstates(int total, int active, int *brkdn, int threads);
void i_cpustates(int *states);
void u_cpustates(int *states);
void z_cpustates();
--
wbr,
pluknet
_______________________________________________
freebsd-current at freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscribe at freebsd.org"
More information about the freebsd-stable
mailing list