]> granicus.if.org Git - procps-ng/commitdiff
library: normalize & minimize result types, <PIDS> api
authorJim Warner <james.warner@comcast.net>
Sun, 31 Jul 2016 05:00:00 +0000 (00:00 -0500)
committerCraig Small <csmall@enc.com.au>
Mon, 1 Aug 2016 10:09:18 +0000 (20:09 +1000)
This commit attempts to minimize the variety of types
currently used. Plus, the following were also changed:

. the MEM fields were switched to parallel the VM guys
. PIDS_MEM_VIRT -> PIDS_MEM_VIRT_PGS
. PIDS_MEM_VIRT_KIB -> PIDS_MEM_VIRT

. made NICE 's_int' so that it then parallels PRIORITY

. change RTPRIO & SCHED_CLASS from 'ul_int' to 's_int'

. removed Item_table 'oldflags' for an obsoleted field
. PIDS_WCHAN_ADDR

. added calculations like TICS_ALL_C for the following
. PIDS_TICS_USER_C
. PIDS_TICS_SYSTEM_C

. these three new 'TICS' fields have been incorporated
. PIDS_TICS_BLKIO - jiffies spent in block i/o
. PIDS_TICS_GUEST - jiffies spent as a guest
. PIDS_TICS_GUEST_C - as above, includes dead children

