4a743f
This file summarizes changes to the top program and supporting documentation
4a743f
introduced on March 31, 2011.
4a743f
4a743f
Contents:
4a743f
      DOCUMENT Changes
4a743f
      INTERNAL Improvements
4a743f
      EXTERNAL Improvements
4a743f
      BUGS Previously Fixed and Preserved
4a743f
      BUGS Newly/Nearly Fixed
4a743f
      BUGS/WISH-LISTS That Should Go Bye-bye
4a743f
      BUGS FIXED You Didn't Know You Had
4a743f
      OTHER Changes, Hopefully They Won't Bite You
4a743f
      BENCHMARKS
4a743f
4a743f
4a743f
DOCUMENT Changes =========================================================
4a743f
  . The entire file was cleaned up, standardized and expanded to include:
4a743f
    - a new section "2. SUMMARY Display" added for symmetry with Fields
4a743f
    - nine new fields were added to section "3a. DESCRIPTIONS of Fields"
4a743f
    - a new section "3b. MANAGING Fields" replaced the obsolete section
4a743f
      "2b. SELECTING and ORDERING Columns"
4a743f
    - section "5c. SCROLLING a Window" was added for that new feature
4a743f
4a743f
  . I don't know when the explanations for CODE and DATA were changed to
4a743f
    show 'virtual' memory, but I think there's a reason their alternate
4a743f
    names contain the word 'resident'.  Thus they were changed back to
4a743f
    say 'physical memory'.
4a743f
4a743f
  . And as I indicated in a previous email, the former string identifier
4a743f
    'ME' was restored as were the 'h' key/command conventions (vs. <h>).
4a743f
4a743f
    Oops, the 'h' key/command conventions remain restored, but subsequent
4a743f
    testing revealed problems with the .ME string identifier.  Thus, it was
4a743f
    changed to .WE (along with the companion .Me/.We id).
4a743f
4a743f
  . Also previously mentioned, the 'man2html' program translates top.1 to
4a743f
    HTML with near perfect fidelity.  I take that to mean there should be
4a743f
    no problems with the top.1 source on most other platforms.
4a743f
4a743f
    To further improve translation to HTML, several .Bd and .Ed macros
4a743f
    were added to preserve literal (fixed width) spacing.
4a743f
4a743f
4a743f
INTERNAL Improvements ====================================================
4a743f
  . The old restriction of 26 fields has been lifted.  With this new-top
4a743f
    100+ fields are now possible.  It currently supports up to 55, of
4a743f
    which 35 are in use.  Adding a new field is almost too easy.
4a743f
4a743f
  . Task row construction has been considerably improved -- both from
4a743f
    a programming perspective and a performance perspective.
4a743f
4a743f
  . The column highlighting costs for sort field visibility were
4a743f
    virtually eliminated.
4a743f
4a743f
    An optional define (USE_X_COLHDR) can be enabled to completely
4a743f
    eliminate any costs associated with the 'x' command toggle.
4a743f
4a743f
  . The management of the HST_t structures, used for %cpu calculations,
4a743f
    was optimized with a hashing scheme.  Thus the need for a qsort then
4a743f
    a binary search in each frame was completely eliminated.
4a743f
4a743f
    An optional define can restore the former qsort/bsearch approach but
4a743f
    with an internal inlined binary search function offering substantially
4a743f
    better performance than the old top.
4a743f
4a743f
  . This far more capable new-top executable is no larger than old top.
4a743f
4a743f
  . The above combine to produce substantially improved performance
4a743f
    whose details are documented below under BENCHMARKS.
4a743f
4a743f
4a743f
EXTERNAL Improvements ====================================================
4a743f
  . Field management has been completely redesigned.  It's now embodied
4a743f
    on a single screen where display-ability, position and sort selection
4a743f
    can be handled in one place -- for all windows at one time!
4a743f
4a743f
    This function is dependent on cursor motion keys and should a device
4a743f
    not have the customary arrow keys, alternatives are provided and
4a743f
    documented under "Operation" near the beginning of the man page.
4a743f
4a743f
  . The following new fields have been added:
4a743f
       Group Id
