MPE/iX Resource Utilization: Who Is Running?
 

Written By: Stan Sieler

February, 1993
Do you know who is using your CPU on MPE/iX? If you do a :SHOWJOB command, MPE/iX will dutifully report what jobs and sessions are logged on, but it won't show the processes running within each job session. The :SHOWPROC command can show you a little more, if you have SM capability, and if you can live with the bugs that have been in it since its release. The contributed library program SOOXL (from the San Francisco 1989 Interex conference swap tape) shows some of the processes, but it doesn't seem to know about the many other system processes running on the CPU, some using significant amounts of resources.

(MPE/iX is the operating system for the HP3000. Click here if you don't know what an HP3000 is.)

The purpose of this article is to share a few techniques for determining exactly what is running. I have used SHOT, a program I wrote which is marketed by Lund Performance Solutions, as a tool for extracting some basic information about the process mix on the machine. Used in conjunction with the Native Mode DEBUG facility, you have all the tools you need to find out who is running. If you do not have SHOT at your site, any system monitoring utility that will show processes under MPE/iX (such as SOS/3000, Probe/XL, Glance/XL, and Ping/XL) may be substituted.

To begin, I run SHOT and hit <return> to see what processes are "active". A report is shown below:

   :shot
   SHOT [1.25] - NUGGETS [H.28.03]                               Demo Tape [D1234]
   (c) 1989 Software Research Northwest, Inc.                            Demo Site

   For Help at the SHOT prompt enter   ?                              My PIN is 53
   MPE/iX 4.5    Highest PIN used = 68, max PIN possible = 5460

   SHOT [Delta]:  <return>
   SHOT @ MON, FEB 22, 1993,  6:39 PM

   ? PIN  CPU   Process Name               Pri Q Delta  %  Ic TotFl Wait State
   - --- ------ -------------------------- --- - ----- --- -- ----- --------------
       7  17446 port_facility_process      152 C     1     Nn       pfp_port3
      24  36817 NMCONSOL.PUB.SYS           149 B     4     Nn    28 Port#-170
      25   4300 io_mgr_process              13 A    23     Nn   456 Port#-175
      53   1242 SHOT.PUB.NUGGETS           152 C   125   1 Nn    49 (executing)
      65  11344 VTSERVER.NET.SYS           152 C    20     Nn     5 TERMINAL_READ_
   CPU status: busy 1%, idle 99%
              

Our report shows some processes have used some CPU time since the first display: pins 7, 24, 25, 53, and 65. (A PIN is a Process Identification Number, which is a reusable value that identifies a process.)

PIN 53 is the SHOT program, PIN 7 is a system process called a "Port Facility Process" (a process that does some of the work in handling message passing via a mechanism called a "port"), but what is PIN 25?

Every process on the machine can be loosely placed into one of two separate categories: it is a part of a job/session, or it is a system process. Every process has a process type determined at the time the process is created, which is one of the following eight values:

  • 0 User process (e.g., nested QEDIT)
  • 1 Son Process (e.g., RUN QEDIT)
  • 2 Main Process (e.g., top level CI)
  • 3 Task
  • 4 System
  • 5 Detach (e.g., DIAGMON, part of SYSDIAG)
  • 6 UCOP (e.g., JSMAIN, parent of a CI)
  • 7 (not used)

Note that these values are a superset of the values used by MPE V. If you forget this list of values, MPE/iX and DEBUG can be used to get the list in Pascal/iX terms as noted in the sidebar .

Process types user, main and son are loosely referred to as being part of a job (or session). All other process types are loosely referred to as being system processes. If asked, SHOT will show the type of every process (ADM +PTYPE).

Assuming that PIN 25 might be part of a job/session and not a system process, I ask SHOT to show a job/session-oriented display of all processes by typing J (short for "Jobs") at the prompt:

    SHOT [All]: j
    SHOT @ MON, FEB 22, 1993,  6:39 PM
    
    ? PIN  CPU   Process Name               Pri Q Delta  %  Ic TotFl Wait State
    - --- ------ -------------------------- --- - ----- --- -- ----- --------------
    Jobs:
    #J3   HOUR,OPERATOR.SYS, OPERATOR, total CPU used = 0 seconds, ldev 10.
       Step: RUN hourprog.operator.sys
        31    456 CI.PUB.SYS                202 D           Nn    35 SON, FATHER
         51    419 HOURPROG.OPERATOR.SYS    202 D           Cn     4 TIMER
    
    #J4   FTPMON,FTP.SYS, total CPU used = 1 seconds, ldev 10.
       Step: RUN ftpmon
        54    640 CI.PUB.SYS                202 D           Nn    36 SON, FATHER
         36    273 FTPMON.ARPA.SYS          152 C           Nn    26 OTHER_WAIT
    
    Sessions:
    #S6   OPERATOR.SYS, OPERATOR, total CPU used = 43 seconds, ldev 20.
       Step: STREAM jftpstrt.arpa.sys
        43   4609 CI.PUB.SYS                152 C           Nn   110 TERMINAL_READ_
    
    #S10  CDR,MANAGER.SYS, PUB, total CPU used = 0 seconds, ldev 24.
       Step: COMMENT As of 4.0, [re]setting typeahead sometimes hangs session.
        64    414 CI.PUB.SYS                152 C           Nn    10 TERMINAL_READ_
        55    196 VTSERVER.NET.SYS          152 C           Nn    13 TERMINAL_READ_
    
    #S14  STAN.SIELER, SOURCE, total CPU used = 0 seconds, ldev 26.
       Step: <not available>
        61     80 CI.PUB.SYS                152 C           Nn       FATHER
        52    212 RPMDAD.NET.SYS            152 C           Cn    27 TERMINAL_READ_
         68    137 FTPSRVR.ARPA.SYS         152 C           Nn     1 OTHER_WAIT
    
    #S15  STAN.SIELER, SOURCE, total CPU used = 15 seconds, ldev 25.
       Step: QEDIT
        58    960 CI.PUB.SYS                152 C           Nn    64 SON, FATHER
         62  12618 QEDIT.PUB.ROBELLE        152 C           Nn   189 SON
          53   1510 SHOT.PUB.NUGGETS        152 C   217  21 Nn    49 (executing)
        65  11392 VTSERVER.NET.SYS          152 C    41   4 Nn     5 TERMINAL_READ_
    
    CPU status: busy 25%, idle 75%
                  

Well, as informative as it might be, I don't see PIN 25. Maybe it isn't part of a job or session? This would mean that it would be a "system" process.

Since we don't see it as part of a job/session, it must be a system process. In order to verify this, we should look at the process type. I could tell SHOT to display more information about each process, at the cost of having less space to report why a process is in the Wait State, by typing SET MOST at the prompt. In this case, I decided I wanted to see the basic information pluse the process type and the number of page faults each process has had so far. I enter:

   ADM STATE, PIN, CPU, NAME, PRI, QUEUE, DELTA, PERCENT, &
       EXECMODE, TOTFAULTS, ptype, wait
              

Now, I ask to see all processes by typing ALL at the prompt:

    SHOT [Delta]: all
    SHOT @ MON, FEB 22, 1993,  6:43 PM
    
    ? PIN  CPU   Process Name               Pri Q Delta  %  Ic TotFl Ptyp Wait Stat
    - --- ------ -------------------------- --- - ----- --- -- ----- ---- ---------
        1  31128 PROGEN.PUB.SYS              13 A           Nn  2063 Syst PROGEN_GL
        2  19937 LOAD.PUB.SYS               142 B           Cn   156 Syst JUNK
        3   9429 pm_cleanup                 100 B           Nn       Syst JUNK
        4    285 port_facility_process       13 A           Nn       Syst pfp_port0
        5   2649 port_facility_process      152 C           Nn       Syst pfp_port1
        6   1994 port_facility_process      152 C           Nn    12 Syst pfp_port2
        7  17560 port_facility_process      152 C     2     Nn       Syst pfp_port3
        8     52 port_purger_process        152 C           Nn       Syst DELAYED_P
        9     52 xm_checkpoint_server        30 A           Nn     3 Syst XM_CHECK_
       10    712 xm_static_checkpoint_serve 152 C           Nn     2 Syst XM
       11     83 spsnet_process_init        100 B           Nn     1 Syst SPUNET_PO
       12     21 repeater_process_init      152 C           Nn     1 Syst REPEATER_
       13     43 io_mgr_process              13 A           Nn     2 Syst Port#-98
       14     70 io_mgr_process              13 A           Nn     1 Syst Port#-102
       15   1376 io_mgr_process              13 A           Nn       Syst Port#-106
       16   1590 avr_process_init           100 B           Nn    93 Syst AVR_PORT
       17     36 mms_process_init           100 B           Nn       Syst MMS_PORT
       18   3370 (CM procedure)             149 B           Cn   895 Syst cm_MESSAG
       19    464 (CM procedure)             120 B           Cn    21 Syst IO, TIMER
       20   8074 NMFILE.PUB.SYS             149 B           Cn    29 Syst cm_MESSAG
       21   1575 NMLOGMON.PUB.SYS           149 B           Nn    78 Syst Port#-160
       22     26 NMLOGICS.PUB.SYS           148 B           Nn       Syst NMS_LOG_G
       23    181 NMTRCMON.PUB.SYS           149 B           Cn    45 Syst cm_MESSAG
       24  37077 NMCONSOL.PUB.SYS           149 B     1     Nn    28 Syst Port#-170
       25   4343 io_mgr_process              13 A           Nn   456 Syst Port#-175
       26     47 io_mgr_process              13 A           Nn     1 Syst Port#-179
       27    223 io_mgr_process              13 A           Nn    12 Syst Port#-183
       28    190 io_mgr_process              13 A           Nn       Syst Port#-187
       29     43 io_mgr_process              13 A           Nn       Syst Port#-191
       30   1433 io_mgr_process              13 A           Nn   456 Syst Port#-195
       31    456 CI.PUB.SYS                 202 D           Nn    35 Main SON, FATH
       32    158 LOG.PUB.SYS                 50 B           Nn     6 Syst SYSLOG
       33    126 SYSMAIN.PUB.SYS             49 B           Nn     8 Syst SYSMAIN_P
       34    120 SPOOLMOM.PUB.SYS           100 B           Nn    13 Syst SPOOLER_M
       35   5517 OUTSPOOL.PUB.SYS           152 C           Nn    64 Syst Port#-250
       36    273 FTPMON.ARPA.SYS            152 C           Nn    26 Son  OTHER_WAI
       37   1252 SESSION.PUB.SYS            100 B           Nn   135 Syst SESSIONMA
       38    341 JOB.PUB.SYS                100 B           Nn    32 Syst 2 ports@$
                       waiting on: JOBMAIN_PORT, JOB_QUEUE_PORT
       39    549 JSMAIN.PUB.SYS             152 B           Nn   114 UCOP Port#-250
       41    512 JSMAIN.PUB.SYS             152 B           Nn    80 UCOP Port#-250
       42    715 JSMAIN.PUB.SYS             152 B           Nn    19 UCOP Port#-250
       43   4609 CI.PUB.SYS                 152 C           Nn   110 Main TERMINAL_
       44    147 TCPSIP.NET.SYS             149 B           Nn     2 Syst Port#-396
       45   2522 DIAGMON.DIAG.SYS            13 A           Nn   166 Deta TERMINAL_
       46   3017 MEMLOGP.DIAG.SYS           152 C           Nn    40 Deta TERMINAL_
       47    989 PSMON.PRED.SYS             152 C           Nn    46 Deta TERMINAL_
       48    596 JSMAIN.PUB.SYS             152 B           Nn    24 UCOP Port#-250
       49     33 PT2PNSTN.NET.SYS           149 B           Nn     1 Syst MEMORY_WA
       50    632 JSMAIN.PUB.SYS             100 B           Nn    19 UCOP Port#-250
       51    419 HOURPROG.OPERATOR.SYS      202 D           Cn     4 Son  TIMER
       52    212 RPMDAD.NET.SYS             152 C           Cn    27 User TERMINAL_
       53     18 JSMAIN.PUB.SYS             152 B           Nn       UCOP Port#-250
       54    640 CI.PUB.SYS                 202 D           Nn    36 Main SON, FATH
       55    196 VTSERVER.NET.SYS           152 C           Nn    13 User TERMINAL_
       56    531 ICMPSERV.NET.SYS           152 C           Nn   551 Syst MEMORY_WA
       57    476 SOCKREG.NET.SYS            149 B           Cn   288 Syst TERMINAL_
       58    960 CI.PUB.SYS                 152 C           Nn    64 Main SON, FATH
       59    687 JSMAIN.PUB.SYS             152 B           Nn    54 UCOP Port#-250
       60   1129 DSDAD.NET.SYS              149 B           Nn    67 Syst TERMINAL_
       61     80 CI.PUB.SYS                 152 C           Nn       Main FATHER
       62  19310 QEDIT.PUB.ROBELLE          152 C           Nn   224 Son  SON
       63    302 JSMAIN.PUB.SYS             152 B           Nn    16 UCOP Port#-250
       64    414 CI.PUB.SYS                 152 C           Nn    10 Main TERMINAL_
       65  17716 VTSERVER.NET.SYS           152 C     6     Nn     5 User TERMINAL_
       66   1781 NETCP.NET.SYS              149 B           Nn   275 Syst MEMORY_WA
       67    715 JSMAIN.PUB.SYS             152 B           Nn    26 UCOP Port#-250
       68    137 FTPSRVR.ARPA.SYS           152 C           Nn     1 User OTHER_WAI
       71    645 SHOT.PUB.NUGGETS           152 C    55   2 Nn    39 User (executin
    CPU status: busy 3%, idle 97%
                  

Well, PIN 25 is still alive, and has process type of system. It also has had 456 pages faults since it started running.

Note that SHOT displays the name of a process in three styles:

  • 1) all uppercase, with a FILE.GROUP.ACCOUNT
    -- this indicates a program file.
    The column labelled Ic will have an N number the "I" for an NMPRG (Native Mode program) and a "C" for a PROG (Compatibility Mode program).

  • 2) as "(CM procedure)" (e.g., pins 18 and 19)
    -- this indicates a process that was started not by running a program file, but by pointing to a procedure in SL.PUB.SYS and saying "go."
    This is formally referred to as "procreating" a process from a procedure. (Named from the old PROCREATE procedure in Classic MPE). These processes are very difficult to provide names.

  • 3) Mixed case (e.g., pins 3..17)
    -- this indicates a process that most utilities would leave nameless.
    Such processes are the same type as case 2, but SHOT determined exactly which procedures they were running. (These are processes that were started as procedures in NL.PUB.SYS.)