. that PIDS_TICS_DELTA was renamed PIDS_TICS_ALL_DELTA
( so it did not hide between TICS_BLKIO & TICS_GUEST )
( and to make clearer what's included: utime + stime )

. eliminated 'sl_int' entirely from that result struct

[ often, the <pids> module changes necessitated that ]
[ readproc header and source files had to change too ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
proc/pids.c
proc/pids.h
proc/readproc.c
proc/readproc.h

index 1ad91194e5d0801a9c0101437b2936277a365a33..9260a8ca92b84031a15e11eebe65a746d73a5866 100644 (file)
@@ -134,14 +134,14 @@ static char** vectorize_this (const char* src) {
     else R->result.strv = vectorize_this("[ duplicate " STRINGIFY(e) " ]"); }
 
 
-setDECL(noop)         { (void)I; (void)R; (void)P; return; }
-setDECL(extra)        { (void)I; (void)R; (void)P; return; }
+setDECL(noop)           { (void)I; (void)R; (void)P; return; }
+setDECL(extra)          { (void)I; (void)R; (void)P; return; }
 REG_set(ADDR_END_CODE,    ul_int,  end_code)
 REG_set(ADDR_KSTK_EIP,    ul_int,  kstk_eip)
 REG_set(ADDR_KSTK_ESP,    ul_int,  kstk_esp)
 REG_set(ADDR_START_CODE,  ul_int,  start_code)
 REG_set(ADDR_START_STACK, ul_int,  start_stack)
-REG_set(ALARM,            sl_int,  alarm)
+REG_set(ALARM,            ul_int,  alarm)
 STR_set(CGNAME,                    cgname)
 STR_set(CGROUP,                    cgroup)
 VEC_set(CGROUP_V,                  cgroup_v)
@@ -152,12 +152,12 @@ STR_set(ENVIRON,                   environ)
 VEC_set(ENVIRON_V,                 environ_v)
 REG_set(EXIT_SIGNAL,      s_int,   exit_signal)
 REG_set(FLAGS,            ul_int,  flags)
-REG_set(FLT_MAJ,          sl_int,  maj_flt)
-REG_set(FLT_MAJ_C,        sl_int,  cmaj_flt)
-REG_set(FLT_MAJ_DELTA,    sl_int,  maj_delta)
-REG_set(FLT_MIN,          sl_int,  min_flt)
-REG_set(FLT_MIN_C,        sl_int,  cmin_flt)
-REG_set(FLT_MIN_DELTA,    sl_int,  min_delta)
+REG_set(FLT_MAJ,          ul_int,  maj_flt)
+REG_set(FLT_MAJ_C,        ul_int,  cmaj_flt)
+REG_set(FLT_MAJ_DELTA,    s_int,   maj_delta)
+REG_set(FLT_MIN,          ul_int,  min_flt)
+REG_set(FLT_MIN_C,        ul_int,  cmin_flt)
+REG_set(FLT_MIN_DELTA,    s_int,   min_delta)
 REG_set(ID_EGID,          u_int,   egid)
 REG_set(ID_EGROUP,        str,     egroup)
 REG_set(ID_EUID,          u_int,   euid)
@@ -181,19 +181,19 @@ REG_set(ID_SUSER,         str,     suser)
 REG_set(ID_TGID,          s_int,   tgid)
 REG_set(ID_TPGID,         s_int,   tpgid)
 REG_set(LXCNAME,          str,     lxcname)
-REG_set(MEM_CODE,         sl_int,  trs)
-CVT_set(MEM_CODE_KIB,     sl_int,  trs)
-REG_set(MEM_DATA,         sl_int,  drs)
-CVT_set(MEM_DATA_KIB,     sl_int,  drs)
-REG_set(MEM_DT,           sl_int,  dt)
-REG_set(MEM_LRS,          sl_int,  lrs)
-REG_set(MEM_RES,          sl_int,  resident)
-CVT_set(MEM_RES_KIB,      sl_int,  resident)
-REG_set(MEM_SHR,          sl_int,  share)
-CVT_set(MEM_SHR_KIB,      ul_int,  share)
-REG_set(MEM_VIRT,         sl_int,  size)
-CVT_set(MEM_VIRT_KIB,     sl_int,  size)
-REG_set(NICE,             sl_int,  nice)
+CVT_set(MEM_CODE,         ul_int,  trs)
+REG_set(MEM_CODE_PGS,     ul_int,  trs)
+CVT_set(MEM_DATA,         ul_int,  drs)
+REG_set(MEM_DATA_PGS,     ul_int,  drs)
+REG_set(MEM_DT_PGS,       ul_int,  dt)
+REG_set(MEM_LRS_PGS,      ul_int,  lrs)
+CVT_set(MEM_RES,          ul_int,  resident)
+REG_set(MEM_RES_PGS,      ul_int,  resident)
+CVT_set(MEM_SHR,          ul_int,  share)
+REG_set(MEM_SHR_PGS,      ul_int,  share)
+CVT_set(MEM_VIRT,         ul_int,  size)
+REG_set(MEM_VIRT_PGS,     ul_int,  size)
+REG_set(NICE,             s_int,   nice)
 REG_set(NLWP,             s_int,   nlwp)
 REG_set(NS_IPC,           ul_int,  ns.ns[0])
 REG_set(NS_MNT,           ul_int,  ns.ns[1])
@@ -205,10 +205,10 @@ REG_set(OOM_ADJ,          s_int,   oom_adj)
 REG_set(OOM_SCORE,        s_int,   oom_score)
 REG_set(PRIORITY,         s_int,   priority)
 REG_set(PROCESSOR,        u_int,   processor)
-REG_set(RSS,              sl_int,  rss)
+REG_set(RSS,              ul_int,  rss)
 REG_set(RSS_RLIM,         ul_int,  rss_rlim)
-REG_set(RTPRIO,           ul_int,  rtprio)
-REG_set(SCHED_CLASS,      ul_int,  sched)
+REG_set(RTPRIO,           s_int,   rtprio)
+REG_set(SCHED_CLASS,      s_int,   sched)
 STR_set(SD_MACH,                   sd_mach)
 STR_set(SD_OUID,                   sd_ouid)
 STR_set(SD_SEAT,                   sd_seat)
@@ -224,34 +224,37 @@ DUP_set(SIGPENDING,                _sigpnd)
 REG_set(STATE,            s_ch,    state)
 STR_set(SUPGIDS,                   supgid)
 STR_set(SUPGROUPS,                 supgrp)
-setDECL(TICS_ALL)     { (void)I; R->result.ull_int = P->utime + P->stime; }
-setDECL(TICS_ALL_C)   { (void)I; R->result.ull_int = P->utime + P->stime + P->cutime + P->cstime; }
-REG_set(TICS_DELTA,       sl_int,  pcpu)
+setDECL(TICS_ALL)       { (void)I; R->result.ull_int = P->utime + P->stime; }
+setDECL(TICS_ALL_C)     { (void)I; R->result.ull_int = P->utime + P->stime + P->cutime + P->cstime; }
+REG_set(TICS_ALL_DELTA,   s_int,   pcpu)
+REG_set(TICS_BLKIO,       ull_int, blkio_tics)
+REG_set(TICS_GUEST,       ull_int, gtime)
+setDECL(TICS_GUEST_C)   { (void)I; R->result.ull_int = P->gtime + P->cgtime; }
 REG_set(TICS_SYSTEM,      ull_int, stime)
-REG_set(TICS_SYSTEM_C,    ull_int, cstime)
+setDECL(TICS_SYSTEM_C)  { (void)I; R->result.ull_int = P->stime + P->cstime; }
 REG_set(TICS_USER,        ull_int, utime)
-REG_set(TICS_USER_C,      ull_int, cutime)
-setDECL(TIME_ALL)     { R->result.ull_int = (P->utime + P->stime) / I->hertz; }
-setDECL(TIME_ELAPSED) { R->result.ull_int = (I->boot_seconds >= (P->start_time / I->hertz)) ? I->boot_seconds - (P->start_time / I->hertz) : 0; }
+setDECL(TICS_USER_C)    { (void)I; R->result.ull_int = P->utime + P->cutime; }
+setDECL(TIME_ALL)       { R->result.ull_int = (P->utime + P->stime) / I->hertz; }
+setDECL(TIME_ELAPSED)   { unsigned long long t = P->start_time / I->hertz; R->result.ull_int = I->boot_seconds >= t ? (I->boot_seconds - t) : 0; }
 REG_set(TIME_START,       ull_int, start_time)
 REG_set(TTY,              s_int,   tty)
-setDECL(TTY_NAME)     { char buf[64]; (void)I; dev_to_tty(buf, sizeof(buf), P->tty, P->tid, ABBREV_DEV); R->result.str = strdup(buf); }
-setDECL(TTY_NUMBER)   { char buf[64]; (void)I; dev_to_tty(buf, sizeof(buf), P->tty, P->tid, ABBREV_DEV|ABBREV_TTY|ABBREV_PTS); R->result.str = strdup(buf); }
-REG_set(VM_DATA,          sl_int,  vm_data)
-REG_set(VM_EXE,           sl_int,  vm_exe)
-REG_set(VM_LIB,           sl_int,  vm_lib)
-REG_set(VM_RSS,           sl_int,  vm_rss)
-REG_set(VM_RSS_ANON,      sl_int,  vm_rss_anon)
-REG_set(VM_RSS_FILE,      sl_int,  vm_rss_file)
-REG_set(VM_RSS_LOCKED,    sl_int,  vm_lock)
-REG_set(VM_RSS_SHARED,    sl_int,  vm_rss_shared)
-REG_set(VM_SIZE,          sl_int,  vm_size)
-REG_set(VM_STACK,         sl_int,  vm_stack)
-REG_set(VM_SWAP,          sl_int,  vm_swap)
-setDECL(VM_USED)      { (void)I; R->result.sl_int = P->vm_swap + P->vm_rss; }
+setDECL(TTY_NAME)       { char buf[64]; (void)I; dev_to_tty(buf, sizeof(buf), P->tty, P->tid, ABBREV_DEV); R->result.str = strdup(buf); }
+setDECL(TTY_NUMBER)     { char buf[64]; (void)I; dev_to_tty(buf, sizeof(buf), P->tty, P->tid, ABBREV_DEV|ABBREV_TTY|ABBREV_PTS); R->result.str = strdup(buf); }
+REG_set(VM_DATA,          ul_int,  vm_data)
+REG_set(VM_EXE,           ul_int,  vm_exe)
+REG_set(VM_LIB,           ul_int,  vm_lib)
+REG_set(VM_RSS,           ul_int,  vm_rss)
+REG_set(VM_RSS_ANON,      ul_int,  vm_rss_anon)
+REG_set(VM_RSS_FILE,      ul_int,  vm_rss_file)
+REG_set(VM_RSS_LOCKED,    ul_int,  vm_lock)
+REG_set(VM_RSS_SHARED,    ul_int,  vm_rss_shared)
+REG_set(VM_SIZE,          ul_int,  vm_size)
+REG_set(VM_STACK,         ul_int,  vm_stack)
+REG_set(VM_SWAP,          ul_int,  vm_swap)
+setDECL(VM_USED)        { (void)I; R->result.ul_int = P->vm_swap + P->vm_rss; }
 REG_set(VSIZE_PGS,        ul_int,  vsize)
 REG_set(WCHAN_ADDR,       ul_int,  wchan)
-setDECL(WCHAN_NAME)   { (void)I; R->result.str = strdup(lookup_wchan(P->tid)); }
+setDECL(WCHAN_NAME)     { (void)I; R->result.str = strdup(lookup_wchan(P->tid)); }
 
 #undef setDECL
 #undef CVT_set
@@ -299,7 +302,6 @@ struct sort_parms {
 
 NUM_srt(s_ch)
 NUM_srt(s_int)
-NUM_srt(sl_int)
 
 REG_srt(u_int)
 REG_srt(ul_int)
@@ -389,7 +391,7 @@ static struct {
     { RS(ADDR_KSTK_ESP),     f_stat,     NULL,      QS(ul_int),    0        },
     { RS(ADDR_START_CODE),   f_stat,     NULL,      QS(ul_int),    0        },
     { RS(ADDR_START_STACK),  f_stat,     NULL,      QS(ul_int),    0        },
-    { RS(ALARM),             f_stat,     NULL,      QS(sl_int),    0        },
+    { RS(ALARM),             f_stat,     NULL,      QS(ul_int),    0        },
     { RS(CGNAME),            x_cgroup,   FF(str),   QS(str),       0        },
     { RS(CGROUP),            x_cgroup,   FF(str),   QS(str),       0        },
     { RS(CGROUP_V),          v_cgroup,   FF(strv),  QS(strv),      0        },
@@ -400,12 +402,12 @@ static struct {
     { RS(ENVIRON_V),         v_env,      FF(strv),  QS(strv),      0        },
     { RS(EXIT_SIGNAL),       f_stat,     NULL,      QS(s_int),     0        },
     { RS(FLAGS),             f_stat,     NULL,      QS(ul_int),    0        },
-    { RS(FLT_MAJ),           f_stat,     NULL,      QS(sl_int),    0        },
-    { RS(FLT_MAJ_C),         f_stat,     NULL,      QS(sl_int),    0        },
-    { RS(FLT_MAJ_DELTA),     f_stat,     NULL,      QS(sl_int),    +1       },
-    { RS(FLT_MIN),           f_stat,     NULL,      QS(sl_int),    0        },
-    { RS(FLT_MIN_C),         f_stat,     NULL,      QS(sl_int),    0        },
-    { RS(FLT_MIN_DELTA),     f_stat,     NULL,      QS(sl_int),    +1       },
+    { RS(FLT_MAJ),           f_stat,     NULL,      QS(ul_int),    0        },
+    { RS(FLT_MAJ_C),         f_stat,     NULL,      QS(ul_int),    0        },
+    { RS(FLT_MAJ_DELTA),     f_stat,     NULL,      QS(s_int),     +1       },
+    { RS(FLT_MIN),           f_stat,     NULL,      QS(ul_int),    0        },
+    { RS(FLT_MIN_C),         f_stat,     NULL,      QS(ul_int),    0        },
+    { RS(FLT_MIN_DELTA),     f_stat,     NULL,      QS(s_int),     +1       },
     { RS(ID_EGID),           0,          NULL,      QS(u_int),     0        }, // oldflags: free w/ simple_read
     { RS(ID_EGROUP),         f_grp,      NULL,      QS(str),       0        },
     { RS(ID_EUID),           0,          NULL,      QS(u_int),     0        }, // oldflags: free w/ simple_read
@@ -429,19 +431,19 @@ static struct {
     { RS(ID_TGID),           0,          NULL,      QS(s_int),     0        }, // oldflags: free w/ simple_nextpid
     { RS(ID_TPGID),          f_stat,     NULL,      QS(s_int),     0        },
     { RS(LXCNAME),           f_lxc,      NULL,      QS(str),       0        }, // freefunc NULL w/ cached string
-    { RS(MEM_CODE),          f_statm,    NULL,      QS(sl_int),    0        },
-    { RS(MEM_CODE_KIB),      f_statm,    NULL,      QS(sl_int),    0        },
-    { RS(MEM_DATA),          f_statm,    NULL,      QS(sl_int),    0        },
-    { RS(MEM_DATA_KIB),      f_statm,    NULL,      QS(sl_int),    0        },
-    { RS(MEM_DT),            f_statm,    NULL,      QS(sl_int),    0        },
-    { RS(MEM_LRS),           f_statm,    NULL,      QS(sl_int),    0        },
-    { RS(MEM_RES),           f_statm,    NULL,      QS(sl_int),    0        },
-    { RS(MEM_RES_KIB),       f_statm,    NULL,      QS(sl_int),    0        },
-    { RS(MEM_SHR),           f_statm,    NULL,      QS(sl_int),    0        },
-    { RS(MEM_SHR_KIB),       f_statm,    NULL,      QS(sl_int),    0        },
-    { RS(MEM_VIRT),          f_statm,    NULL,      QS(sl_int),    0        },
-    { RS(MEM_VIRT_KIB),      f_statm,    NULL,      QS(sl_int),    0        },
-    { RS(NICE),              f_stat,     NULL,      QS(sl_int),    0        },
+    { RS(MEM_CODE),          f_statm,    NULL,      QS(ul_int),    0        },
+    { RS(MEM_CODE_PGS),      f_statm,    NULL,      QS(ul_int),    0        },
+    { RS(MEM_DATA),          f_statm,    NULL,      QS(ul_int),    0        },
+    { RS(MEM_DATA_PGS),      f_statm,    NULL,      QS(ul_int),    0        },
+    { RS(MEM_DT_PGS),        f_statm,    NULL,      QS(ul_int),    0        },  // ( always 0 w/ since 2.6 )
+    { RS(MEM_LRS_PGS),       f_statm,    NULL,      QS(ul_int),    0        },
+    { RS(MEM_RES),           f_statm,    NULL,      QS(ul_int),    0        },
+    { RS(MEM_RES_PGS),       f_statm,    NULL,      QS(ul_int),    0        },
+    { RS(MEM_SHR),           f_statm,    NULL,      QS(ul_int),    0        },
+    { RS(MEM_SHR_PGS),       f_statm,    NULL,      QS(ul_int),    0        },
+    { RS(MEM_VIRT),          f_statm,    NULL,      QS(ul_int),    0        },
+    { RS(MEM_VIRT_PGS),      f_statm,    NULL,      QS(ul_int),    0        },
+    { RS(NICE),              f_stat,     NULL,      QS(s_int),     0        },
     { RS(NLWP),              f_either,   NULL,      QS(s_int),     0        },
     { RS(NS_IPC),            f_ns,       NULL,      QS(ul_int),    0        },
     { RS(NS_MNT),            f_ns,       NULL,      QS(ul_int),    0        },
@@ -453,10 +455,10 @@ static struct {
     { RS(OOM_SCORE),         f_oom,      NULL,      QS(s_int),     0        },
     { RS(PRIORITY),          f_stat,     NULL,      QS(s_int),     0        },
     { RS(PROCESSOR),         f_stat,     NULL,      QS(u_int),     0        },
-    { RS(RSS),               f_stat,     NULL,      QS(sl_int),    0        },
+    { RS(RSS),               f_stat,     NULL,      QS(ul_int),    0        },
     { RS(RSS_RLIM),          f_stat,     NULL,      QS(ul_int),    0        },
-    { RS(RTPRIO),            f_stat,     NULL,      QS(ul_int),    0        },
-    { RS(SCHED_CLASS),       f_stat,     NULL,      QS(ul_int),    0        },
+    { RS(RTPRIO),            f_stat,     NULL,      QS(s_int),     0        },
+    { RS(SCHED_CLASS),       f_stat,     NULL,      QS(s_int),     0        },
     { RS(SD_MACH),           f_systemd,  FF(str),   QS(str),       0        },
     { RS(SD_OUID),           f_systemd,  FF(str),   QS(str),       0        },
     { RS(SD_SEAT),           f_systemd,  FF(str),   QS(str),       0        },
@@ -474,7 +476,10 @@ static struct {
     { RS(SUPGROUPS),         x_supgrp,   FF(str),   QS(str),       0        },
     { RS(TICS_ALL),          f_stat,     NULL,      QS(ull_int),   0        },
     { RS(TICS_ALL_C),        f_stat,     NULL,      QS(ull_int),   0        },
-    { RS(TICS_DELTA),        f_stat,     NULL,      QS(sl_int),    +1       },
+    { RS(TICS_ALL_DELTA),    f_stat,     NULL,      QS(s_int),     +1       },
+    { RS(TICS_BLKIO),        f_stat,     NULL,      QS(ull_int),   0        },
+    { RS(TICS_GUEST),        f_stat,     NULL,      QS(ull_int),   0        },
+    { RS(TICS_GUEST_C),      f_stat,     NULL,      QS(ull_int),   0        },
     { RS(TICS_SYSTEM),       f_stat,     NULL,      QS(ull_int),   0        },
     { RS(TICS_SYSTEM_C),     f_stat,     NULL,      QS(ull_int),   0        },
     { RS(TICS_USER),         f_stat,     NULL,      QS(ull_int),   0        },
@@ -485,20 +490,20 @@ static struct {
     { RS(TTY),               f_stat,     NULL,      QS(s_int),     0        },
     { RS(TTY_NAME),          f_stat,     FF(str),   QS(strvers),   0        },
     { RS(TTY_NUMBER),        f_stat,     FF(str),   QS(strvers),   0        },
-    { RS(VM_DATA),           f_status,   NULL,      QS(sl_int),    0        },
-    { RS(VM_EXE),            f_status,   NULL,      QS(sl_int),    0        },
-    { RS(VM_LIB),            f_status,   NULL,      QS(sl_int),    0        },
-    { RS(VM_RSS),            f_status,   NULL,      QS(sl_int),    0        },
-    { RS(VM_RSS_ANON),       f_status,   NULL,      QS(sl_int),    0        },
-    { RS(VM_RSS_FILE),       f_status,   NULL,      QS(sl_int),    0        },
-    { RS(VM_RSS_LOCKED),     f_status,   NULL,      QS(sl_int),    0        },
-    { RS(VM_RSS_SHARED),     f_status,   NULL,      QS(sl_int),    0        },
-    { RS(VM_SIZE),           f_status,   NULL,      QS(sl_int),    0        },
-    { RS(VM_STACK),          f_status,   NULL,      QS(sl_int),    0        },
-    { RS(VM_SWAP),           f_status,   NULL,      QS(sl_int),    0        },
-    { RS(VM_USED),           f_status,   NULL,      QS(sl_int),    0        },
+    { RS(VM_DATA),           f_status,   NULL,      QS(ul_int),    0        },
+    { RS(VM_EXE),            f_status,   NULL,      QS(ul_int),    0        },
+    { RS(VM_LIB),            f_status,   NULL,      QS(ul_int),    0        },
+    { RS(VM_RSS),            f_status,   NULL,      QS(ul_int),    0        },
+    { RS(VM_RSS_ANON),       f_status,   NULL,      QS(ul_int),    0        },
+    { RS(VM_RSS_FILE),       f_status,   NULL,      QS(ul_int),    0        },
+    { RS(VM_RSS_LOCKED),     f_status,   NULL,      QS(ul_int),    0        },
+    { RS(VM_RSS_SHARED),     f_status,   NULL,      QS(ul_int),    0        },
+    { RS(VM_SIZE),           f_status,   NULL,      QS(ul_int),    0        },
+    { RS(VM_STACK),          f_status,   NULL,      QS(ul_int),    0        },
+    { RS(VM_SWAP),           f_status,   NULL,      QS(ul_int),    0        },
+    { RS(VM_USED),           f_status,   NULL,      QS(ul_int),    0        },
     { RS(VSIZE_PGS),         f_stat,     NULL,      QS(ul_int),    0        },
-    { RS(WCHAN_ADDR),        f_stat,     NULL,      QS(ul_int),    0        },
+    { RS(WCHAN_ADDR),        0,          NULL,      QS(ul_int),    0        }, // oldflags: was f_stat, but linux obsoleted
     { RS(WCHAN_NAME),        0,          FF(str),   QS(str),       0        }, // oldflags: tid already free
 
    // dummy entry corresponding to PIDS_logical_end ...
@@ -549,7 +554,7 @@ typedef unsigned long long TIC_t;
 
 typedef struct HST_t {
     TIC_t tics;                        // last frame's tics count
-    long maj, min;                     // last frame's maj/min_flt counts
+    unsigned long maj, min;            // last frame's maj/min_flt counts
     int pid;                           // record 'key'
     int lnk;                           // next on hash chain
 } HST_t;
@@ -626,15 +631,14 @@ static int make_hist (
             return -ENOMEM;
     }
     Hr(PHist_new[nSLOT].pid)  = p->tid;
-    Hr(PHist_new[nSLOT].tics) = tics = (p->utime + p->stime);
     Hr(PHist_new[nSLOT].maj)  = p->maj_flt;
     Hr(PHist_new[nSLOT].min)  = p->min_flt;
+    Hr(PHist_new[nSLOT].tics) = tics = (p->utime + p->stime);
 
     histput(info, nSLOT);
 
     if ((h = histget(info, p->tid))) {
-        tics -= h->tics;
-        p->pcpu = tics;
+        p->pcpu = tics - h->tics;
         p->maj_delta = p->maj_flt - h->maj;
         p->min_delta = p->min_flt - h->min;
     }
@@ -939,7 +943,6 @@ static inline int oldproc_open (
         unsigned flags,
         ...)
 {
-
     va_list vl;
     int *ids;
     int num = 0;
index 5b58e2b5cb6621811c7d7ab207fc72e71789cd27..0b27f8471d9af31d1bd63a707734d3d6c55c6cd2 100644 (file)
@@ -35,7 +35,7 @@ enum pids_item {
     PIDS_ADDR_KSTK_ESP,     //  ul_int
     PIDS_ADDR_START_CODE,   //  ul_int
     PIDS_ADDR_START_STACK,  //  ul_int
-    PIDS_ALARM,             //  sl_int
+    PIDS_ALARM,             //  ul_int
     PIDS_CGNAME,            //     str
     PIDS_CGROUP,            //     str
     PIDS_CGROUP_V,          //    strv
@@ -46,12 +46,12 @@ enum pids_item {
     PIDS_ENVIRON_V,         //    strv
     PIDS_EXIT_SIGNAL,       //   s_int
     PIDS_FLAGS,             //  ul_int
-    PIDS_FLT_MAJ,           //  sl_int
-    PIDS_FLT_MAJ_C,         //  sl_int
-    PIDS_FLT_MAJ_DELTA,     //  sl_int
-    PIDS_FLT_MIN,           //  sl_int
-    PIDS_FLT_MIN_C,         //  sl_int
-    PIDS_FLT_MIN_DELTA,     //  sl_int
+    PIDS_FLT_MAJ,           //  ul_int
+    PIDS_FLT_MAJ_C,         //  ul_int
+    PIDS_FLT_MAJ_DELTA,     //   s_int
+    PIDS_FLT_MIN,           //  ul_int
+    PIDS_FLT_MIN_C,         //  ul_int
+    PIDS_FLT_MIN_DELTA,     //   s_int
     PIDS_ID_EGID,           //   u_int
     PIDS_ID_EGROUP,         //     str
     PIDS_ID_EUID,           //   u_int
@@ -75,19 +75,19 @@ enum pids_item {
     PIDS_ID_TGID,           //   s_int
     PIDS_ID_TPGID,          //   s_int
     PIDS_LXCNAME,           //     str
-    PIDS_MEM_CODE,          //  sl_int
-    PIDS_MEM_CODE_KIB,      //  sl_int
-    PIDS_MEM_DATA,          //  sl_int
-    PIDS_MEM_DATA_KIB,      //  sl_int
-    PIDS_MEM_DT,            //  sl_int
-    PIDS_MEM_LRS,           //  sl_int
-    PIDS_MEM_RES,           //  sl_int
-    PIDS_MEM_RES_KIB,       //  sl_int
-    PIDS_MEM_SHR,           //  sl_int
-    PIDS_MEM_SHR_KIB,       //  sl_int
-    PIDS_MEM_VIRT,          //  sl_int
-    PIDS_MEM_VIRT_KIB,      //  sl_int
-    PIDS_NICE,              //  sl_int
+    PIDS_MEM_CODE,          //  ul_int
+    PIDS_MEM_CODE_PGS,      //  ul_int
+    PIDS_MEM_DATA,          //  ul_int
+    PIDS_MEM_DATA_PGS,      //  ul_int
+    PIDS_MEM_DT_PGS,        //  ul_int
+    PIDS_MEM_LRS_PGS,       //  ul_int
+    PIDS_MEM_RES,           //  ul_int
+    PIDS_MEM_RES_PGS,       //  ul_int
+    PIDS_MEM_SHR,           //  ul_int
+    PIDS_MEM_SHR_PGS,       //  ul_int
+    PIDS_MEM_VIRT,          //  ul_int
+    PIDS_MEM_VIRT_PGS,      //  ul_int
+    PIDS_NICE,              //   s_int
     PIDS_NLWP,              //   s_int
     PIDS_NS_IPC,            //  ul_int
     PIDS_NS_MNT,            //  ul_int
@@ -99,10 +99,10 @@ enum pids_item {
     PIDS_OOM_SCORE,         //   s_int
     PIDS_PRIORITY,          //   s_int
     PIDS_PROCESSOR,         //   u_int
-    PIDS_RSS,               //  sl_int
+    PIDS_RSS,               //  ul_int
     PIDS_RSS_RLIM,          //  ul_int
-    PIDS_RTPRIO,            //  ul_int
-    PIDS_SCHED_CLASS,       //  ul_int
+    PIDS_RTPRIO,            //   s_int
+    PIDS_SCHED_CLASS,       //   s_int
     PIDS_SD_MACH,           //     str
     PIDS_SD_OUID,           //     str
     PIDS_SD_SEAT,           //     str
@@ -120,7 +120,10 @@ enum pids_item {
     PIDS_SUPGROUPS,         //     str
     PIDS_TICS_ALL,          // ull_int
     PIDS_TICS_ALL_C,        // ull_int
-    PIDS_TICS_DELTA,        //  sl_int
+    PIDS_TICS_ALL_DELTA,    //   s_int
+    PIDS_TICS_BLKIO,        // ull_int
+    PIDS_TICS_GUEST,        // ull_int
+    PIDS_TICS_GUEST_C,      // ull_int
     PIDS_TICS_SYSTEM,       // ull_int
     PIDS_TICS_SYSTEM_C,     // ull_int
     PIDS_TICS_USER,         // ull_int
@@ -131,18 +134,18 @@ enum pids_item {
     PIDS_TTY,               //   s_int
     PIDS_TTY_NAME,          //     str
     PIDS_TTY_NUMBER,        //     str
-    PIDS_VM_DATA,           //  sl_int
-    PIDS_VM_EXE,            //  sl_int
-    PIDS_VM_LIB,            //  sl_int
-    PIDS_VM_RSS,            //  sl_int
-    PIDS_VM_RSS_ANON,       //  sl_int
-    PIDS_VM_RSS_FILE,       //  sl_int
-    PIDS_VM_RSS_LOCKED,     //  sl_int
-    PIDS_VM_RSS_SHARED,     //  sl_int
-    PIDS_VM_SIZE,           //  sl_int
-    PIDS_VM_STACK,          //  sl_int
-    PIDS_VM_SWAP,           //  sl_int
-    PIDS_VM_USED,           //  sl_int
+    PIDS_VM_DATA,           //  ul_int
+    PIDS_VM_EXE,            //  ul_int
+    PIDS_VM_LIB,            //  ul_int
+    PIDS_VM_RSS,            //  ul_int
+    PIDS_VM_RSS_ANON,       //  ul_int
+    PIDS_VM_RSS_FILE,       //  ul_int
+    PIDS_VM_RSS_LOCKED,     //  ul_int
+    PIDS_VM_RSS_SHARED,     //  ul_int
+    PIDS_VM_SIZE,           //  ul_int
+    PIDS_VM_STACK,          //  ul_int
+    PIDS_VM_SWAP,           //  ul_int
+    PIDS_VM_USED,           //  ul_int
     PIDS_VSIZE_PGS,         //  ul_int
     PIDS_WCHAN_ADDR,        //  ul_int
     PIDS_WCHAN_NAME         //     str
@@ -170,7 +173,6 @@ struct pids_result {
         signed char         s_ch;
         signed int          s_int;
         unsigned int        u_int;
-        signed long         sl_int;
         unsigned long       ul_int;
         unsigned long long  ull_int;
         char               *str;
index 45169f4516e7a21a714d7898ab2dd0fa9fcd0f31..a79be99078197d5018c6b42b45575e15b8b449cd 100644 (file)
@@ -350,37 +350,37 @@ ENTER(0x220);
         P->fgid = strtol(S,&S,10);
         continue;
     case_VmData:
-        P->vm_data = strtol(S,&S,10);
+        P->vm_data = (unsigned long)strtol(S,&S,10);
         continue;
     case_VmExe:
-        P->vm_exe = strtol(S,&S,10);
+        P->vm_exe = (unsigned long)strtol(S,&S,10);
         continue;
     case_VmLck:
-        P->vm_lock = strtol(S,&S,10);
+        P->vm_lock = (unsigned long)strtol(S,&S,10);
         continue;
     case_VmLib:
-        P->vm_lib = strtol(S,&S,10);
+        P->vm_lib = (unsigned long)strtol(S,&S,10);
         continue;
     case_VmRSS:
-        P->vm_rss = strtol(S,&S,10);
+        P->vm_rss = (unsigned long)strtol(S,&S,10);
         continue;
     case_RssAnon:       // subset of VmRSS, linux-4.5
-        P->vm_rss_anon = strtol(S,&S,10);
+        P->vm_rss_anon = (unsigned long)strtol(S,&S,10);
         continue;
     case_RssFile:       // subset of VmRSS, linux-4.5
-        P->vm_rss_file = strtol(S,&S,10);
+        P->vm_rss_file = (unsigned long)strtol(S,&S,10);
         continue;
     case_RssShmem:      // subset of VmRSS, linux-4.5
-        P->vm_rss_shared = strtol(S,&S,10);
+        P->vm_rss_shared = (unsigned long)strtol(S,&S,10);
         continue;
     case_VmSize:
-        P->vm_size = strtol(S,&S,10);
+        P->vm_size = (unsigned long)strtol(S,&S,10);
         continue;
     case_VmStk:
-        P->vm_stack = strtol(S,&S,10);
+        P->vm_stack = (unsigned long)strtol(S,&S,10);
         continue;
     case_VmSwap: // Linux 2.6.34
-        P->vm_swap = strtol(S,&S,10);
+        P->vm_swap = (unsigned long)strtol(S,&S,10);
         continue;
     case_Groups:
     {   char *nl = strchr(S, '\n');
@@ -551,21 +551,22 @@ ENTER(0x160);
     S = tmp + 2;                 // skip ") "
 
     num = sscanf(S,
-       "%c "
-       "%d %d %d %d %d "
-       "%lu %ld %ld %ld %ld "
-       "%llu %llu %llu %llu "  /* utime stime cutime cstime */
-       "%ld %ld "
-       "%d "
-       "%ld "
-       "%llu "  /* start_time */
-       "%lu "
-       "%ld "
-       "%lu %lu %lu %lu %lu %lu "
-       "%*s %*s %*s %*s " /* discard, no RT signals & Linux 2.1 used hex */
-       "%lu %*u %*u "
-       "%d %d "
-       "%lu %lu",
+       "%c "                      // state
+       "%d %d %d %d %d "          // ppid, pgrp, sid, tty_nr, tty_pgrp
+       "%lu %lu %lu %lu %lu "     // flags, min_flt, cmin_flt, maj_flt, cmaj_flt
+       "%llu %llu %llu %llu "     // utime, stime, cutime, cstime
+       "%d %d "                   // priority, nice
+       "%d "                      // num_threads
+       "%lu "                     // 'alarm' == it_real_value (obsolete, always 0)
+       "%llu "                    // start_time
+       "%lu "                     // vsize
+       "%lu "                     // rss
+       "%lu %lu %lu %lu %lu %lu " // rsslim, start_code, end_code, start_stack, esp, eip
+       "%*s %*s %*s %*s "         // pending, blocked, sigign, sigcatch                      <=== DISCARDED
+       "%lu %*u %*u "             // 0 (former wchan), 0, 0                                  <=== Placeholders only
+       "%d %d "                   // exit_signal, task_cpu
+       "%d %d "                   // rt_priority, policy (sched)
+       "%llu %llu %llu",          // blkio_ticks, gtime, cgtime
        &P->state,
        &P->ppid, &P->pgrp, &P->session, &P->tty, &P->tpgid,
        &P->flags, &P->min_flt, &P->cmin_flt, &P->maj_flt, &P->cmaj_flt,
@@ -582,7 +583,8 @@ ENTER(0x160);
 /* -- Linux 2.0.35 ends here -- */
        &P->exit_signal, &P->processor,  /* 2.2.1 ends with "exit_signal" */
 /* -- Linux 2.2.8 to 2.5.17 end here -- */
-       &P->rtprio, &P->sched  /* both added to 2.5.18 */
+       &P->rtprio, &P->sched,  /* both added to 2.5.18 */
+       &P->blkio_tics, &P->gtime, &P->cgtime
     );
 
     if(!P->nlwp){
@@ -596,7 +598,7 @@ LEAVE(0x160);
 
 static void statm2proc(const char* s, proc_t *restrict P) {
     int num;
-    num = sscanf(s, "%ld %ld %ld %ld %ld %ld %ld",
+    num = sscanf(s, "%lu %lu %lu %lu %lu %lu %lu",
            &P->size, &P->resident, &P->share,
            &P->trs, &P->lrs, &P->drs, &P->dt);
 /*    fprintf(stderr, "statm2proc converted %d fields.\n",num); */
index 7b9f3d2ea2d2014deac8ac5ff981417774e8a74a..ee918310bad0e9cf8c8132aa4de9b0b97f828703 100644 (file)
 
 __BEGIN_DECLS
 
-// ld   cutime, cstime, priority, nice, timeout, alarm, rss,
-// c    state,
-// d    ppid, pgrp, session, tty, tpgid,
-// s    signal, blocked, sigignore, sigcatch,
-// lu   flags, min_flt, cmin_flt, maj_flt, cmaj_flt, utime, stime,
-// lu   rss_rlim, start_code, end_code, start_stack, kstk_esp, kstk_eip,
-// lu   start_time, vsize, wchan,
 
 // This is to help document a transition from pid to tgid/tid caused
 // by the introduction of thread support. It is used in cases where
@@ -44,11 +37,6 @@ typedef struct proc_t {
     int
         tid,            // (special)       task id, the POSIX thread ID (see also: tgid)
         ppid;           // stat,status     pid of parent process
-    long                // next 2 fields are NOT filled in by readproc
-        maj_delta,      // stat (special) major page faults since last update
-        min_delta;      // stat (special) minor page faults since last update
-    unsigned
-        pcpu;           // stat (special)  %CPU usage (is not filled in by readproc!!!)
     char
         state,          // stat,status     single-char code for process state (S=sleeping)
 #ifdef FALSE_THREADS
@@ -65,7 +53,14 @@ typedef struct proc_t {
 // and so on...
         cutime,         // stat            cumulative utime of process and reaped children
         cstime,         // stat            cumulative stime of process and reaped children
-        start_time;     // stat            start time of process -- seconds since 1-1-70
+        start_time,     // stat            start time of process -- seconds since 1-1-70
+        blkio_tics,     // stat            time spent waiting for block IO
+        gtime,          // stat            guest time of the task in jiffies
+        cgtime;         // stat            guest time of the task children in jiffies
+    int                 // next 3 fields are NOT filled in by readproc
+        pcpu,           // stat (special)  elapsed tics for %CPU usage calculation
+        maj_delta,      // stat (special)  major page faults since last update
+        min_delta;      // stat (special)  minor page faults since last update
 #ifdef SIGNAL_STRING
     char
         // Linux 2.1.7x and up have 64 signals. Allow 64, plus '\0' and padding.
@@ -89,12 +84,13 @@ typedef struct proc_t {
         start_stack,    // stat            address of the bottom of stack for the process
         kstk_esp,       // stat            kernel stack pointer
         kstk_eip,       // stat            kernel instruction pointer
-        wchan;          // stat (special)  address of kernel wait channel proc is sleeping in
-    long
-        priority,       // stat            kernel scheduling priority
-        nice,           // stat            standard unix nice level of process
+        wchan,          // stat (special)  address of kernel wait channel proc is sleeping in
         rss,            // stat            identical to 'resident'
-        alarm,          // stat            ?
+        alarm;          // stat            ?
+    int
+        priority,       // stat            kernel scheduling priority
+        nice;           // stat            standard unix nice level of process
+    unsigned long
     // the next 7 members come from /proc/#/statm
         size,           // statm           total virtual memory (as # pages)
         resident,       // statm           resident non-swapped memory (as # pages)
@@ -103,7 +99,7 @@ typedef struct proc_t {
         lrs,            // statm           library resident set (always 0 w/ 2.6)
         drs,            // statm           data+stack resident set (as # pages)
         dt;             // statm           dirty pages (always 0 w/ 2.6)
-    long
+    unsigned long
         vm_size,        // status          equals 'size' (as kb)
         vm_lock,        // status          locked pages (as kb)
         vm_rss,         // status          equals 'rss' and/or 'resident' (as kb)
@@ -115,8 +111,6 @@ typedef struct proc_t {
         vm_swap,        // status          based on linux-2.6.34 "swap ents" (as kb)
         vm_exe,         // status          equals 'trs' (as kb)
         vm_lib,         // status          total, not just used, library pages (as kb)
-        rtprio,         // stat            real-time priority
-        sched,          // stat            scheduling class
         vsize,          // stat            number of pages of virtual memory ...
         rss_rlim,       // stat            resident set size limit?
         flags,          // stat            kernel flags for the process
@@ -145,6 +139,8 @@ typedef struct proc_t {
         *fgroup,        // status          filesystem group name
         *cmd;           // stat,status     basename of executable file in call to exec(2)
     int
+        rtprio,         // stat            real-time priority
+        sched,          // stat            scheduling class
         pgrp,           // stat            process group id
         session,        // stat            session id
         nlwp,           // stat,status     number of threads, or 0 if no clue