4a743f
       Minor Page Faults
4a743f
       Number of Threads
4a743f
       Process Group Id
4a743f
       Real User Id
4a743f
       Saved User Id
4a743f
       Saved User Name
4a743f
       Session Id
4a743f
       Tty Process Group Id
4a743f
4a743f
  . Scrolling keys now allow one to move the view of any window vertically
4a743f
    or horizontally to reveal any desired task or column.  Previously, only
4a743f
    some tasks were viewable even with reversible, selectable sort columns.
4a743f
4a743f
    Each of the four windows is capable of maintaining its own scrolled
4a743f
    coordinates and an optional toggle ('C') displays a message aiding
4a743f
    navigation within the available tasks and displayable fields.
4a743f
4a743f
  . User interactive line oriented input now provides for true line
4a743f
    editing supported by these new keys:
4a743f
        Left/Right arrow keys, Delete key, Backspace and
4a743f
        Home/End keys (likely limited to xterm, not terminal)
4a743f
4a743f
  . User filtering via the -u | -U interactive commands is now window
4a743f
    based which means that different windows could be used to filter
4a743f
    different users.
4a743f
4a743f
  . Signal handling has been normalized and is now consistent regardless
4a743f
    of the particular top screen a user may have been using.
4a743f
4a743f
  . The 'i' toggle now shows any task that has used *some* cpu since the
4a743f
    last screen update.  It's no longer limited to just running tasks.
4a743f
4a743f
  . The summary area 'task states' line now reflects either 'Threads'
4a743f
    or 'Tasks' depending on the -H toggle.
4a743f
4a743f
4a743f
BUGS Previously Fixed and Preserved ======================================
4a743f
  ( but not necessarily literally)
4a743f
  . 228822, suspending top leaves xterm in slightly messed-up state
4a743f
  . 256376, segfaults, if the xterm is to small
4a743f
  . 320289, segv on sigwinch
4a743f
  . 351065, wrong highlight 1st column (escape characters displayed)
4a743f
  . 358724, accepts extra numeric args
4a743f
  . 378695, seg fault if "/proc" is not mounted
4a743f
  . 426782, UID field is too narrow
4a743f
  . 458986, should check xterm for EOF/EIO
4a743f
  . 459890, Irix mode should use %#4.1f when threads shown
4a743f
4a743f
4a743f
BUGS Newly/Nearly Fixed ==================================================
4a743f
  . 225542, 'Unknown command' message blocks further commands
4a743f
      The message is now displayed using usleep for 1.25 seconds, instead
4a743f
      of the former full 2 seconds.  And while it still blocks further
4a743f
      commands, the delay is much more tolerable.
4a743f
4a743f
      Can we consider this bug 'nearly' fixed?
4a743f
4a743f
  . 410292, interface error when using backspace
4a743f
      Full line editing was added but could be disabled via a #define.
4a743f
      And via that define, even under basic termios support, the backspace
4a743f
      problem was cured.
4a743f
4a743f
  . 567509, top idle command ('i') not working for threaded programs
4a743f
      Since the 'i' command now reflects tasks that have used *some* cpu,
4a743f
      and is no longer dependent on an 'R' state, I *believe/hope* this
4a743f
      bug has been swatted.
4a743f
4a743f
4a743f
BUGS/WISH-LISTS That Should Go Bye-bye ===================================
4a743f
  . 340751, wish for hostname to benefit multiple top sessions
4a743f
      Craig's suggestion regarding symlinks is the perfect solution.
4a743f
      How dare Craig say that the solution was "not ideal" !
4a743f
4a743f
  . 586497, wish for graceful degradation on small screen sizes
4a743f
      This objective could be accomplished by setting up 2 symlinks for
4a743f
      top, personalizing them for the 2 tiny phone displays, then writing
4a743f
      the respective configuration files.
4a743f
4a743f
      I shudder at the programming effort suggested by Paul.  And when it
4a743f
      was done you'd find everybody else would have different criteria.
4a743f
4a743f
4a743f
BUGS FIXED You Didn't Know You Had =======================================
4a743f
  . Without amplifying the dirty details, the long standing occasionally
