 
                     OPA - Online Pool Analyzer 
 
 OPA is a privileged task to display a snapshot map of the current contents of
 pool.  This  program  is  sufficiently  valuable  to  all  system managers or
 programmers  who  have  pool space problems that it is well worth the risk of
 using.  However,  it is necessary while this program is scanning through pool
 to be on the system stack. It has been made somewhat more rugged than the 3.1
 version  submitted for San Diego DECUS, as it now catches its own odd address
 or memory protect traps, and reports them rather than causing a system crash.
 It  is,  however,  conceivable  that  it might corrupt something in the EXEC,
 although  rather  less  likely. The biggest problem from overuse is that some
 device  drivers may require frequent access to system state (i.e. forking) in
 order  not  to  lose interrupts. While this task is collecting data, the EXEC
 cannot  handle  fork  requests.  However  it  has  been in use on the Process
 Control  development  computers  in MSDGO at Caterpillar for quite some time,
 with no adverse effects. 
 
 Usage:   >OPA

 Additional qualifiers: UNIDENTIFIED_STRUCTURES, IDENTIFIED_STRUCTURES
                        RESTRICTIONS

2 UNIDENTIFIED_STRUCTURES

 The program will identify about 95% of the data structures kept in pool, in
 its current version. Remaining known structures not identified are: 
 
 AST       control blocks and I/O packets associated w/full-duplex TT  driver
 RECEIVE   packets (certain tasks [notably TKTN, LOADER] have non-standard  
           message sizes, and without significant checking any attempt to map 
           those packets along with the standard ones would be difficult.
 FCB's     for other than INDEXF.SYS (The window blocks for files  which are 
           open by tasks currently in memory have been done, but not the 
           associated FCB's since many are buffered in the ACP anyway.) 
 BUFFERS   allocated by the half-duplex terminal driver for as-yet incomplete  
           unsolicited input, or completed messages for MCR from either TT 
           driver
 ERRLOG    an 8-word block allocated by ERRLOG which is undocumented... 
 DECNET    data structures... 
 TRANSIENT some rather transient data structures such as UMR  allocation blocks
 OTHERS    for which no documentation could be found... 
 NON-RSX   data structures from other layered products and software from third 
           party vendors. For example SRF (System Reporting Facility from GEJAC 
           Inc.) uses a lot of pool but its data structures will show up as 
           question marks in the OPA listing. 
 
2 OUTPUT

 The program output will appear on the invoking terminal, unless the task is
 installed and the LUN re-assigned to something like the lineprinter. If the
 task  gets a command-line switch of /F, then it will list the free- segment
 list described below, otherwise it will skip directly to the map output. 
  
 Output format: 
   
 1st line:       number of fragments of pool 
 2nd line:       total words of pool 
 next n lines:   addresses and sizes of all free segments in pool 
 next line:      total number of words free in pool 
   
 Map format: 
   
 In  this  display, each ASCII character represents a minimum allocatable piece
 of pool, i.e. 4 bytes. Each line is 64(10) characters, corresponding to 400(8)
 bytes of pool. 
 
 Free area is shown by -------- 
 Used but not identified is shown by ???????? 
 
2 IDENTIFIED_STRUCTURES

 Structures identified by OPA:

  1. <A>      represents an attachment discriptor block 
  2. [An]     is a specifed-ast control block, where n is the ast type code
  3. <M       is a mount control block 
  4. <CP>     is a checkpoint file control block 
  5. <TCB - ...MCR>    is the task control block for task ...MCR
  6. <Cn>    is a clock queue control block, where n is the type 
  7. <Lx     is a logical assignment control block.  <L/> is a login assignment
  8. <VCB - DBn:>  the volume control block for device DBn: 
  9. <FCB @DBn:>   a file control block found for a file on DBn: 
 10. <WB=========> a window block for a file 
 11. <I DV:  >     an interrupt control block for device DV: 
 12. <DCB+UCB+SCB = DV:%%>  Structures for loadable driver w/loadable database.
 13. <HEADER ...OPA###########> is a task header for task ...OPA.  
 14. <IO DVn:>  is an I/O packet either in use or queued to device DVn:, does 
                not include 'buffered I/O packets' used by FDX TT driver.  
 15. <PKT OPT>  is a saved I/O size packet for QIO optimization.  
 16. ( FCSRES)  is a PCB for a permanent partition, while (/...OPA) is a sub-
                partition  control block, typically for a task in a system 
                controlled partition. A subpartition control block for a driver
                is (/ ZB:  ), while (+NT.DL ) is a dynamic or PLAS region. 
 17. <MCR LINE FOR ...RMD>  MCR cmd line for task which has not done a GMCR$ yet
2 RESTRICTIONS

 Known bugs and restrictions:
 
 This version of OPA was written for  RSX11M  V3.1/V3.2.   Under  RSX11M 
 V4.0 it still works and is still a very useful tool for evaluating pool 
 problems but some of the  data  structures  have  become  longer.   For 
 example the TCB is longer for V4.0 than for V3.2.  OPA still identifies 
 the start of TCB's correctly but not the length.  So the OPA  map  will 
 always  have  3  question marks after each TCB.  Also one question mark 
 will appear after each VCB since volume control blocks  also  increased 
 in  size.   There  are probably other structures that increased in size 
 but TCB's and VCB's are the most noticeable. 
  
