top: add the field 'USED' to top's existing repertoire
After revisiting the issue of a new field, combining 2 existing fields (RES and SWAP), I've decided it indeed makes sense. After all, with the vastly expanded field capability and the ease of adding new fields, it would save some precious horizontal screen real estate while also eliminating some mental/manual user calculations. (everything is perfectly justified plus right margins) (are completely filled, but of course it must be luck) Reference(s): http://www.freelists.org/post/procps/top-enhancements-i-hope http://www.freelists.org/post/procps/top-regression-reports Signed-off-by: Jim Warner <james.warner@comcast.net> top/top.1 | 23 ++++++++++++++--------- top/top.c | 14 ++++++++++++-- top/top.h | 6 ++++++ top/top_nls.c | 3 +++ 4 files changed, 35 insertions(+), 11 deletions(-)
This commit is contained in:
parent
9dd7251ca3
commit
709785e20b
23
top/top.1
23
top/top.1
@ -785,17 +785,22 @@ you'll see '?' displayed.
|
||||
The\fI effective\fR user ID of the task's owner.
|
||||
|
||||
.TP 4
|
||||
34.\fB USER \*(Em User Name \fR
|
||||
34.\fB USED \*(Em Memory in Use (KiB) \fR
|
||||
This field represents the non-swapped \*(MP a task has used (RES) plus
|
||||
the non-resident portion of its address space (SWAP).
|
||||
|
||||
.TP 4
|
||||
35.\fB USER \*(Em User Name \fR
|
||||
The\fI effective\fR user name of the task's owner.
|
||||
|
||||
.TP 4
|
||||
35.\fB VIRT \*(Em Virtual Memory Size (KiB) \fR
|
||||
36.\fB VIRT \*(Em Virtual Memory Size (KiB) \fR
|
||||
The total amount of \*(MV used by the task.
|
||||
It includes all code, data and shared libraries plus pages that have been
|
||||
swapped out and pages that have been mapped but not used.
|
||||
|
||||
.TP 4
|
||||
36.\fB WCHAN \*(Em Sleeping in Function \fR
|
||||
37.\fB WCHAN \*(Em Sleeping in Function \fR
|
||||
Depending on the availability of the kernel link map ('System.map'), this
|
||||
field will show the name or the address of the kernel function in which the
|
||||
task is currently sleeping.
|
||||
@ -807,14 +812,14 @@ Should that occur, your only means of reducing that overhead will be to stop
|
||||
and restart \*(We.
|
||||
|
||||
.TP 4
|
||||
37.\fB nDRT \*(Em Dirty Pages Count \fR
|
||||
38.\fB nDRT \*(Em Dirty Pages Count \fR
|
||||
The number of pages that have been modified since they were last
|
||||
written to \*(AS.
|
||||
Dirty pages must be written to \*(AS before the corresponding physical
|
||||
memory location can be used for some other virtual page.
|
||||
|
||||
.TP 4
|
||||
38.\fB nMaj \*(Em Major Page Fault Count \fR
|
||||
39.\fB nMaj \*(Em Major Page Fault Count \fR
|
||||
The number of\fB major\fR page faults that have occurred for a task.
|
||||
A page fault occurs when a process attempts to read from or write to a
|
||||
virtual page that is not currently present in its address space.
|
||||
@ -822,7 +827,7 @@ A major page fault is when \*(AS access is involved in making that
|
||||
page available.
|
||||
|
||||
.TP 4
|
||||
39.\fB nMin \*(Em Minor Page Fault count \fR
|
||||
40.\fB nMin \*(Em Minor Page Fault count \fR
|
||||
The number of\fB minor\fR page faults that have occurred for a task.
|
||||
A page fault occurs when a process attempts to read from or write to a
|
||||
virtual page that is not currently present in its address space.
|
||||
@ -830,16 +835,16 @@ A minor page fault does not involve \*(AS access in making that
|
||||
page available.
|
||||
|
||||
.TP 4
|
||||
40.\fB nTH \*(Em Number of Threads \fR
|
||||
41.\fB nTH \*(Em Number of Threads \fR
|
||||
The number of threads associated with a process.
|
||||
|
||||
.TP 4
|
||||
41.\fB vMj \*(Em Major Page Fault Count Delta\fR
|
||||
42.\fB vMj \*(Em Major Page Fault Count Delta\fR
|
||||
The number of\fB major\fR page faults that have occurred since the
|
||||
last update (see nMaj).
|
||||
|
||||
.TP 4
|
||||
42.\fB vMn \*(Em Minor Page Fault Count Delta\fR
|
||||
43.\fB vMn \*(Em Minor Page Fault Count Delta\fR
|
||||
The number of\fB minor\fR page faults that have occurred since the
|
||||
last update (see nMin).
|
||||
|
||||
|
14
top/top.c
14
top/top.c
@ -275,6 +275,7 @@ SCB_STRS(UEN, euser)
|
||||
SCB_NUMx(URD, ruid)
|
||||
SCB_STRS(URN, ruser)
|
||||
SCB_NUMx(USD, suid)
|
||||
SCB_NUM2(USE, resident, vm_swap)
|
||||
SCB_STRS(USN, suser)
|
||||
SCB_NUM1(VRT, size)
|
||||
SCB_NUM1(WCH, wchan)
|
||||
@ -1557,6 +1558,7 @@ end_justifies:
|
||||
#define L_OUSER PROC_FILLSTATUS | PROC_FILLUSR
|
||||
#define L_EGROUP PROC_FILLSTATUS | PROC_FILLGRP
|
||||
#define L_SUPGRP PROC_FILLSTATUS | PROC_FILLSUPGRP
|
||||
#define L_USED PROC_FILLSTATUS | PROC_FILLMEM
|
||||
// make 'none' non-zero (used to be important to Frames_libflags)
|
||||
#define L_NONE PROC_SPARE_1
|
||||
// from either 'stat' or 'status' (preferred), via bits not otherwise used
|
||||
@ -1645,7 +1647,12 @@ static FLD_t Fieldstab[] = {
|
||||
#endif
|
||||
{ -1, -1, A_left, SF(ENV), L_ENVIRON },
|
||||
{ 3, -1, A_right, SF(FV1), L_stat },
|
||||
{ 3, -1, A_right, SF(FV2), L_stat }
|
||||
{ 3, -1, A_right, SF(FV2), L_stat },
|
||||
#ifndef NOBOOST_MEMS
|
||||
{ 6, SK_Kb, A_right, SF(USE), L_USED }
|
||||
#else
|
||||
{ 4, SK_Kb, A_right, SF(USE), L_USED }
|
||||
#endif
|
||||
#undef SF
|
||||
#undef A_left
|
||||
#undef A_right
|
||||
@ -2183,7 +2190,7 @@ static void zap_fieldstab (void) {
|
||||
Fieldstab[P_VRT].scale = Fieldstab[P_SWP].scale
|
||||
= Fieldstab[P_RES].scale = Fieldstab[P_COD].scale
|
||||
= Fieldstab[P_DAT].scale = Fieldstab[P_SHR].scale
|
||||
= Rc.task_mscale;
|
||||
= Fieldstab[P_USE].scale = Rc.task_mscale;
|
||||
|
||||
// lastly, ensure we've got proper column headers...
|
||||
calibrate_fields();
|
||||
@ -4981,6 +4988,9 @@ static const char *task_show (const WIN_t *q, const proc_t *p) {
|
||||
case P_USD:
|
||||
cp = make_num(p->suid, W, Jn, P_USD);
|
||||
break;
|
||||
case P_USE:
|
||||
cp = scale_mem(S, (p->vm_swap + pages2K(p->resident)), W, Jn);
|
||||
break;
|
||||
case P_USN:
|
||||
cp = make_str(p->suser, W, Js, P_USN);
|
||||
break;
|
||||
|
@ -185,6 +185,7 @@ enum pflag {
|
||||
#endif
|
||||
P_ENV,
|
||||
P_FV1, P_FV2,
|
||||
P_USE,
|
||||
#ifdef USE_X_COLHDR
|
||||
// not really pflags, used with tbl indexing
|
||||
P_MAXPFLGS
|
||||
@ -462,6 +463,11 @@ typedef struct WIN_t {
|
||||
if ( (*P)->n < (*Q)->n ) return SORT_lt; \
|
||||
if ( (*P)->n > (*Q)->n ) return SORT_gt; \
|
||||
return SORT_eq; }
|
||||
#define SCB_NUM2(f,n1,n2) \
|
||||
static int SCB_NAME(f) (const proc_t **P, const proc_t **Q) { \
|
||||
if ( ((*P)->n1+(*P)->n2) < ((*Q)->n1+(*Q)->n2) ) return SORT_lt; \
|
||||
if ( ((*P)->n1+(*P)->n2) > ((*Q)->n1+(*Q)->n2) ) return SORT_gt; \
|
||||
return SORT_eq; }
|
||||
#define SCB_NUMx(f,n) \
|
||||
static int SCB_NAME(f) (const proc_t **P, const proc_t **Q) { \
|
||||
return Frame_srtflg * ( (*Q)->n - (*P)->n ); }
|
||||
|
@ -254,6 +254,9 @@ static void build_two_nlstabs (void) {
|
||||
/* Translation Hint: maximum 'vMn' = 3 */
|
||||
Head_nlstab[P_FV2] = _("vMn");
|
||||
Desc_nlstab[P_FV2] = _("Minor Faults delta");
|
||||
/* Translation Hint: maximum 'USED' = 4 */
|
||||
Head_nlstab[P_USE] = _("USED");
|
||||
Desc_nlstab[P_USE] = _("Res+Swap Size (KiB)");
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user