4a743f
    reported display corruption, and an unreported source of performance
4a743f
    degradation, has been eliminated.  The cure is in the elimination of
4a743f
    the Pseudo_cols variable and the improved PUFF macro.
4a743f
4a743f
  . Line oriented input was not sensitive to screen width.  Thus a user
4a743f
    could hold down any key and ultimately line wrap, overwriting the
4a743f
    columns header and the entire screen.  New top prevents this.
4a743f
4a743f
  . User filtering (-u|-U) via a user ID (not name) now validates that
4a743f
    number.  The old-top just made sure it was numeric, then blindly
4a743f
    displayed no matching users (i.e. an empty window).
4a743f
4a743f
  . The threads toggle ('H') is no longer window based but more properly
4a743f
    applies to all windows.  The previous implementation produced the
4a743f
    following aberration if multiple windows were being shown:
4a743f
      . -H would be acknowledged and applied to all visible windows
4a743f
      . keying 'a' or 'w' would silently turn it off
4a743f
      . then keying -H would turn it back on, but the user expected off
4a743f
4a743f
  . If you hit ^Z on any help or fields screen to suspend old-top, after
4a743f
    issuing 'fg' you would then be left with a seemingly hung application
4a743f
    inviting ^C.  In truth, one could recover with the space bar, but that
4a743f
    was far from intuitive.
4a743f
4a743f
  . The old-top consistently writes 1 extra byte for each task row or 1
4a743f
    byte too few for columns headers, depending on your perspective.
4a743f
    The new top writes the same number of bytes for each.
4a743f
4a743f
  . By failing to clear to eol, old top left the display in a terrible
4a743f
    state after exiting a 'fields' screen when only a few columns were
4a743f
    being displayed.
4a743f
4a743f
  . The old-top used a zero value for the L_NONE library flag which could
4a743f
    cause repeated rebuilding of columns headers with each frame.  In truth,
4a743f
    this was not likely to happen in real life since only two fields actually
4a743f
    used that flag.  However, if it did happen, performance could be degraded
4a743f
    by 800%.
4a743f
4a743f
4a743f
OTHER Changes, Hopefully They Won't Bite You =============================
4a743f
  . The undocumented TOPRC environment variable is no longer supported.
4a743f
    Any similar need can be met through a symlink alias.
4a743f
4a743f
  . The use of environment variables to override terminal size is now
4a743f
    off by default but could be enabled through '#define TTYGETENVYES'.
4a743f
4a743f
  . The global 'bold enable' toggle is active by default and thus agrees
4a743f
    with the documentation.  It's been wrong ever since Al's wholesale
4a743f
    'cosmetic' changes in procps-3.2.2.
4a743f
4a743f
  . Task defaults now show bold (not reverse) and row highlighting.
4a743f
    This agrees with what was always stated in the documentation.
4a743f
4a743f
  . The 'H' toggle (thread mode) is not persistent.  Persistence can be
4a743f
    achieved with a simple shell script employing the -H switch.
4a743f
4a743f
  . Then 'g' and 'G' commands were reversed to reflect their likely use.
4a743f
4a743f
4a743f
BENCHMARKS ===============================================================
4a743f
  Tested as root with nice -10 and using only common fields
4a743f
   ( on a pretty old, slow laptop under Debian Lenny )
4a743f
  but rcfiles specified identical sort fields and identical
4a743f
  settings for the 'B', 'b', 'x' and 'y' toggles (even though
4a743f
  the defaults are not necessarily identical).
4a743f
4a743f
  In every case new-top outperforms old-top, but I've shown %
4a743f
  improvements for only the most significant.  Those cases mostly
4a743f
  involve colors with both row & column highlighting.  I suggested
4a743f
  above that the highlighting cost was virtually eliminated in
4a743f
  new-top, and these tests bare that out.
4a743f
4a743f
  Note the much smaller differences for new-top between the 24x80
4a743f
  window results and full screen (but don't mix apples_terminal
4a743f
  with oranges_xterm).  This is a reflection of the simplification
4a743f
  of task row construction, also mentioned above.
