--- machine.c.orig Tue May 4 15:43:05 2004 +++ machine.c Tue May 4 16:18:47 2004 @@ -77,6 +77,7 @@ #define PP(pp, field) ((pp)->kp_proc . field) #define EP(pp, field) ((pp)->kp_eproc . field) #define VP(pp, field) ((pp)->kp_eproc.e_vm . field) +#define RU(pp, field) ((pp)->kp_eproc.e_stats.p_ru . field) /* define what weighted cpu is. */ #define weighted_cpu(pct, pp) (PP((pp), p_swtime) == 0 ? 0.0 : \ @@ -111,16 +112,16 @@ */ static char smp_header[] = - " PID %-*.*s PRI NICE SIZE RES STATE C TIME WCPU CPU COMMAND"; + " PID %-*.*s PR NC SIZE RES STATE C TIME WCPU CPU IO COMMAND"; #define smp_Proc_format \ - "%5d %-*.*s %3d %3d%7s %6s %-6.6s %1x%7s %5.2f%% %5.2f%% %.*s" + "%5d %-*.*s %2d %2d %7s %6s %-6.6s %1x%7s %5.2f%% %5.2f%% %6d %.*s" static char up_header[] = - " PID %-*.*s PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND"; + " PID %-*.*s PRI NICE SIZE RES STATE TIME WCPU CPU IO COMMAND"; #define up_Proc_format \ - "%5d %-*.*s %3d %3d%7s %6s %-6.6s%.0d%7s %5.2f%% %5.2f%% %.*s" + "%5d %-*.*s %3d %3d%7s %6s %-6.6s%.0d%7s %5.2f%% %5.2f%% %6d %.*s" @@ -214,7 +215,7 @@ #ifdef ORDER /* sorting orders. first is default */ char *ordernames[] = { - "cpu", "size", "res", "time", "pri", NULL + "cpu", "size", "res", "time", "pri", "io", NULL }; #endif @@ -630,6 +631,7 @@ format_time(cputime), 100.0 * weighted_cpu(pct, pp), 100.0 * pct, + RU(pp, ru_inblock) + RU(pp,ru_oublock), cmdlength, printable(PP(pp, p_comm))); @@ -754,6 +756,10 @@ #define ORDERKEY_MEM \ if ( (result = PROCSIZE(p2) - PROCSIZE(p1)) == 0 ) +#define ORDERKEY_IO \ + if ((result = (RU(p2, ru_inblock) + RU(p2, ru_oublock)) - \ + (RU(p1, ru_inblock) + RU(p1, ru_oublock))) == 0) + /* compare_cpu - the comparison function for sorting by cpu percentage */ int @@ -778,6 +784,7 @@ ORDERKEY_PCTCPU ORDERKEY_CPTICKS + ORDERKEY_IO ORDERKEY_STATE ORDERKEY_PRIO ORDERKEY_RSSIZE @@ -789,7 +796,7 @@ #ifdef ORDER /* compare routines */ -int compare_size(), compare_res(), compare_time(), compare_prio(); +int compare_size(), compare_res(), compare_time(), compare_prio(), compare_io(); int (*proc_compares[])() = { compare_cpu, @@ -797,6 +804,7 @@ compare_res, compare_time, compare_prio, + compare_io, NULL }; @@ -822,6 +830,7 @@ ORDERKEY_RSSIZE ORDERKEY_PCTCPU ORDERKEY_CPTICKS + ORDERKEY_IO ORDERKEY_STATE ORDERKEY_PRIO ; @@ -851,6 +860,7 @@ ORDERKEY_MEM ORDERKEY_PCTCPU ORDERKEY_CPTICKS + ORDERKEY_IO ORDERKEY_STATE ORDERKEY_PRIO ; @@ -878,6 +888,7 @@ ORDERKEY_CPTICKS ORDERKEY_PCTCPU + ORDERKEY_IO ORDERKEY_STATE ORDERKEY_PRIO ORDERKEY_RSSIZE @@ -908,7 +919,38 @@ ORDERKEY_PRIO ORDERKEY_CPTICKS ORDERKEY_PCTCPU + ORDERKEY_IO + ORDERKEY_STATE + ORDERKEY_RSSIZE + ORDERKEY_MEM + ; + + return(result); +} + +/* compare_io - the comparison function for sorting by io activity */ + +int +compare_io(pp1, pp2) + +struct proc **pp1; +struct proc **pp2; + +{ + register struct kinfo_proc *p1; + register struct kinfo_proc *p2; + register int result; + register pctcpu lresult; + + /* remove one level of indirection */ + p1 = *(struct kinfo_proc **) pp1; + p2 = *(struct kinfo_proc **) pp2; + + ORDERKEY_IO ORDERKEY_STATE + ORDERKEY_CPTICKS + ORDERKEY_PCTCPU + ORDERKEY_PRIO ORDERKEY_RSSIZE ORDERKEY_MEM ;