top: exploit some of those new smaps_rollup provisions
My, how time flies. Here we are finally attending to a 2 year old issue at long last (well, at least top is). In truth, this change was prompted by that more recent issue #201 and simply represents my initial picks from among those available with the new library provisions. Note: we have to bump that rcfile version whenever new fields are added. That will mean older top programs no longer can read this top's rcfile. But that's Ok since top offers a warning before replacing an older rcfile. Doubtless, more smaps_rollup fields will be introduced under top as we get more experience with this feature. However, any such usage comes with tremendoud costs as was reported for the previous patch and repeated here: Here is a small preview of just what you will discover when using this command line: time top/top -d0 -n1000. ------------------------------------ as a regular user with only PID + RES (statm) real 0m2.605s user 0m1.060s sys 0m1.377s with only PID + RSS (smaps) real 0m26.397s 10x more costly user 0m1.253s sys 0m24.915s ----------------- as a root (thus smaps for all tasks) with only PID + RES (statm) real 0m2.651s user 0m1.177s sys 0m1.286s with only PID + RSS (smaps) real 0m33.040s 12x more costly user 0m1.256s sys 0m31.533s Reference(s): . top/ps: add support for PSS reporting https://gitlab.com/procps-ng/procps/-/issues/112 . ps: expose shared/private memory separately https://gitlab.com/procps-ng/procps/-/issues/201 Signed-off-by: Jim Warner <james.warner@comcast.net>
This commit is contained in:
parent
12543b6c76
commit
b05770d94a
23
top/top.c
23
top/top.c
@ -1671,8 +1671,13 @@ static struct {
|
||||
{ -1, -1, A_left, PIDS_CGNAME }, // str EU_CGN
|
||||
{ 0, -1, A_right, PIDS_PROCESSOR_NODE }, // s_int EU_NMA
|
||||
{ 5, -1, A_right, PIDS_ID_LOGIN }, // s_int EU_LID
|
||||
{ -1, -1, A_left, PIDS_EXE } // str EU_EXE
|
||||
#define eu_LAST EU_EXE
|
||||
{ -1, -1, A_left, PIDS_EXE }, // str EU_EXE
|
||||
{ 6, SK_Kb, A_right, PIDS_SMAP_RSS }, // ul_int EU_RSS
|
||||
{ 6, SK_Kb, A_right, PIDS_SMAP_PSS }, // ul_int EU_PSS
|
||||
{ 6, SK_Kb, A_right, PIDS_SMAP_PSS_ANON }, // ul_int EU_PZA
|
||||
{ 6, SK_Kb, A_right, PIDS_SMAP_PSS_FILE }, // ul_int EU_PZF
|
||||
{ 6, SK_Kb, A_right, PIDS_SMAP_PSS_SHMEM } // ul_int EU_PZS
|
||||
#define eu_LAST EU_PZS
|
||||
// xtra Fieldstab 'pseudo pflag' entries for the newlib interface . . . . . . .
|
||||
#define eu_CMDLINE eu_LAST +1
|
||||
#define eu_TICS_ALL_C eu_LAST +2
|
||||
@ -2312,7 +2317,10 @@ static void zap_fieldstab (void) {
|
||||
= Fieldstab[EU_DAT].scale = Fieldstab[EU_SHR].scale
|
||||
= Fieldstab[EU_USE].scale = Fieldstab[EU_RZA].scale
|
||||
= Fieldstab[EU_RZF].scale = Fieldstab[EU_RZL].scale
|
||||
= Fieldstab[EU_RZS].scale = Rc.task_mscale;
|
||||
= Fieldstab[EU_RZS].scale = Fieldstab[EU_RSS].scale
|
||||
= Fieldstab[EU_PSS].scale = Fieldstab[EU_PZA].scale
|
||||
= Fieldstab[EU_PZF].scale = Fieldstab[EU_PZS].scale
|
||||
= Rc.task_mscale;
|
||||
|
||||
// lastly, ensure we've got proper column headers...
|
||||
calibrate_fields();
|
||||
@ -3589,8 +3597,10 @@ static const char *configs_file (FILE *fp, const char *name, float *delay) {
|
||||
// fall through
|
||||
case 'i': // from 3.3.10 thru 3.3.16
|
||||
scat(w->rc.fieldscur, RCF_PLUS_J);
|
||||
w->rc.double_up = w->rc.combine_cpus = 0;
|
||||
// fall through
|
||||
case 'j': // current RCF_VERSION_ID
|
||||
case 'j': // this is release 3.3.17
|
||||
case 'k': // current RCF_VERSION_ID
|
||||
default:
|
||||
if (strlen(w->rc.fieldscur) != sizeof(DEF_FIELDS) - 1)
|
||||
return p;
|
||||
@ -5872,7 +5882,12 @@ static const char *task_show (const WIN_t *q, struct pids_stack *p) {
|
||||
case EU_COD: // PIDS_MEM_CODE
|
||||
case EU_DAT: // PIDS_MEM_DATA
|
||||
case EU_DRT: // PIDS_noop, really # pgs, but always 0 since 2.6
|
||||
case EU_PZA: // PIDS_SMAP_PSS_ANON
|
||||
case EU_PZF: // PIDS_SMAP_PSS_FILE
|
||||
case EU_PZS: // PIDS_SMAP_PSS_SHMEM
|
||||
case EU_PSS: // PIDS_SMAP_PSS
|
||||
case EU_RES: // PIDS_MEM_RES
|
||||
case EU_RSS: // PIDS_SMAP_RSS
|
||||
case EU_RZA: // PIDS_VM_RSS_ANON
|
||||
case EU_RZF: // PIDS_VM_RSS_FILE
|
||||
case EU_RZL: // PIDS_VM_RSS_LOCKED
|
||||
|
@ -189,6 +189,7 @@ enum pflag {
|
||||
EU_NMA,
|
||||
EU_LID,
|
||||
EU_EXE,
|
||||
EU_RSS, EU_PSS, EU_PZA, EU_PZF, EU_PZS,
|
||||
#ifdef USE_X_COLHDR
|
||||
// not really pflags, used with tbl indexing
|
||||
EU_MAXPFLGS
|
||||
|
@ -311,6 +311,24 @@ static void build_two_nlstabs (void) {
|
||||
/* Translation Hint: maximum 'EXE' = variable */
|
||||
Head_nlstab[EU_EXE] = _("EXE");
|
||||
Desc_nlstab[EU_EXE] = _("Executable Path");
|
||||
/* Translation Hint: With the next 5 fields, notice how an extra space
|
||||
has been added ahead of one 'KiB' so that they all
|
||||
align. You need not preserve such alignment. */
|
||||
/* Translation Hint: maximum 'RSS' = 6 */
|
||||
Head_nlstab[EU_RSS] = _("RSS");
|
||||
Desc_nlstab[EU_RSS] = _("Res Mem (smaps), KiB");
|
||||
/* Translation Hint: maximum 'PSS' = 6 */
|
||||
Head_nlstab[EU_PSS] = _("PSS");
|
||||
Desc_nlstab[EU_PSS] = _("Proportion RSS, KiB");
|
||||
/* Translation Hint: maximum 'PSan' = 6 */
|
||||
Head_nlstab[EU_PZA] = _("PSan");
|
||||
Desc_nlstab[EU_PZA] = _("Proportion Anon. KiB");
|
||||
/* Translation Hint: maximum 'PSfd' = 6 */
|
||||
Head_nlstab[EU_PZF] = _("PSfd");
|
||||
Desc_nlstab[EU_PZF] = _("Proportion File, KiB");
|
||||
/* Translation Hint: maximum 'PSsh' = 6 */
|
||||
Head_nlstab[EU_PZS] = _("PSsh");
|
||||
Desc_nlstab[EU_PZS] = _("Proportion Shrd, KiB");
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user