4a743f
4a743f
  It's always been the case that any top in an xterm outperforms
4a743f
  that top under the terminal application, even when the xterm
4a743f
  provides additional rows and columns.  It's true below with
4a743f
  Gnome and it was true nine years ago under KDE.
4a743f
4a743f
  ----------------------------------------------------------
4a743f
   The following comparisons were run with:
4a743f
      100 tasks & 160 threads
4a743f
      -d0 -n5000
4a743f
                                 new-top        old-top
4a743f
  xterm     24x80
4a743f
 a  1 win,  lflgs_none         11.2 secs      51.8 secs    + 462.6%
4a743f
    1 win,  default            61.0 secs      66.8 secs
4a743f
    1 win,  colors w/ x+y      61.3 secs      83.0 secs    + 135.4%
4a743f
    1 win,  thread mode        88.3 secs      94.2 secs
4a743f
 b  1 win,  every field on     99.7 secs     106.0 secs
4a743f
    1 win,  cmdline            71.2 secs      76.6 secs
4a743f
    4 wins, defaults          101.3 secs     107.2 secs
4a743f
    4 wins, colors w/ x+y     101.5 secs     122.8 secs    + 121.0%
4a743f
4a743f
  xterm, full screen (53x170)
4a743f
 a  1 win,  lflgs_none         15.9 secs      54.2 secs    + 340.9%
4a743f
    1 win,  default            70.0 secs      73.2 secs
4a743f
    1 win,  colors w/ x+y      69.4 secs     131.3 secs    + 189.2%
4a743f
    1 win,  thread mode        97.6 secs     102.6 secs
4a743f
 c  1 win,  every field on    122.1 secs     128.1 secs
4a743f
    1 win,  cmdline            80.8 secs      83.7 secs
4a743f
    4 wins, defaults          111.4 secs     115.8 secs
4a743f
    4 wins, colors w/ x+y     112.0 secs     172.9 secs    + 154.4%
4a743f
4a743f
  terminal  24x80
4a743f
 a  1 win,  lflgs_none          8.9 secs      58.6 secs    + 658.4%
4a743f
    1 win,  default            70.1 secs      80.3 secs
4a743f
    1 win,  colors w/ x+y      70.6 secs     157.3 secs    + 222.8%
4a743f
    1 win,  thread mode       104.7 secs     120.5 secs
4a743f
 b  1 win,  every field on    111.2 secs     134.5 secs
4a743f
    1 win,  cmdline            83.8 secs      94.5 secs
4a743f
    4 wins, defaults          125.6 secs     146.7 secs
4a743f
    4 wins, colors w/ x+y     125.6 secs     206.9 secs    + 176.7%
4a743f
4a743f
  terminal, full screen (39x125)
4a743f
 a  1 win,  lflgs_none          9.1 secs      60.6 secs    + 665.9%
4a743f
    1 win,  default            74.3 secs      88.0 secs
4a743f
    1 win,  colors w/ x+y      73.9 secs     314.5 secs    + 425.6%
4a743f
    1 win,  thread mode       113.0 secs     140.9 secs
4a743f
 b  1 win,  every field on    117.7 secs     154.9 secs
4a743f
    1 win,  cmdline            87.4 secs     107.2 secs
4a743f
    4 wins, defaults          139.1 secs     166.7 secs
4a743f
    4 wins, colors w/ x+y     157.3 secs     423.2 secs    + 269.0%
4a743f
4a743f
  ----------------------------------------------------------
4a743f
   The following comarisons were run with:
4a743f
      300 tasks & 360 threads
4a743f
      -d0 -n3000
4a743f
                                 new-top        old-top
4a743f
  xterm, full screen (53x170)
4a743f
 a  1 win,  lflgs_none         14.3 secs      79.0 secs    + 552.4%
4a743f
    1 win,  default           101.1 secs     104.5 secs
4a743f
    1 win,  colors w/ x+y     101.3 secs     140.0 secs    + 138.2%
4a743f
    1 win,  thread mode       120.1 secs     123.1 secs
4a743f
 c  1 win,  every field on    179.8 secs     185.6 secs
