]> granicus.if.org Git - procps-ng/log
procps-ng
7 years agotop: provide -1 command line switch as 'Cpu(s)' toggle
Jim Warner [Mon, 13 Mar 2017 10:00:00 +0000 (05:00 -0500)]
top: provide -1 command line switch as 'Cpu(s)' toggle

If built without ./configure --disable-modern-top, the
program displays each cpu individually providing there
is sufficient vertical screen real estate. For massive
SMP environments this will necessitate use of a config
file where the cpu summary toggle ('1') could be saved
via the 'W' command. But, an rcfile may not be viable.

So this commit introduces a '1' command line switch to
emulate exactly the effects of the interactive toggle.

And since it is our first numeric switch some existing
parsing logic had to be changed slightly. Such changes
are, in truth, an improvement. For example, instead of
seeing "inappropriate '2'" with ./top -2 we'll now see
the vastly more appropriate error "unknown option '2'.

References(s):
https://gitlab.com/procps-ng/procps/issues/55

[ this patch has been adapted from the master branch ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
7 years agotop: provide -E command line switch for memory scaling
Jim Warner [Mon, 13 Mar 2017 09:00:00 +0000 (04:00 -0500)]
top: provide -E command line switch for memory scaling

In their 3.2.7 version of top, Redhat introduced an -M
switch to automatically scale Summary Area memory data
to avoid truncation (and the resulting '+' indicator).

The procps-ng top does not employ suffixes with memory
data nor does it allow for different scaling with each
separate value. Rather, scaling appears at line start.

If built without ./configure --disable-modern-top, the
Summary Area memory will be scaled at GiB which should
lessen chance of truncation. Otherwise KiB was used to
reflect such memory, increasing the truncation chance.

And while 'W' can be used to preserve some appropriate
scaling value, there are arguments against such rcfile
approaches as cited in the issue and bug report below.

So this commit will bump the Summary Area memory scale
factor from KiB to MiB when using --disable-modern-top
as a concession to that Redhat bug report noted below.

And it also introduces a new command line switch which
can force any desired scaling regardless of the rcfile
or which ./configure option might have been specified.

[ for top's help text we'll show 'E' as if it were a ]
[ switch without arguments in order to keep the help ]
[ text displayable without wrap in an 80x24 terminal ]

[ the man page, however, will show all k-e arguments ]

Reference(s):
https://gitlab.com/procps-ng/procps/issues/53
https://bugzilla.redhat.com/show_bug.cgi?id=1034466

[ this patch has been adapted from the master branch ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
7 years agotop: show fewer decimal places for memory (by default)
Jim Warner [Mon, 13 Mar 2017 08:00:00 +0000 (03:00 -0500)]
top: show fewer decimal places for memory (by default)

After much reflection I've come to the conclusion that
displaying 3 decimal places (usually) when memory data
had been scaled is no longer optimal with today's ever
increasing amounts. And given that not all task memory
fields are the same widths, inconsistencies can easily
arise as illustrated and discussed in the issue below.

Instead of unilaterally reducing the number of decimal
places, this commit will sneak in such a change via an
existing configure option that was very likely unused.

The former 'disable-wide-memory' option has now become
'enable-wide-memory', which can be used if the current
behavior (3 decimal places) is preferred. Without that
option, whenever memory is scaled beyond KiB, just one
decimal place will be shown in Summary and Task areas.

And Task area field width will no longer be changed by
this revised configure option. Instead, all such field
widths will now be fixed at the former maximum values.

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

[ this patch has been adapted from the master branch ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
7 years agotop: correct alphabetic ordering with some enumerators
Jim Warner [Mon, 13 Mar 2017 07:00:00 +0000 (02:00 -0500)]
top: correct alphabetic ordering with some enumerators

[ this patch has been adapted from the master branch ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
7 years agopkill: Return 0 if successfully killed process
Craig Small [Sat, 4 Feb 2017 00:44:01 +0000 (11:44 +1100)]
pkill: Return 0 if successfully killed process

Original report:
When trying kill a process with insufficient privileges (see blow),
pkill displays the error message “... failed: Operation not permitted”,
but returns 0. Surely it should return 3?

$ pkill syslogd ; echo $?
pkill: killing pid 373 failed: Operation not permitted
0

Return value 0 means one of more things matched. For a pgrep (which
shares code with pkill) this makes sense, there was a match. It seems
wrong for pkill to return 0 when it in fact could not do what you told
it to.  However return value 3 means a fatal error and it's not fatal.

Looking at other programs when trying to kill things it cannot kill.
shell kill returns 1, procps kill returns 1, killall returns 1, skill
returns 0 (and says it was successful!, ah well poor old skill)

The consensus seems to be that you return 1 if you cannot kill it, even
if you found it. In other words the return value for both not found and
not able to kill it is the same.

pkill only returns 0 if something was killed. This means we found a
match AND the kill() system call worked too.

References:
 https://bugs.debian.org/852758

Signed-off-by: Craig Small <csmall@enc.com.au>
7 years agoNEWS: Very minor typo fixed
Craig Small [Sat, 4 Feb 2017 00:07:21 +0000 (11:07 +1100)]
NEWS: Very minor typo fixed

Signed-off-by: Craig Small <csmall@enc.com.au>
7 years agoNEWS: updated with the two most recent program changes
Jim Warner [Thu, 26 Jan 2017 06:00:00 +0000 (00:00 -0600)]
NEWS: updated with the two most recent program changes

Signed-off-by: Jim Warner <james.warner@comcast.net>
7 years agotop: adapt the master branch XDG specification support
Jim Warner [Thu, 26 Jan 2017 06:00:00 +0000 (00:00 -0600)]
top: adapt the master branch XDG specification support

This patch adapts a master branch commit to our newlib
branch. Shown below was that original commit msg text.

------------------------------------------------------
top: Add unobtrusive XDG support

By default the file HOME/.toprc will be prefered.  This ensures there
should be minimal breakage even if this file is later created by some
other means.  Otherwise we will follow the new behaviour described by
the XDG Base Directory Specification:

If the XDG_CONFIG_HOME environment variable is available we will attempt
to use this as XDG_CONFIG_HOME/procps/toprc otherwise we will fall-back
to HOME/.config/procps/toprc instead.

Signed-off-by: Earnestly <zibeon@gmail.com>
------------------------------------------------------

Reference(s):
. master branch original
commit 0a0f7d60e309c13c8a399bc2187bed6e3e156b43
. discussion thread
https://gitlab.com/procps-ng/procps/merge_requests/38

Signed-off-by: Jim Warner <james.warner@comcast.net>
7 years agopgrep: warning about 15+ chars name only if zero matches found
Jan Rybar [Thu, 26 Jan 2017 05:52:23 +0000 (16:52 +1100)]
pgrep: warning about 15+ chars name only if zero matches found

This avoids situations where longer regex which matches short-named proc
is used. Test for pgrep updated.

This is the newlib update of 5d12be1b7e8cc690a4d8778754aae5db4c07db2b
Signed-off-by: Craig Small <csmall@enc.com.au>
7 years agodocumentation: Update pids manual pages
Craig Small [Wed, 4 Jan 2017 22:44:04 +0000 (09:44 +1100)]
documentation: Update pids manual pages

Updated the full suite of manual pages for the procps_pids_*
functions. The only one missing is procps_pids_get which
may not be required.

7 years agolibrary <stat>: input file buffer size must be dynamic
Jim Warner [Sat, 31 Dec 2016 06:00:00 +0000 (00:00 -0600)]
library <stat>: input file buffer size must be dynamic

Since its introduction, our evolved /proc/stat API has
relied on a static buffer of 8192 bytes. This approach
is probably Ok for other /proc files but it would only
accommodate around 100 processors. If such a threshold
were exceeded then this interface could never succeed.

Now days 100 processors doesn't seem at all excessive.

So this commit trades that static buffer for a dynamic
self-tuning one. And since so much former top CPU code
was already rolled into this module, we just stole the
already proven top dynamic buffer management code too.

[ this also meant switching low level unbuffered I/O ]
[ calls to standard library buffered I/O calls. that ]
[ is exactly what <slabinfo> and <diskstats> employ. ]

Reference(s):
. 1st gen readstat introduction
commit a410e236abb47c7c43194e61d0566686f81513af

Signed-off-by: Jim Warner <james.warner@comcast.net>
7 years agolibrary <stat>: improve response to cpu offline/online
Jim Warner [Sat, 31 Dec 2016 06:00:00 +0000 (00:00 -0600)]
library <stat>: improve response to cpu offline/online

With the addition of those new derived SUM values, any
CPUs taken offline or brought online would distort the
historical (delta) results.  So this patch just forces
a history reset when such transitions are encountered.

Reference(s):
. derived SUM provisions introduced
commit 2c86c4984a15c9ab912402838c6651f466a3d2ed

Signed-off-by: Jim Warner <james.warner@comcast.net>
7 years agolibrary <slabinfo>: make read function name consistent
Jim Warner [Sat, 31 Dec 2016 06:00:00 +0000 (00:00 -0600)]
library <slabinfo>: make read function name consistent

For each of those interfaces employing a priming read,
all the other 'read' functions begin with the module's
name except this guy which began with 'read_slabinfo'.

Now, they'll all begin with their module name then end
the same with a '_read_failed' boolean hinting suffix.

Signed-off-by: Jim Warner <james.warner@comcast.net>
7 years agolibrary: eliminate distorted history 1st time switches
Jim Warner [Sat, 31 Dec 2016 06:00:00 +0000 (00:00 -0600)]
library: eliminate distorted history 1st time switches

Upon reflection, at the point where the 'priming read'
was introduced, any possibility of history distortions
was also eliminated.  This was true because all of the
'old' (zeroed) data will have been replaced with 'new'
data whenever a user finally calls get, select & reap.

Thus, any DELTA values will automatically reflect that
interval between 'new' and subsequent retrieval calls.

[ diskstats didn't actually employ a 1st time switch ]
[ like the others so we have changed a comment only. ]
[ but that module will retain something similar used ]
[ inside node_update whenever a new node is created. ]

Reference(s):
. priming read added to slabinfo
commit 5d5a52a3804f912f7be8c15f18bf87fe45bbcd99
. priming read added to diskstats
commit ecd64f444593a0badf6db6a27fcbc46a3888551d
. priming read added to meminfo, stat, vmstat
commit 1a2b62c7793f5f6865eec56a6f996e55495725bf

Signed-off-by: Jim Warner <james.warner@comcast.net>
7 years agotop: exploits several <stat> new category calculations
Jim Warner [Tue, 27 Dec 2016 14:08:08 +0000 (08:08 -0600)]
top: exploits several <stat> new category calculations

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>
7 years agolibrary <stat>: standardized new category calculations
Jim Warner [Tue, 27 Dec 2016 14:08:08 +0000 (08:08 -0600)]
library <stat>: standardized new category calculations

This commit arose out of the discussion (and research)
surrounding the issue cited below. It is an attempt to
consolidate and standardize the calculation of jiffies
categories (e.g. 'idle', 'busy', etc.) once & for all.

Also included is the enum STAT_TIC_NUM_CONTRIBUTORS in
case anyone, in the future, decides to calculate usage
based upon elapsed time * Hz (like top does in process
level %CPU stats). In such an event, a total number of
CPUs or NUMA Nodes would be needed for proper scaling.

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

Signed-off-by: Jim Warner <james.warner@comcast.net>
7 years agolibrary: ensure 'namespace' types treated consistently
Jim Warner [Mon, 5 Dec 2016 13:07:07 +0000 (07:07 -0600)]
library: ensure 'namespace' types treated consistently

Unlike the ps kludge under the master branch to ensure
that namespaces appear the same under both 32 & 64-bit
models, this newlib branch already used a proper type.

However source data still carried the original type as
'signed long' versus that more proper 'unsigned long'.

So, this patch makes sources & destinations identical.

Reference(s):
. master branch ps kludge
commit c41c614b0c038d9374191f545259d9d70c451316

Signed-off-by: Jim Warner <james.warner@comcast.net>
7 years agops: finish purging those references to PIDS_WCHAN_ADDR
Jim Warner [Sun, 4 Dec 2016 23:17:17 +0000 (17:17 -0600)]
ps: finish purging those references to PIDS_WCHAN_ADDR

Aw shucks, not all support for this defunct enumerator
was removed via the commits shown below (but, is now).

[ what remained were just variables named after that ]
[ deprecated/deleted enumerator, but still & all ... ]

[ plus, i have left the doc/libproc.3 file untouched ]
[ since it already appears badly out of date anyway! ]

Reference(s):
. ps references partially purged
commit 66c4024d759fb1fa8ebaa2e608368c561cd21ff6
. enumerator purged from library
commit 912075605b9bb68474032d6d8c70d1d97dc2aeff

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: don't strip off prefixes from the wchan names
Jan Rybar [Sun, 4 Dec 2016 13:14:14 +0000 (14:14 +0100)]
library: don't strip off prefixes from the wchan names

This commit will resolve the RedHat Bugzilla #1322111.

[ import from identical commit against master branch ]
[ but without trailing whitespace, thank you so much ]

Imported by: Jim Warner <james.warner@comcast.net>

8 years agops: now made responsive to 32 or 64-bit address widths
Jim Warner [Sat, 3 Dec 2016 09:03:03 +0000 (03:03 -0600)]
ps: now made responsive to 32 or 64-bit address widths

While a Debian bug report referenced below was limited
to the 'eip' and 'esp' fields, this patch also extends
address width adaptations to some other addresses too.

[ and, we do so in a far less invasive manner than a ]
[ redhat approach shown below adding two new fields! ]

Reference(s):
. new debian bug report
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=846361
. old redhat solution
https://bugzilla.redhat.com/show_bug.cgi?id=244152

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: accumulated miscellaneous code/comment tweaks
Jim Warner [Thu, 24 Nov 2016 18:12:12 +0000 (12:12 -0600)]
library: accumulated miscellaneous code/comment tweaks

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agotop: accumulated misc tweaks to code/comments/man page
Jim Warner [Wed, 23 Nov 2016 17:11:11 +0000 (11:11 -0600)]
top: accumulated misc tweaks to code/comments/man page

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: protect against possible 'refcount' underflow
Jim Warner [Tue, 22 Nov 2016 15:10:10 +0000 (10:10 -0500)]
library: protect against possible 'refcount' underflow

In each module employing a priming read at 'new' time,
should that read fail, a call to 'unref' will be made.

However, there is a hidden dependency that these calls
must never occur before the context 'refcount' was set
due to the way an 'unref' conditional was constructed.

So this commit just ensures that 'unref' will function
as expected, even if called with a 'refcount' of zero.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agops: recognize SCHED_DEADLINE
Martin Polednik [Mon, 7 Nov 2016 09:23:01 +0000 (10:23 +0100)]
ps: recognize SCHED_DEADLINE

8 years agotop: tweak some stuff relating to non-displayed fields
Jim Warner [Tue, 11 Oct 2016 05:00:00 +0000 (00:00 -0500)]
top: tweak some stuff relating to non-displayed fields

In the commit referenced below, in addition to several
tweaks to comments, 3 fields were no longer assured of
being present in the results stacks. However, 2 of the
3 fields might, in fact, be required even if they were
not currently being displayed in any of the 4 windows.

The PIDS_CMD is used in two separate 'Inspect' headers
('Y' command) and the PIDS_ID_EUID is required if that
'User Filter' ('u' or 'U' command) was being employed.

That latter field's inclusion will be made conditional
but the former field must be unconditionally included.

( for old top, PIDS_CMD would have always been there )

Reference(s):
commit 4e4debda9bd7a56c99c5a6ce80f6c7e1e0da79cd

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agops: respond to loss of that PIDS_WCHAN_ADDR enumerator
Jim Warner [Fri, 7 Oct 2016 10:55:55 +0000 (05:55 -0500)]
ps: respond to loss of that PIDS_WCHAN_ADDR enumerator

No longer will ps print nwchan as 'ffffff', '-' or '1'
since the proc/PID/stat wchan field didn't represent a
real address anyway. Rather, the field will henceforth
output a dash ('-'), the ps customary 'not available'.

That man document was also tweaked to better represent
actual behavior. An asterisk ('*') was never shown for
threaded tasks and that dash ('-') usually didn't mean
running tasks (sometimes associated with permissions).

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary <stat>: remove that PIDS_WCHAN_ADDR enumerator
Jim Warner [Fri, 7 Oct 2016 09:44:44 +0000 (04:44 -0500)]
library <stat>: remove that PIDS_WCHAN_ADDR enumerator

Removing the Item_table 'stat' oldflags for WCHAN_ADDR
was wrong since that 'stat' field is not a constant 0.
Rather, it could assume these 3 values: -1, 0, and +1.

I have not been able to pin down a '-1' result, but it
probably means some sort of permission error (-EPERM).

The '1' or '0' values were supposed to distinguish the
tasks that were or were not blocked (whether there was
a wchan address). However, in practice there is little
correlation between those values and availability of a
kernel symbol in /proc/$$/wchan (perhaps due to race).

Anyway, the real point is that a 'stat' wchan does not
now intentionally contain an address. Thus, outputting
'ffffff', '-' or '1' in programs like ps is senseless.

So this patch just eliminates PIDS_WCHAN_ADDR from our
item enumerators leaving only the PIDS_WCHAN_NAME guy.
Now the new library can't be blamed for bad addresses!

Reference(s):
. removed Item_table 'oldflags'
commit c4aa6c0ab4263976b2abbc5df0068d5a1612d731
. linux removal of wchan addresses
commit b2f73922d119686323f14fbbe46587f863852328

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agotop: make that 'forest view' just a tad more efficient
Jim Warner [Fri, 7 Oct 2016 07:22:22 +0000 (02:22 -0500)]
top: make that 'forest view' just a tad more efficient

It makes no sense to begin our tracked nested level at
'1' then later require a '1' to be subtracted from the
level as artwork and indentation is added for display.

By beginning such tracked levels at zero, we can avoid
the need to adjust it & use it directly in a snprintf.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agotop: just cosmetic changes, absolutely no code altered
Jim Warner [Fri, 7 Oct 2016 06:11:11 +0000 (01:11 -0500)]
top: just cosmetic changes, absolutely no code altered

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agotop: adapt for loss of fields obsoleted with linux 2.6
Jim Warner [Wed, 28 Sep 2016 18:13:13 +0000 (13:13 -0500)]
top: adapt for loss of fields obsoleted with linux 2.6

It would have been nice to remove this 'nDRT' guy from
the fields management screen and man document as well.
But, while this version of top could be made to handle
an older rcfile, the reverse would not have been true.

Besides, it's been zero for so long already we'll just
include a 'deprecated' note in top's man page for now.

[ the 'nTH ' field number was corrected in there too ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agops: respond to loss of fields obsoleted with linux 2.6
Jim Warner [Wed, 28 Sep 2016 17:12:12 +0000 (12:12 -0500)]
ps: respond to loss of fields obsoleted with linux 2.6

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary <pids>: remove fields obsoleted with linux 2.6
Jim Warner [Wed, 28 Sep 2016 16:11:11 +0000 (11:11 -0500)]
library <pids>: remove fields obsoleted with linux 2.6

It seems inappropriate to blindly include fields known
to always be zero in our brand new library. Therefore,
this patch removes support for three such enumerators.

[ that stat 'it_real_value' (PIDS_ALARM) field could ]
[ have been made obsolete before a linux 2.6 release ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: strictly cosmetic, absolutely no code changes
Jim Warner [Wed, 28 Sep 2016 15:10:10 +0000 (10:10 -0500)]
library: strictly cosmetic, absolutely no code changes

This commit just contains some tweaks to comments plus
a few adjustments to whitespace for alignment purposes
and a normalization of the header inclusion #define's.

[ plus a spelling error in one header file was fixed ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary <stat>: added overlooked numa guest tic counts
Jim Warner [Wed, 21 Sep 2016 13:08:08 +0000 (08:08 -0500)]
library <stat>: added overlooked numa guest tic counts

When this module was upgraded to 3rd generation in the
patch referenced below, numa node support was migrated
from the top program into newlib. The 'guest_nice' and
'guest' tics were overlooked as top did not need them.

So, this commit corrects that oversight and achieves a
proper symmetry between the cpu & numa jiffies counts.

Reference(s):
. 3rd gen redesign, numa support imported
commit abc71a46ada71b790eb526d6cddb91e0d0aed4cb

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agomisc: remove some newly introduced trailing whitespace
Jim Warner [Wed, 21 Sep 2016 12:07:07 +0000 (07:07 -0500)]
misc: remove some newly introduced trailing whitespace

Maybe some folks still need a few .gitconfig tweaks to
catch the trailing whitespace errors a little earlier.

Or, at the least, after a local commit they should do:
$ git diff HEAD~1

[ and then check if git marks any with his red blobs ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: add priming read at 'new' time <most modules>
Jim Warner [Sat, 17 Sep 2016 09:44:44 +0000 (04:44 -0500)]
library: add priming read at 'new' time <most modules>

A priming read at 'new' time in that <slabinfo> module
was important so that permission problems are detected
early. Plus, it also had the potential of making delta
values valid when 'get' or 'select' were first called.

It is for that latter reason that such a read was also
incorporated in the <diskstats> module 'new' function.
No other module, however, employed such priming reads.

This patch just brings those potential benefits to all
of our other newlib modules with the exception of that
<pids> guy. That module is, of necessity, sufficiently
different from those others to justify such exclusion.

Not only are there precious few DELTA enums in <pids>,
but the costs of a priming read would be much greater.

[ otherwise, these newly added priming reads have no ]
[ measurable negative impact on performance/timings. ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: summary name now more descriptive, <slabinfo>
Jim Warner [Sat, 17 Sep 2016 08:33:33 +0000 (03:33 -0500)]
library: summary name now more descriptive, <slabinfo>

The <slabinfo> header provides 3 groups of enumerators
with prefixes of SLABINFO, SLABS & SLABNODE. The first
is strictly user oriented & isn't supported internally
by any structure. The other two, however, have structs
associated with 'em but, unfortunately, 1 is misnamed.

The 'struct slabs_node' is associated with 'nodes' and
supports the enumerators with the SLABNODE prefix. But
the 'struct slabs_hist' was associated with 'hist' yet
supports those enumerators with just the SLABS prefix.

We do not care very much what some structure is called
but we do care about an identifier used manipulate it.

This patch will trade the 'hist' identifier associated
with 'struct slabs_hist' for a more congruous 'slabs'.

[ it's awful when the author can't remember what the ]
[ true meaning of an identifier is after creating it ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: improve support of dynamic numa nodes, <stat>
Jim Warner [Sat, 17 Sep 2016 07:22:22 +0000 (02:22 -0500)]
library: improve support of dynamic numa nodes, <stat>

If, in fact, numa nodes are dynamic (like that current
total of on-line cpus) the existing logic was lacking.
It included an early return before checking the total.

So, this commit ensures that the nodes total is always
set or updated consistently in only a single function.
There's no need to set it at the time 'new' is called.

[ and since under our existing code this nodes total ]
[ could never possibly have been zero, the erroneous ]
[ test (with the early return) has now been whacked! ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agotop: remove explicit references to NUMA_DISABLE define
Jim Warner [Sat, 17 Sep 2016 06:11:11 +0000 (01:11 -0500)]
top: remove explicit references to NUMA_DISABLE define

Since our library is responsible for NUMA support, and
since the top program already accommodates the lack of
NUMA data, there's no reason that #define NUMA_DISABLE
need be explicitly referenced in the top source files.

Ergo, this commit just eliminates all such references.
Now, top will rely only on procps_stat_reap() results.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agoNOTES now contain mention of sysctl(8)
Jan Rybar [Mon, 19 Sep 2016 17:02:47 +0000 (19:02 +0200)]
NOTES now contain mention of sysctl(8)

8 years agoNEWS: updated with most recent copy from master branch
Jim Warner [Tue, 13 Sep 2016 13:08:08 +0000 (08:08 -0500)]
NEWS: updated with most recent copy from master branch

This just brings the newlib branch NEWS into line with
the current version from our master branch since those
changes have already been incorporated in this branch.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: finally circumvent libnuma memory leak <stat>
Jim Warner [Mon, 12 Sep 2016 20:15:15 +0000 (15:15 -0500)]
library: finally circumvent libnuma memory leak <stat>

Still unhappy with a minor memory leak associated with
libnuma, I experimented with omitting the dlclose that
was issued at module's end. For some reason which will
remain a mystery, the valgrind leak then went bye-bye.

So this patch just omits one use of dlclose and relies
on whatever kernel magic is at work to free the memory
when each process ends. We kept, however, the original
code (now commented-out) to serve as a future caution.

There remains one potential (but unlikely) dlclose use
near the original dlopen. But there will be no leak as
that 'numa_node_of_cpu' will not yet have been called.
This seems to be the culprit that triggers such leaks.

None of this libnuma shit would likely have come close
to hitting our fan had the numa developers provided us
with 'new' and 'unref' functions like our newlib does.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agodocs: Remove old library man pages
Craig Small [Sun, 11 Sep 2016 01:20:03 +0000 (11:20 +1000)]
docs: Remove old library man pages

8 years agopgrep: add warning that pattern exceeeds 15 chars
Craig Small [Sun, 11 Sep 2016 00:40:47 +0000 (10:40 +1000)]
pgrep: add warning that pattern exceeeds 15 chars

Add a warning if you specify a command over 15 characters and don't
use the -f command.

This is a pick of two patches from master:
 24fd260 pgrep: Fix off by one error in line check
 4a7f9fc pgrep - adds warning that pattern exceeds 15 chars without

References:
 !25

8 years agokill: Fix free() with bad pointer on SIG-prefixed signal-name
Olof Sivertsson [Thu, 8 Sep 2016 06:32:43 +0000 (08:32 +0200)]
kill: Fix free() with bad pointer on SIG-prefixed signal-name

kill -l SIGHUP (or any other signal-name prefixed with "SIG")
would cause free() to be called with a bad pointer instead of
a pointer to what was allocated. Fix this and add test-case.

8 years agopmap: fix printing bug associated with the '-x' option
Jim Warner [Fri, 9 Sep 2016 10:55:55 +0000 (05:55 -0500)]
pmap: fix printing bug associated with the '-x' option

Ever since its introduction, the 'x' (extended format)
option has employed strncmp to parse those smaps keys.

Such an approach worked well as long as those prefixes
were guaranteed to be unique. But, with the 4.3 kernel
a new 'SwapPss' field was added to those within smaps.

That triggered a 2nd match for the 'Swap' logic which,
in turn, resulted in a duplicate output line of zeros.

So this patch just trades strncmp for strcmp, avoiding
potential future problems when /proc/$$/smaps evolves.

Reference(s):
. recent bug report
https://bugzilla.redhat.com/show_bug.cgi?id=1374061
. linux 4.3 kernel introduces SwapPss
commit 8334b96221ff0dcbde4873d31eb4d84774ed8ed4
. original pmap -x option introduction
commit 380cc1e9082d662d09dd80fcbb73de9dc98b3ea1

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: normalize stack and history allocation naming
Jim Warner [Fri, 9 Sep 2016 09:44:44 +0000 (04:44 -0500)]
library: normalize stack and history allocation naming

Recent profiling and timings have resulted in improved
newlib performance. This patch completes that process.

It just normalizes naming conventions employed for all
allocations involving reaped stacks & history support.

The modules offering a 'reap' function will also offer
the now standardized corresponding STACKS_INCR define.

The modules which provide dynamic history support will
now have a separate #define called NEWOLD_INCR used in
allocations/reallocations. And, while values currently
are set equal to that STACKS_INCR value, in the future
some reason for divorcing those two may be discovered.

----------------------------- for future reference ---

In those modules which contain the STACKS_INCR #define
it is tempting to specify a large value so as to avoid
repeated calls to malloc/realloc. However, in doing so
an extra runtime price will be paid in 'cleanup_stack'
calls with any iterative programs like top or slabtop.

So, with the current values a balance has been sought.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agotop: correct comments & code regarding sysinfo_refresh
Jim Warner [Fri, 9 Sep 2016 08:33:33 +0000 (03:33 -0500)]
top: correct comments & code regarding sysinfo_refresh

This commit just brings some comments plus identifiers
into agreement with the current newlib implementation.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: Don't use SIGPWR on FreeBSD
Jon Boden [Sun, 28 Aug 2016 09:19:05 +0000 (19:19 +1000)]
library: Don't use SIGPWR on FreeBSD

FreeBSD doesn't have SIGPWR so makes no sense in warning and assuming
its 29.

Picked from master, but the file has moved from proc/sig.c to
library/signals.c

References:
 commit 8abd0c92ab7576280b2a601c12ff749ab41c117f
 https://bugs.debian/org/832148

Signed-off-by: Craig Small <csmall@enc.com.au>
8 years agotop: avoid yet more overhead of accessing /proc/status
Jim Warner [Sun, 21 Aug 2016 05:00:00 +0000 (00:00 -0500)]
top: avoid yet more overhead of accessing /proc/status

After discovering those terrible costs associated with
/proc/status vs. /proc/stat, our library changed so as
to favor the latter if a field could be met by either.

Well, low-and-behold, this top program had chosen some
item enumerators that needlessly caused 'status' to be
accessed when 'statm' could be used instead. And while
top's needs require conversion from pages to KiB, that
is still far less costly than that damn 'status' file.

[ this was found when comparing newlib top against a ]
[ 3.2.8 ancient top since the current master top was ]
[ suffering from the exact same 'status' deficiency. ]

[ and, no way was top-3.2.8 going to beat newlib top ]
[ by 50% - we'll allow only a 1-10% occasional loss! ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: revert one ancient 'escape_str_utf8' deletion
Jim Warner [Sun, 21 Aug 2016 05:00:00 +0000 (00:00 -0500)]
library: revert one ancient 'escape_str_utf8' deletion

Profiling revealed a large amount of time spent in the
'escape_str_utf8' function (escape.c) with both of our
NLS branches (newlib and master). That same result was
not seen under an ancient top-3.2.8 program & library.

Well, the 3.2.8 result was ultimately explained by the
absence of a 'setlocale', necessary under NLS support.
Thus, when that ancient library tested for locale, all
it got was 'ANSI_...' & assumed 'UTF-8' wasn't active.

But after a hack to that ancient code to place it on a
par with newlib/master, I still found cost differences
that led me to revisit an old change referenced below.

It turns out that 'iswprint' costs far more than would
a call of 'isprint', even with the extra support code.
So this commit just reverts that five year old change.

Reference(s):
commit 7b0fc19e9d28380dc9790615b93bc3653d6d686e

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: miscellaneous additional efficiencies, <pids>
Jim Warner [Sun, 21 Aug 2016 05:00:00 +0000 (00:00 -0500)]
library: miscellaneous additional efficiencies, <pids>

This patch contains the following miscellaneous stuff:

. The pids_stacks_fetch() routine might call for newly
allocated stacks to be itemized. However, that job was
already tended to by the pids_stacks_alloc() function.

So, this patch just eliminates a redundant invocation.
------------------------------------------------------

. The concept of 'dirty_stacks' has not kept pace with
the evolving stacks implementation. Originally, stacks
were considered dirty only if free() of dynamic memory
was needed before refreshing any single result struct.

Later, with the introduction of the 'extra' item and a
promise to reset it to zero, 'dirty' was much broader.

So, this patch just treats the dirty flg as others do.
------------------------------------------------------

. Lastly, a word or three about performance & timings.

Tuning efforts concentrated on the <pids> API and top.
And unless an oldlib equivalent to the preceding patch
is applied (favoring stat vs. status), newlib top will
often outperform the oldlib version (obviously wrong).

So assuming /proc/stat is preferred in both libraries,
generally speaking, a cpu and elapsed time increase of
1-5% was found for this new stacks oriented interface.
Of course, there's also an increased memory footprint.

There are some occasions, however, when the newlib top
is at a substantial disadvantage. For example if WCHAN
or TTY is displayed, such items will be present in all
newlib reaped stacks (i.e. every process). But old top
would only incur such overhead with displayable tasks.

Thus, oldlib top could outperform newlib by up to 25%,
for example, if only fields requiring NO library flags
were displayed. However, such a scenario is not likely
since only GID, UID, PID, TGID & WCHAN would be shown.
In the usual case, that overhead associated with WCHAN
and/or TTY is overshadowed by other top runtime costs.

All in all a pleasing outcome I deem quite acceptable.
------------------------------------------------------

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: prefer /proc/stat before /proc/status, <pids>
Jim Warner [Sun, 21 Aug 2016 05:00:00 +0000 (00:00 -0500)]
library: prefer /proc/stat before /proc/status, <pids>

Long ago, in a galaxy far away (when top was in charge
of library FILL flgs) /proc/status was to be preferred
over /proc/stat if a field could be satisfied by both.

This was done to avoid costly 64-bit math emulation in
a 32-bit application due to 'unsigned long long' data.

Well it's time to acknowledge the prevalence of 64-bit
platforms. And in such an environment the cost picture
has shifted significantly. It now costs 14 times (wow)
as much to access /proc/status compared to /proc/stat.

In other words, even with '%llu' variables, a sscanf()
call in stat2proc() beats the pants off that home brew
gperf based hashing employed by the status2proc() guy.
In fact, status2proc incurs higher costs than found in
the most expensive aspect of top's forest view option.

Here's a gprof extract to illustrate the costs. It was
produced with an rcfile requiring fields from both the
/proc/stat & /proc/status pseudo files (among others).
There were 5000 iterations in each of 4 separate gprof
runs subsequently merged into 1 gmon.sum for analysis.

  %      self              self
 time   seconds    calls  us/call  name
 -----  -------  -------  -------  -----------
 28.65     4.10  4689423     0.87  status2proc
 26.14     3.74    40000    93.50  forest_adds
 ...
 01.96     0.28  4689427     0.06  stat2proc

[ since forest_adds is recursive, the calls value is ]
[ the non-recursive #, its 'call graph' shows totals ]

Anyway, now that such cost is known this patch becomes
what is euphemistically known as the usual no-brainer.

[ jeeze, was it really this long between profilings? ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agotop: minimized default fields requested of our library
Jim Warner [Sun, 21 Aug 2016 05:00:00 +0000 (00:00 -0500)]
top: minimized default fields requested of our library

After doing some profiling and timings, then comparing
newlib top to the existing 3.3.12 version, I concluded
top should avoid stack results unless actually needed.

Not only will stack depth be kept to minimums, but the
new library can save some otherwise wasted pathlength.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: most function names now more profile friendly
Jim Warner [Sun, 21 Aug 2016 05:00:00 +0000 (00:00 -0500)]
library: most function names now more profile friendly

This patch will begin some refinements associated with
gprof. Initially, functions names have been changed to
help in identifying potential bottlenecks. This effort
also included the obscure set, free and sort routines.

Plus the following additional modifications were made:

. the stacks_alloc prologue was generalized plus added
to a couple of modules where it had not yet propagated

. a couple of the '// end ...' comments were corrected

. some functions have been formally tagged as 'inline'

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agofree: french translation alignment
Christophe Drevet-Droguet [Wed, 6 Apr 2016 14:27:50 +0000 (16:27 +0200)]
free: french translation alignment

8 years agolibrary: expand fields and break an ABI, <MEMINFO> api
Jim Warner [Thu, 11 Aug 2016 16:11:11 +0000 (11:11 -0500)]
library: expand fields and break an ABI, <MEMINFO> api

The immediately prior commit demonstrated how our APIs
might be expanded in at some point in the future while
maintaining binary compatibility in previous programs.

However, since we've yet to release the 1st version of
our new library, there's no need to violate alphabetic
ordering just yet. So, this patch restores that order.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: expand fields yet maintain ABI, <MEMINFO> api
Jim Warner [Thu, 11 Aug 2016 15:10:10 +0000 (10:10 -0500)]
library: expand fields yet maintain ABI, <MEMINFO> api

With the 4.8 kernel, 2 new fields will be added to the
meminfo pseudo file. This commit, soon to be replaced,
is intended as an example of how such changes might be
incorporated plus still maintain binary compatibility.

This actually goes further than is strictly necessary,
by retaining meminfo_item ordering for 'set' functions
and the creation of hash table entries. However, there
is only 1 true requirement, that of Item_table entries
which must always agree exactly with item enumerators.
All of the other changes could be done alphabetically.

Ok, so what happens when an old program encounters the
new expanded meminfo items? Well, if it was thoroughly
tested against an old library, it won't even see those
new fields. On the other hand, if it somehow exceeds a
previous MEMINFO_logical_end, then it will just get an
extra result structure or two, with no real harm done.

[ this patch is being replace by the very next patch ]
[ so that our iniitial newlib release can maintain a ]
[ strict alphabetic ordering in all areas initially! ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agomisc: use 'VAL' macros to benefit from type validation
Jim Warner [Wed, 10 Aug 2016 12:08:09 +0000 (07:08 -0500)]
misc: use 'VAL' macros to benefit from type validation

These 2 programs accessed newlib stacks directly which
meant incorrect result type specifications couldn't be
detected using our new result type validation feature.

And, while the usage was correct, to put each on a par
with all of our other programs, they now rely on those
newlib offered VAL macros for accessing stack results.

[ the ps and top programs retain direct stack access ]
[ when assignment to some result struct is necessary ]

[ PIDS_extra is used by top to store the forest view ]
[ level, while ps uses it for cooked cpu percentages ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agosysctl.c: use strchr() instead of index()
Yann E. MORIN [Sun, 7 Aug 2016 09:31:25 +0000 (11:31 +0200)]
sysctl.c: use strchr() instead of index()

index() is a legacy function, which is no longer implemented by all C
libraries (example: uClibc). Instead, use the POSIX defined strchr()
function.

Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
8 years agops/output.c: include <dlfcn.h> only when necessary
Thomas Petazzoni [Sun, 7 Aug 2016 09:08:26 +0000 (11:08 +0200)]
ps/output.c: include <dlfcn.h> only when necessary

dlopen() functionality is only used when SELinux support is enabled, so
<dlfcn.h> only needs to be included when ENABLE_LIBSELINUX is
defined. This fixes the build in configurations where <dlfcn.h> is not
available.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
8 years agolibrary <STAT>: exclude an #include for --disable-numa
Jim Warner [Tue, 9 Aug 2016 10:55:55 +0000 (05:55 -0500)]
library <STAT>: exclude an #include for --disable-numa

When the numa stuff was imported from the top program,
that #include for dlopen() was not made conditional as
it should have been. Well, here it is being corrected.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agoskill: fixup inconsistencies in result type references
Jim Warner [Mon, 8 Aug 2016 21:16:16 +0000 (16:16 -0500)]
skill: fixup inconsistencies in result type references

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: if the VAL type is wrong still return a value
Jim Warner [Mon, 8 Aug 2016 16:22:33 +0000 (11:22 -0500)]
library: if the VAL type is wrong still return a value

Rather than return a 0 result for all VAL type errors,
return what would have been without validation active.

This will enable a program like pgrep to still print a
result even though it used some incorrect type member.

With this commit, our VAL macro validations logic will
behave in exactly the same way as the GET validations.
While warning messages may be issued, except for a bad
enumerator, values will always be returned to callers.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agopgrep: fixup inconsistencies in result type references
Jim Warner [Mon, 8 Aug 2016 15:10:10 +0000 (10:10 -0500)]
pgrep: fixup inconsistencies in result type references

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: strengthen the VAL macro validation functions
Jim Warner [Mon, 8 Aug 2016 06:23:45 +0000 (01:23 -0500)]
library: strengthen the VAL macro validation functions

One ought not to assume that random memory access will
always succeed or, when it does, that an obviously bad
item enumerator will always be found at that location.

Thus, this patch corrects some really poor assumptions
associated with the 'xtra_procps_debug.h' header file.

[ and it does so in somewhat contorted ways so as to ]
[ avoid several darn gcc -Wnonnull warning messages! ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agotop: ensure derived VAL macro management is consistent
Jim Warner [Sat, 6 Aug 2016 18:13:13 +0000 (13:13 -0500)]
top: ensure derived VAL macro management is consistent

With this patch, top has ensured that base library VAL
macros are never found inside function bodies. Rather,
they are used solely to support global derived macros.

Program functions remain free to further tailor macros
but they'll now always be based on the top derivative.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: ensure that all those 'GET' macros are robust
Jim Warner [Sat, 6 Aug 2016 16:11:11 +0000 (11:11 -0500)]
library: ensure that all those 'GET' macros are robust

When users call the native 'get' functions they have a
responsibility to check that the result struct address
was indeed returned. But when using those 'GET' macros
there was no protection for possible NULL dereference.

So this patch will add some protection for a potential
failure of an underlying 'get' function. And should it
occur then those 'GET' macros will just return a zero.

Plus, we'll also mirror that behavior in the debugging
header should the XTRA_PROCPS_DEBUG #define be active.
And, we might as well add a warning when invalid items
are passed to 'GET' macros, just like we do for 'VAL'.

[ lastly, we added the missing opening parens/braces ]
[ to 2 'GET' macros in that xtra-procps-debug.h file ]
[ which went unnoticed until the qa folks caught up. ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agorelated: fix inconsistencies in result type references
Jim Warner [Fri, 5 Aug 2016 05:00:00 +0000 (00:00 -0500)]
related: fix inconsistencies in result type references

This patch is a response to errors found in those type
references now that our library allows for validation.

In two cases, former assignments to a result structure
could no longer employ that VAL macro if validation is
active. Thus, direct reference to some stack was used.

For the record, those instances were to be found here:
. ps - uses PIDS_extra to store the cooked pcpu values
. top - uses PIDS_extra to store the forest view level

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: provide for validating result type references
Jim Warner [Fri, 5 Aug 2016 05:00:00 +0000 (00:00 -0500)]
library: provide for validating result type references

During development, we now have a means for validating
that a type referenced in application code matches the
actual type set by the library. The new feature can be
activated through either of the following two methods:

1) ./configure CFLAGS='-DXTRA_PROCPS_DEBUG' (all pgms)

2) an #include <proc/xtra-procps-debug.h> (single pgm)

[ in the future, one could add a formal configure.ac ]
[ provision. but for now a manual approach is safer. ]

Lastly, for any module which provides a sort function,
the handling for both 'noop' & 'extra' enumerators was
made consistent. Now, 'noop' is not sorted and 'extra'
will be sorted as that module's widest supported type.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agorelated: respond to VAL macro addition of context parm
Jim Warner [Fri, 5 Aug 2016 05:00:00 +0000 (00:00 -0500)]
related: respond to VAL macro addition of context parm

Since the VAL macro now requires a 4th parameter, this
commit simply adds the 'info' context structure to it.

In some cases, that context structure needed to become
global, since it was referenced in multiple functions.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: expand VAL macros to include the context parm
Jim Warner [Fri, 5 Aug 2016 05:00:00 +0000 (00:00 -0500)]
library: expand VAL macros to include the context parm

This patch will set the stage for validating the types
referenced in the result union. For now, the parameter
representing that 'info' structure will remain unused.

[ and while we're at it, let us correct a faulty GET ]
[ macro in the diskstats header. that puppy missed a ]
[ parm which ain't so good if that guy is ever used! ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agorelated: adapt for changes in result types, <PIDS> api
Jim Warner [Sun, 31 Jul 2016 05:00:00 +0000 (00:00 -0500)]
related: adapt for changes in result types, <PIDS> api

This patch is the response to changes in <pids> types.

These additional modifications were also incorporated.

. ps -------------------------------------------------
pr_wname was eliminated as it just duplicated pr_wchan
pr_wchan referenced WCHAN_ADDR in error, vs WCHAN_NAME
pr_nwchan referenced WCHAN_NAME, not proper WCHAN_ADDR

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: normalize & minimize result types, <PIDS> api
Jim Warner [Sun, 31 Jul 2016 05:00:00 +0000 (00:00 -0500)]
library: normalize & minimize result types, <PIDS> api

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>
8 years agomisc: replace any remaining tab characters in readproc
Jim Warner [Sun, 31 Jul 2016 05:00:00 +0000 (00:00 -0500)]
misc: replace any remaining tab characters in readproc

8 years agotop: provide for expanded potential displayable fields
Jim Warner [Sat, 30 Jul 2016 05:00:00 +0000 (00:00 -0500)]
top: provide for expanded potential displayable fields

This commit provides for raising the total displayable
fields from its current 70 to 86. It also bumps the id
in an rcfile representing the version from 'i' to 'j'.

The increase in number of fields will make sharing the
rcfile with an older top, once it's saved, impossible.

These changes are being done via a #define rather than
hard coded so any such sharing will still be possible.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agomisc: add simplified chinese manpo to ignore
Craig Small [Thu, 28 Jul 2016 10:48:02 +0000 (20:48 +1000)]
misc: add simplified chinese manpo to ignore

8 years agolibrary: add final remaining sort function, <STAT> api
Jim Warner [Sun, 24 Jul 2016 05:00:00 +0000 (00:00 -0500)]
library: add final remaining sort function, <STAT> api

With this patch, all of the modules which offer a reap
function (pids, diskstats, slabinfo and stat too) will
now also provide for sorting whatever had been reaped.

It was easy to overlook a sort function for our <STAT>
guy given the paucity of CPUs on your typical personal
desktop or laptop. However, out in the world one might
find boxes with hundreds of CPUs plus many NUMA nodes.

Hey, who are we to disallow sorts on something another
person might see as useful under the above conditions?
And, there's always something to be said for symmetry.

[ of course, several minor tweaks were also included ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agomisc: tweaks (mostly cosmetic) to several source files
Jim Warner [Sun, 24 Jul 2016 05:00:00 +0000 (00:00 -0500)]
misc: tweaks (mostly cosmetic) to several source files

. a more appropriate error return code was substituted
. a safer form of comparison is utilized in two places
. a STAT_VAL macro replaced by more proper MEMINFO_VAL
. several of the silly 'xerrx' formats had been missed
. a few whitespace changes have also been incorporated

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agorelated: change for lost 'PROCPS_' enumerator prefixes
Jim Warner [Thu, 21 Jul 2016 05:00:00 +0000 (00:00 -0500)]
related: change for lost 'PROCPS_' enumerator prefixes

With this patch we've completed a progression toward a
standard approach to naming conventions which follows:

* Only functions will begin with that 'procps_' prefix
. ........................................... examples
. procps_vmstat_get ()
. procps_diskstats_select ()
- ----------------------------------------------------

* Exposed structures begin with the module/header name
. ........................................... examples
. struct pids_info
. struct stat_reaped
- ----------------------------------------------------

* Item enumerators begin like structs, but capitalized
. ........................................... examples
. VMSTAT_COMPACT_FAIL
. MEMINFO_DELTA_ACTIVE

[ slabinfo varies slightly due to some item variants ]
. SLABINFO_extra
. SLABS_SIZE_ACTIVE
. SLABNODE_OBJS_PER_SLAB
[ could cure with a prefix of SLABINFO, but too long ]
- ----------------------------------------------------

* Other enumerators work exactly like item enumerators
. ........................................... examples
. PIDS_SORT_ASCEND
. STAT_REAP_CPUS_AND_NODES
- ----------------------------------------------------

* Macros and constants begin just like the enumerators
. ........................................... examples
. #define SLABINFO_GET
. #define DISKSTATS_TYPE_DISK
- ----------------------------------------------------

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: removed all the 'PROCPS_' enumerator prefixes
Jim Warner [Thu, 21 Jul 2016 05:00:00 +0000 (00:00 -0500)]
library: removed all the 'PROCPS_' enumerator prefixes

Many of our item enumerator identifiers are very long,
especially in that <VMSTAT> module. Additionally, they
all contain the exact same universal 'PROCPS_' prefix.

The origins for this are likely found in the desire to
avoid name clashes with other potential include files.
But with procps-ng newlib, we've probably gone way too
far. Did 'PROCPS_PIDS_TICS_SYSTEM' actually offer more
protection against clash than 'PIDS_TICS_SYSTEM' does?

I don't think so. Besides, no matter how big that name
becomes, one can never guarantee they'll never be some
clash. And, conversely, extremely short names will not
always create conflict. Of course, in either case when
some clash occurs, one can always #undef that problem.

Thus, this commit will eliminate that 'PROCPS_' prefix
making all of those enum identifiers a little shorter.
And, we'll still be well above some ridiculously short
(criminally short) names found in some common headers:

- - - - - - - - - - <term.h>
- 'tab', 'TTY', etc
- - - - - - - - - - - - - - - - <search.h>
- 'ENTER', ENTRY', 'FIND', etc

------------------------------------------------------
Finally, with this as a last of the wholesale changes,
we will have established the naming conventions below:

. only functions will begin with that 'procps_' prefix
. exposed structures begin with the module/header name
. item enumerators begin like structs, but capitalized
. other enumerators work exactly like item enumerators
. macros and constants begin just like the enumerators
------------------------------------------------------

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agorelated: adapt to changes in 'context' structure names
Jim Warner [Thu, 21 Jul 2016 05:00:00 +0000 (00:00 -0500)]
related: adapt to changes in 'context' structure names

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: standardize all the 'context' structure names
Jim Warner [Thu, 21 Jul 2016 05:00:00 +0000 (00:00 -0500)]
library: standardize all the 'context' structure names

This patch attempts to standardize the naming of those
most important (declared not defined) context structs.

The present practice represents a hodge podge of names
only some of which reflect the source /proc file name.
And 2 of those file names embed a literal 'info' which
is likely the origin of that required parm identifier.

Now we'll append a universal '_info' to such structure
names, while including the names of those /proc pseudo
files where possible. In any case, that context struct
will *always* begin with the actual module/header file
name. And only the following two sound a little weird!

---------> 'meminfo_info' + 'slabinfo_info' <---------

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agovmstat: adapted for changes in an i/f, <DISKSTATS> api
Jim Warner [Wed, 20 Jul 2016 05:00:00 +0000 (00:00 -0500)]
vmstat: adapted for changes in an i/f, <DISKSTATS> api

This patch is a response to changes to the <diskstats>
interface. And the following represents the summary of
significant unrelated alterations that were also made.

+ corrected that 'milli weighted IO' output, which has
been wrong since that original patch referenced below.
as implemented, it duplicated 'milli spent IO' output.

+ restored original commit intent regarding disks with
a partition switch as represented in references below.

+ moved all item enumerators up near the source start.

+ removed all remaining tabs and inconsistent indents.

+ reformatted the silly style applied to 'xerrx' uses.

Reference(s):
. disallowed 'disks' under 'partition' switch
commit 7df7795b929c2c0911127d9fff64e62fe9e2975f
. original commit with disk/partition rational
commit e445f7e6c5539594600ace7a722dafa3b91a5374

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: normalize/standardize an i/f, <DISKSTATS> api
Jim Warner [Wed, 20 Jul 2016 05:00:00 +0000 (00:00 -0500)]
library: normalize/standardize an i/f, <DISKSTATS> api

This patch will bring this interface up to our 3rd gen
standards. The following summarizes the major changes.

* New delta provisions have been added to most fields.

There are, of course, some fields for which a delta is
inappropriate. They include the identifying items such
as name, type, major and minor. Plus the io_inprogress
field which already acts, in effect, as a delta value.

* To provide delta support, dev_node historical values
have become persistent. By the same token, the library
must provide for future removal of disks/partitions. A
timestamp is used to detect 'stale' data which will be
deleted so as not to satisfy some get, select or reap.

* Such persistent support is provided by a linked list
which, by default, grows from the bottom down so as to
maintain compatibility with the /proc/diskstats order.

Initially, I was tempted to use the GNU tsearch (tree)
provisions until I discovered the overhead of building
that tree plus costs of a subsequent 'twalk'. Besides,
walking such a tree means retrieval order would differ
from an order required/expected by the vmstat program.

* The '/sys/block' directory is no longer scanned with
every refresh cycle. Rather, it's only accessed when a
node is first encountered. Then, that node's 'type' is
persistent for its lifetime like several other fields.

* A sort provision was included, at virtually no cost,
even though such a provision was not currently needed.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: rename 'diskstat' source as 'diskstats' files
Jim Warner [Wed, 20 Jul 2016 05:00:00 +0000 (00:00 -0500)]
library: rename 'diskstat' source as 'diskstats' files

Where possible, libprocps files convey the name of the
actual source pseudo file under the '/proc' directory.

This brings diskstats into line with such an approach.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agomisc: just eliminate several 'unused' warning messages
Jim Warner [Tue, 19 Jul 2016 05:00:00 +0000 (00:00 -0500)]
misc: just eliminate several 'unused' warning messages

[ plus we also play catch up on some earlier changes ]
[ that impacted skill.c, after using --enable-skill! ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agotop: make compilation possible under netbsd-curses too
Jim Warner [Sat, 16 Jul 2016 05:00:00 +0000 (00:00 -0500)]
top: make compilation possible under netbsd-curses too

Whoa, I had never considered an alternative to ncurses
until the issue referenced below was raised. Thus, I'm
surprised to find that 'tparm' was the only impediment
to ultimately utilizing this alternate curses library.

And, while we could have substituted that non-standard
'tiparm' with only 2 arguments, we'll utilize the full
parms compliment in the spirit of that original patch.

Frankly, the task of developing an alternative library
to that ncurses implementation really boggles my mind.

Congratulations to rofl0r, whoever that masked man is.

Reference(s):
. issue raised
https://gitlab.com/procps-ng/procps/issues/38
. netbsd-curses home
https://github.com/sabotage-linux/netbsd-curses

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: some minor miscellaeous improvements, 3rd gen
Jim Warner [Wed, 13 Jul 2016 05:00:00 +0000 (00:00 -0500)]
library: some minor miscellaeous improvements, 3rd gen

A collection of miscellaneous code and comment tweaks.

[ such changes will stop when desk checking ends too ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agotop: due to <STAT> api, relocate that NUMA stderr hack
Jim Warner [Tue, 12 Jul 2016 05:00:00 +0000 (00:00 -0500)]
top: due to <STAT> api, relocate that NUMA stderr hack

So as to avoid that potential (and inappropriate) numa
library spew to stderr, plus some resulting corruption
of top's display, top buffered stderr output until the
program ended. However, under our new library, timings
have changed meaning the corruption could occur again.

So this patch just relocates the stderr redirect to an
earlier startup point ahead of the 1st call to <STAT>.

[ plus we also fiddle just a tad with a few comments ]

Reference(s):
. original libnuma fix
commit 35dc6dcc49cc9cf8cff4300cb03a38dbe44c05db
. original redhat discussion
https://bugzilla.redhat.com/show_bug.cgi?id=998678

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agovmstat: disallow 'disks' under that 'partition' switch
Jim Warner [Mon, 11 Jul 2016 05:00:00 +0000 (00:00 -0500)]
vmstat: disallow 'disks' under that 'partition' switch

Emulating the presumed proper behavior of the original
program, when the -p switch is used we will now report
an error if that provided name matches some disk name.

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agovmstat: correct that wide-format when displaying disks
Jim Warner [Mon, 11 Jul 2016 05:00:00 +0000 (00:00 -0500)]
vmstat: correct that wide-format when displaying disks

Back in July of last year, when vmstat was modified to
exploit the 2nd gen <slabinfo> alloc & sort provision,
yours truly introduced this bug (in the commit below).

Reference(s):
commit 8d9612f7827959363b572742172b6b4b18796bdf

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agolibrary: recycle the QUICK_THREADS #define, <PIDS> api
Jim Warner [Sun, 10 Jul 2016 05:00:00 +0000 (00:00 -0500)]
library: recycle the QUICK_THREADS #define, <PIDS> api

That #define QUICK_THREADS was impossible to implement
under the new <pids> interface. Plus it was also found
to distort some thread information (referenced below).

So, it's always been inactive under the newlib branch.

However, it will (with small changes) still serve some
useful purpose in our library. Now, when the redefined
FALSE_THREADS is active, those special strings showing
"[ duplicate ENUM ]" will appear for any child thread.

Note: the real reason for such strings appearing isn't
being exercised, only their mechanics. In actual usage
they are substituted when a user duplicates such items
in a results stack & only the 1st instance can own it.

With this patch, we are simply fooling the <pids> code
into thinking an item was duplicated via a NULL value.

Reference(s):
. from master branch
commit 25a6ecdbfb3262261465ce1dd0e0e758cf3ac497

Signed-off-by: Jim Warner <james.warner@comcast.net>
8 years agowatch: fix process_ansi typo
Craig Small [Sat, 9 Jul 2016 05:57:11 +0000 (15:57 +1000)]
watch: fix process_ansi typo

When I had to apply Josh's ansi fix a few commits below I put the
return before the setattr

References:
 commit 261c571acafed88d03ebdb5c5fa3d7e084daf25b

8 years agobuild-sys: cleanup of tests
Craig Small [Sat, 9 Jul 2016 05:06:32 +0000 (15:06 +1000)]
build-sys: cleanup of tests

Removed dependencies on test_nsutils as they are not used in
newlib.

Had two TESTS lines due to master merge, now only one.

8 years agowatch: Don't attempt to ungetc parts of unknown ANSI escape sequences
Josh Triplett [Fri, 8 Jul 2016 07:32:59 +0000 (00:32 -0700)]
watch: Don't attempt to ungetc parts of unknown ANSI escape sequences

If process_ansi encountered an unknown character when processing an ANSI
escape sequence, it would ungetc all the characters read so far, except
for the character just read, and the opening '\033['.  ungetting the
middle of the escape sequence does not produce useful results, and also
relies on the unportable assumption that ungetc works on multiple
characters (which glibc does not support).  Discard the characters
instead.

Signed-off-by: Josh Triplett <josh@joshtriplett.org>
8 years agowatch: Fix ANSI escape sequence termination
Josh Triplett [Fri, 8 Jul 2016 07:29:59 +0000 (00:29 -0700)]
watch: Fix ANSI escape sequence termination

process_ansi stopped processing an ANSI escape sequence if
(c < '0' && c > '9' && c != ';'), which will never happen.  Fix the
range check to use || instead.

Signed-off-by: Josh Triplett <josh@joshtriplett.org>
8 years agowatch: Don't process additional numbers in unknown ANSI color escapes
Josh Triplett [Sat, 9 Jul 2016 04:52:54 +0000 (14:52 +1000)]
watch: Don't process additional numbers in unknown ANSI color escapes

process_ansi assumed all numbers in a color control sequence correspond
to colors or attributes, which breaks badly if it encounters a
ISO-8613-3 escape sequence (such as for truecolor RGB).  For instance,
the sequence "\x1b[38;2;10;20;30m" sets the foreground color to
rgb(10,20,30), but watch will interpret all five numbers in the sequence
as colors or attributes themselves.

Stop processing the entire escape sequence if watch encounters any
number it doesn't understand, as that number may change the meaning of
the rest of the sequence.

8 years agobuild-sys: Revert noinst and check programs
Craig Small [Sat, 9 Jul 2016 04:35:06 +0000 (14:35 +1000)]
build-sys: Revert noinst and check programs

Previously there was a commit to change all noinst_PROGRAMS into
check_PROGRAMS. This was not a good idea.

check_PROGRAMS are built before TESTS are run. However they are
NOT build before the dejagnu tests are run, causing those tests
to fail.

So:
If the program is required for dejagnu, it needs to go into
noinst_PROGRAMS
If the program is required for TESTS or is one of those TESTS,
it needs to go into check_PROGRAMS

8 years agobuild-sys: Make check programs before check
Craig Small [Sat, 9 Jul 2016 04:11:06 +0000 (14:11 +1000)]
build-sys: Make check programs before check

For some unknown reason, check_PROGRAMS are not built before check.
They are built before recheck and after check, which isn't very
useful.

This means any tests by dejagnu that need those programs will fail.
On my console I get a build error, the CI merrily reports the error
but considers the build OK; go figure.

The kludge adds check_PROGRAMS to be a dependency to check.
Note, TESTS don't need to be included in this, because they are
properly compliled after the dejagnu tests but before they are
run.