PIN 25 is a procreated process from NL.PUB.SYS. SHOT determined its name with the following technique, which you can use from DEBUG:

  • 1) Enter DEBUG
          :debug
                    
    Note: entering DEBUG from the Command Interpreter (CI) requires Privileged Mode (PM) capability.

  • 2) Using the PIN number from SHOT, enter:
          PIN #25
                    
    The "#" tells DEBUG that 25 is a decimal number, not a hex or octal number. Note that SHOT defaults to reporting pins in decimal, but will gladly report in hex if you type SET HEX at the SHOT prompt.

  • 3) Do a stack trace on the process:
          tr , i , d
                    

NOTE: you normally want to combine the PIN and TR commands on one command line!. That's because the PIN command takes a snapshot of the registers ... which rapidly becomes stale information if the process is active, rendering the subsequent stack trace somewhat suspect. Thus, "PIN #25; TR, I, D" minimizes the time delay.

When I do this to PIN 25, I get a display:

    PIN #25; TR, I, D
    
           PC=a.0014b6e8 enable_int+$2c
    NM* 0) SP=40331680 RP=a.002d47cc notify_dispatcher.block_current_process+$480
    NM  1) SP=40331680 RP=a.002d81fc notify_dispatcher+$25c
    NM  2) SP=403315f0 RP=a.00421364 wait_for_active_port+$ec
    NM  3) SP=40331510 RP=a.00421dfc receive_from_port+$320
    NM  4) SP=403314b0 RP=a.003652c0 receive_msg+$244
    NM  5) SP=40331350 RP=a.003ac90c io_mgr_process+$290
    NM  6) SP=40331250 RP=a.005233a0 outer_block+$138
    NM  7) SP=403310e0 RP=a.00000000 _traplib_version
                  

Look near the end of the stack trace for a procedure called "outer_block" (it should be underlined above, but not on a real "tr" output). The line above this contains the name of the procedure that was started as a process, unless it says something like ?TERMINATE.

If that is the case, look one line higher. For PIN 25, it is "io_mgr_process".

Using SHOT and DEBUG we've looked at what processes are running on a typical MPE/iX machine. On this machine, the first 38 processes were system processes -- more processes than were hanging around in MPE V!


Updated 2002-12-13

 
     
  www.resource3000.com   Resource 3000 - Technical Paper