4a743f
    1 win,  cmdline           124.9 secs     132.8 secs
4a743f
    4 wins, defaults          174.8 secs     179.2 secs
4a743f
    4 wins, colors w/ x+y     175.0 secs     215.2 secs    + 123.0%
4a743f
4a743f
  terminal, full screen (39x125)
4a743f
 a  1 win,  lflgs_none         12.3 secs      98.5 secs    + 800.8%
4a743f
    1 win,  default           117.4 secs     134.0 secs
4a743f
    1 win,  colors w/ x+y     111.6 secs     296.1 secs    + 265.3%
4a743f
    1 win,  thread mode       141.3 secs     155.3 secs
4a743f
 b  1 win,  every field on    197.7 secs     204.8 secs
4a743f
    1 win,  cmdline           143.9 secs     157.3 secs
4a743f
    4 wins, defaults          204.0 secs     226.2 secs
4a743f
    4 wins, colors w/ x+y     216.9 secs     434.5 secs    + 200.3%
4a743f
4a743f
  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4a743f
4a743f
notes:
4a743f
 a  these results represent the library flags L_NONE zero value and
4a743f
    thus the hidden cost of rebuilding column headers w/ every frame
4a743f
 b  while every common field was turned on, not all fields could be
4a743f
    displayed due to limited screen width
4a743f
 c  only in a full screen xterm window could all common fields
4a743f
    actually be displayed
4a743f
4a743f
4a743f
BENCHMARKS, Redux (for NLS) ==============================================
4a743f
  December, 2011 benchmarks produced on a much more modern
4a743f
  platform containing:
4a743f
     Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz
4a743f
     SMP with 4 cpus
4a743f
  reflected in the substantially reduced elapsed times.
4a743f
4a743f
  Tested as root with nice -10 and using only common fields
4a743f
  but rcfiles specified identical sort fields and identical
4a743f
  settings for the 'B', 'b', 'x' and 'y' toggles (even though
4a743f
  the defaults are not necessarily identical).
4a743f
4a743f
  Each test was run outside of X-windows at a linux console
4a743f
  offering 48 rows and 170 columns.  This was done to reduce
4a743f
  contention which sometimes made comparisons problematic.
4a743f
4a743f
  old-top = procps-3.2.8 (debian patched and memory leaking)
4a743f
  new-top = procps-ng-3.3.2 with NLS support
4a743f
4a743f
  ----------------------------------------------------------
4a743f
   The following comparisons were run with
4a743f
      -d0 -n5000
4a743f
      140 tasks & 275 threads
4a743f
4a743f
  linux console (48x170)         new-top        old-top
4a743f
 d  1 win,  lflgs_none          2.6 secs      15.0 secs    + 577.0%
4a743f
    1 win,  default            16.1 secs      19.3 secs
4a743f
    1 win,  colors w/ x+y      16.6 secs      35.0 secs    + 210.8%
4a743f
 e  1 win,  show cpus          16.2 secs      20.1 secs    + 124.1%
4a743f
    1 win,  thread mode        31.8 secs      34.1 secs
4a743f
 f  1 win,  every field on     30.5 secs      34.0 secs
4a743f
    1 win,  cmdline            19.9 secs      23.1 secs
4a743f
    4 wins, default            31.9 secs      35.2 secs
4a743f
    4 wins, colors w/ x+y      29.2 secs      47.4 secs    + 162.3%
4a743f
 g  1 win,  b&w w/ bold x      30.0 secs      33.2 secs
4a743f
 h  1 win,  scroll msg on      31.1 secs      33.9 secs
4a743f
4a743f
  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4a743f
4a743f
notes:
4a743f
 d  these represent the same anamoly as the original 'a' footnote
4a743f
 e  these represent the '1' toggle, where each of 4 cpus was shown
4a743f
      (not possible on the original uniprocessor)
4a743f
 f  every common field was turned on and all fields were visible
4a743f
 g  on a black and white display, sort column was shown in bold
4a743f
      (further proof of column highlighting improvements)
4a743f
 h  similar to 'g', but new top was showing scroll msg
4a743f
      (old top has no such provision)