From: albert <> Date: Sun, 13 Oct 2002 08:23:50 +0000 (+0000) Subject: make top go faster X-Git-Tag: v3.3.0~420 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=77356d9d64f7a151c3b9e037db5a21b05d479ea7;p=procps-ng make top go faster --- diff --git a/proc/readproc.h b/proc/readproc.h index 07b24368..6c11b439 100644 --- a/proc/readproc.h +++ b/proc/readproc.h @@ -32,6 +32,25 @@ * Most of it comes from task_struct in linux/sched.h */ typedef struct proc_t { +// 1st 16 bytes + int + pid, /* process id */ + ppid; /* pid of parent process */ + unsigned + pcpu; /* %CPU usage (is not filled in by readproc!!!) */ + char + state, /* single-char code for process state (S=sleeping) */ + pad_1, /* padding */ + pad_2, /* padding */ + pad_3; /* padding */ +// 2nd 16 bytes + unsigned long long + utime, /* user-mode CPU time accumulated by process */ + stime, /* kernel-mode CPU time accumulated by process */ +// and so on... + cutime, /* cumulative utime of process and reaped children */ + cstime, /* cumulative stime of process and reaped children */ + start_time; /* start time of process -- seconds since 1-1-70 */ #ifdef SIGNAL_STRING char /* Linux 2.1.7x and up have more signals. This handles 88. */ @@ -47,12 +66,6 @@ typedef struct proc_t { sigignore, /* mask of ignored signals */ sigcatch; /* mask of caught signals */ #endif - unsigned long long - cutime, /* cumulative utime of process and reaped children */ - cstime, /* cumulative stime of process and reaped children */ - utime, /* user-mode CPU time accumulated by process */ - stime, /* kernel-mode CPU time accumulated by process */ - start_time; /* start time of process -- seconds since 1-1-70 */ long priority, /* kernel scheduling priority */ timeout, /* ? */ @@ -68,7 +81,6 @@ typedef struct proc_t { drs, /* data resident set size */ dt; /* dirty pages */ unsigned long - /* FIXME: are these longs? Maybe when the alpha does PCI bounce buffers */ vm_size, /* same as vsize in kb */ vm_lock, /* locked pages in kb */ vm_rss, /* same as rss in kb */ @@ -114,18 +126,12 @@ typedef struct proc_t { euid, egid, /* effective */ suid, sgid, /* saved */ fuid, fgid, /* fs (used for file access only) */ - pid, /* process id */ - ppid, /* pid of parent process */ pgrp, /* process group id */ session, /* session id */ tty, /* full device number of controlling terminal */ tpgid, /* terminal process group id */ exit_signal, /* might not be SIGCHLD */ processor; /* current (or most recent?) CPU */ - unsigned - pcpu; /* %CPU usage (is not filled in by readproc!!!) */ - char - state; /* single-char code for process state (S=sleeping) */ #ifdef FLASK_LINUX security_id_t sid; #endif diff --git a/top.c b/top.c index 63604158..9a65aa38 100644 --- a/top.c +++ b/top.c @@ -1744,7 +1744,6 @@ static void frame_states (proc_t **ppt, int show) static unsigned hist_siz; // number of structs HIST_t *hist_new; unsigned total, running, sleeping, stopped, zombie; - int i; if (!hist_sav) { Frame_maxtask = 0; @@ -1759,6 +1758,7 @@ static void frame_states (proc_t **ppt, int show) while (-1 != ppt[total]->pid) { /* calculations //// */ TICS_t tics; proc_t *this = ppt[total]; + int i; switch (this->state) { case 'S': @@ -1801,6 +1801,11 @@ static void frame_states (proc_t **ppt, int show) } /* end: while 'pids' */ + free(hist_sav); + hist_sav = hist_new; + /* shout results to the world (and us too, the next time around) */ + Frame_maxtask = total; + if (show) { /* display ///////// */ static CPUS_t *smpcpu = NULL; @@ -1816,6 +1821,7 @@ static void frame_states (proc_t **ppt, int show) /* display just the 1st /proc/stat line */ cpudo(&smpcpu[Cpu_tot], "Cpu(s):"); } else { + int i; char tmp[SMLBUFSIZ]; /* display each cpu's states separately */ for (i = 0; i < Cpu_tot; i++) { @@ -1824,11 +1830,6 @@ static void frame_states (proc_t **ppt, int show) } } } /* end: if 'show' */ - - free(hist_sav); - hist_sav = hist_new; - /* shout results to the world (and us too, the next time around) */ - Frame_maxtask = total; }