MPE/iX Resource Utilization: Who Is Running?

Stan Sieler

Allegro Consultants, Inc.

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.

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 [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:

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:

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:

       EXECMODE, TOTFAULTS, ptype, wait

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

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:

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

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:

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