]> granicus.if.org Git - procps-ng/commitdiff
top: exploits several <stat> new category calculations
authorJim Warner <james.warner@comcast.net>
Tue, 27 Dec 2016 14:08:08 +0000 (08:08 -0600)
committerCraig Small <csmall@enc.com.au>
Tue, 3 Jan 2017 21:29:44 +0000 (08:29 +1100)
This commit just exploits those new library provisions
for tic categories, introduced in the preceding patch,
which had been prompted by the issue referenced below.

[ ok it also corrects the top graph for system usage ]
[ since this turkey failed to include tics for these ]
[ two interrupts: STAT_TIC_IRQ and STAT_TIC_SOFTIRQ. ]

Reference(s):
https://gitlab.com/procps-ng/procps/issues/48

Signed-off-by: Jim Warner <james.warner@comcast.net>
top/top.c

index d66376e2b863cd0088c72dc15ccbdfc571d494ea..da98ef14864520374c19470798bfda2524969319 100644 (file)
--- a/top/top.c
+++ b/top/top.c
@@ -222,14 +222,17 @@ static struct pids_fetch *Pids_reap;        // for reap or select
 static struct stat_info *Stat_ctx;
 static struct stat_reaped *Stat_reap;
 static enum stat_item Stat_items[] = {
-   STAT_TIC_ID,            STAT_TIC_NUMA_NODE,
-   STAT_TIC_DELTA_USER,    STAT_TIC_DELTA_SYSTEM,
-   STAT_TIC_DELTA_NICE,    STAT_TIC_DELTA_IDLE,
-   STAT_TIC_DELTA_IOWAIT,  STAT_TIC_DELTA_IRQ,
-   STAT_TIC_DELTA_SOFTIRQ, STAT_TIC_DELTA_STOLEN };
+   STAT_TIC_ID,             STAT_TIC_NUMA_NODE,
+   STAT_TIC_DELTA_USER,     STAT_TIC_DELTA_SYSTEM,
+   STAT_TIC_DELTA_NICE,     STAT_TIC_DELTA_IDLE,
+   STAT_TIC_DELTA_IOWAIT,   STAT_TIC_DELTA_IRQ,
+   STAT_TIC_DELTA_SOFTIRQ,  STAT_TIC_DELTA_STOLEN,
+   STAT_TIC_DELTA_SUM_USER, STAT_TIC_DELTA_SUM_SYSTEM,
+   STAT_TIC_DELTA_SUM_TOTAL };
 enum Rel_statitems {
-   stat_ID, stat_NU, stat_US, stat_SY, stat_NI,
-   stat_IL, stat_IO, stat_IR, stat_SI, stat_ST };
+   stat_ID,  stat_NU,  stat_US,  stat_SY,  stat_NI,
+   stat_IL,  stat_IO,  stat_IR,  stat_SI,  stat_ST,
+   stat_USR, stat_SYS, stat_TOT };
         // cpu/node stack results extractor macros, where e=rel enum, x=index
 #define CPU_VAL(e,x) STAT_VAL(e, s_int, Stat_reap->cpus->stacks[x], Stat_ctx)
 #define NOD_VAL(e,x) STAT_VAL(e, s_int, Stat_reap->nodes->stacks[x], Stat_ctx)
@@ -4601,15 +4604,12 @@ all_done:
 static void summary_hlp (struct stat_stack *this, const char *pfx) {
  // a tailored 'results stack value' extractor macro
  #define rSv(E)  TIC_VAL(E, this)
-   SIC_t u_frme, s_frme, n_frme, i_frme, w_frme, x_frme, y_frme, z_frme, tot_frme;
+   SIC_t idl_frme, tot_frme;
    float scale;
 
-   u_frme = rSv(stat_US); s_frme = rSv(stat_SY); n_frme = rSv(stat_NI);
-   i_frme = rSv(stat_IL); w_frme = rSv(stat_IO); x_frme = rSv(stat_IR);
-   y_frme = rSv(stat_SI); z_frme = rSv(stat_ST);
-
-   tot_frme = u_frme + s_frme + n_frme + i_frme + w_frme + x_frme + y_frme + z_frme;
-   if (1 > tot_frme) i_frme = tot_frme = 1;
+   idl_frme = rSv(stat_IL);
+   tot_frme = rSv(stat_TOT);
+   if (1 > tot_frme) idl_frme = tot_frme = 1;
    scale = 100.0 / (float)tot_frme;
 
    /* display some kinda' cpu state percentages
@@ -4623,12 +4623,12 @@ static void summary_hlp (struct stat_stack *this, const char *pfx) {
       };
       char user[SMLBUFSIZ], syst[SMLBUFSIZ], dual[MEDBUFSIZ];
       int ix = Curwin->rc.graph_cpus - 1;
-      float pct_user = (float)(u_frme + n_frme) * scale,
-            pct_syst = (float)s_frme * scale;
+      float pct_user = (float)rSv(stat_USR) * scale,
+            pct_syst = (float)rSv(stat_SYS) * scale;
 #ifndef QUICK_GRAPHS
       int num_user = (int)((pct_user * Graph_adj) + .5),
           num_syst = (int)((pct_syst * Graph_adj) + .5);
-      if (num_user + num_syst > Graph_len) --num_syst;
+      if (num_user + num_syst > Graph_len) num_syst = Graph_len - num_user;
       snprintf(user, sizeof(user), gtab[ix].user, num_user, gtab[ix].type);
       snprintf(syst, sizeof(syst), gtab[ix].syst, num_syst, gtab[ix].type);
 #else
@@ -4640,10 +4640,10 @@ static void summary_hlp (struct stat_stack *this, const char *pfx) {
          , pfx, pct_user, pct_syst, pct_user + pct_syst, Graph_len +4, dual));
    } else {
       show_special(0, fmtmk(Cpu_States_fmts, pfx
-         , (float)u_frme * scale, (float)s_frme * scale
-         , (float)n_frme * scale, (float)i_frme * scale
-         , (float)w_frme * scale, (float)x_frme * scale
-         , (float)y_frme * scale, (float)z_frme * scale));
+         , (float)rSv(stat_US) * scale, (float)rSv(stat_SY) * scale
+         , (float)rSv(stat_NI) * scale, (float)idl_frme * scale
+         , (float)rSv(stat_IO) * scale, (float)rSv(stat_IR) * scale
+         , (float)rSv(stat_SI) * scale, (float)rSv(stat_ST) * scale));
    }
  #undef rSv
 } // end: summary_hlp
@@ -4785,7 +4785,7 @@ numa_nope:
 #ifndef QUICK_GRAPHS
          int num_used = (int)((pct_used * Graph_adj) + .5),
              num_misc = (int)((pct_misc * Graph_adj) + .5);
-         if (num_used + num_misc > Graph_len) --num_misc;
+         if (num_used + num_misc > Graph_len) num_misc = Graph_len - num_used;
          snprintf(used, sizeof(used), gtab[ix].used, num_used, gtab[ix].type);
          snprintf(util, sizeof(util), gtab[ix].misc, num_misc, gtab[ix].type);
 #else