Home Up Search Credits Site Map Contact Info. Links Disclaimer Download

horizontal rule

Turnkey MVS3.8J

Volker Bandke's Turnkey MVS3.8J system has pre-installed the DYNABLDL routine from the CBT Tape.  This WEB page is to document the routine and the operator commands to control DYNABLDL.  This information was found inside the source for the routine.


 BLDL processing is used by MVS to locate the starting position to read a member of a PDS on DASD into storage.  This is true for both text files and load modules.  The operating system searches the directory of the PDS to find a matching member name.  Then the starting location is read into storage and the member processing starts. 

 The BLDL function is used heavily to locate programs within the LINKLST data sets.  The LINKLST data sets contain the operating systems routines and program products such as utilities, compilers, and TSO commands.   The searching of large LINKLST data sets concatenations for member names causes large amounts of I/O on the MVS system.

 BLDL processing is implemented within MVS by module IGC018.  This is the SVC routine for BLDL (SVC 24).  You will see IGC018 referenced in the description below, so now you know were it comes from.

 The DYNABLDL modification front-ends the operating systems BLDL processing to maintain a table of commonly referenced member names so their address can be passed back to the calling program without incurring the search I/O. 

 So what is the problem with having a dynamic BLDL function running? 

There is none till you change the DASD location of a module within the LINKLST.  You then need to “refresh” the BLDL table within storage.

 The rest of this overview details the commands that are available to manage the Dynamic BLDL table and software.  This information was obtained from the source code and reproduced here.


 The following assumes that DYNABLDL has been installed on the MVS system as it has been on the Turnkey system.

 Starting DYNABLDL processing:

 To start DYNABLDL use the following operator command.        

S DYNABLDL                                 -- or --                    
            S DYNABLDL,PARM=START     -- or --
            S DYNABLDL,PARM=S                                     

DYNABLDL will then:

bulletAttempt to recognize the version of IGC018 running on your system,
bulletDetermine whether or dynamic BLDL processing is already up and running           
bulletGenerate intercept routines in fixed global memory    
bulletInsert into IGC018 jumps to the intercept routines
bulletTerminate leaving behind the enabled intercept routines                                                    

 Stopping DYNABLDL processing:

 To stop DYNABLDL use the following operator command.         

S DYNABLDL,PARM=STOP      -- or --                    
            S DYNABLDL,PARM=P

DYNABLDL will then:

bulletRemove the hooks from IGC018 (by restoring the original code)
bulletFree the global memory containing the intercept routines                                      



 A DYNABLDL activity report can be generated only while DYNABLDL processing is active. To generate an activity report, use the following operator command.

S DYNABLDL,PARM=REPORT              -- or --                    
            S DYNABLDL,PARM=R                                   

The above commands will produce a hardcopy report of the DYNABLDL activity.  This report will print on your default printer based on the JES2 settings.

To generate only an activity summary message on the console via a Write to Operator (WTO), use the following operator command.                              

            S DYNABLDL,DSN=NULLFILE,PARM=R                        

The following is a sample report from the source code.  Only the first 25 lines are displayed:

Below is a typical activity report generated by my DYNABLDL.                   

Shown are the contents of the currently active dyna-table sorted three ways:


Alphabetically by load module name


By the number of  times that the name was searched for and found in the dyna-table ("hits")


By the number of minutes that have elapsed since the name was last searched for ("L.R.U." or "Least Recently Used")

Also shown is the following information:                                       

DYNABLDL processing has been active for 7 hours and 19 minutes.                

The table currently contains 256 entries, which in this case completely fills the table. (The maximum table size is determined at DYNABLDL assembly time. Each table entry takes 96 <decimal> bytes of fixed, common memory).                                                                

Many table entries have gone unreferenced for nearly two hours (up to 107 minutes, in fact). Possibly, I have generated a larger table than I really need. (An installation can choose any table size it desires whenever it re-assembles DYNABLDL)                                 

The dyna-table has enjoyed a hit rate of over 91% and, therefore, has save a considerable amount of disk I/O.                                        

Of the 654 misses, 403 were for modules that subsequently were found in one or another of the LINKLST libraries. Once found, these names were added to the dyna-table replacing older names that had been used the least recently. (Note, the next such miss will replace a name that hasn't been used for nearly two hours). You may notice that a few table entries show a zero hit count. These are entries that have not yet been referenced again since they were first added to the table.

Of the 654 misses, 251 were for modules that were NOT found in the LINKLST libraries. These were either CLIST names or invalid names.

Each of the three sorted lists shows the number of times each entry satisfied a BLDL request - "hits".                                             

The NAME sorted list shows the concatenation id number of the LINKLST library in which each load module was found. (Our installation has nine datasets in its LINKLST concatenation).                                        

The HITS sorted list shows the length of time (in minutes) each entry has survived in the dyna-table.                                                

The HITS sorted list also shows which modules are reentrant. When such a module has a high hit count, it would be worth considering placing it into LPALIB.                                                                    

Both the HITS sorted list and the L.R.U. sorted list show the length of time (in minutes) each entry has gone unreferenced.

- Dave Cole              

     DYNAMIC BLDL ACTIVITY REPORT                                              

     TABLE LIFE 7:19, ENTRIES 256                                              

     HITS 7029, MISSES 654 (GOOD NAMES 403, BAD NAMES 251), HIT RATE 91.5%     


          SORTED BY NAME     SORTED BY HITS             SORTED BY L.R.U.    
                             (* MEANS REENTRANT)                            

     1    $AUTHEXT 8     72    508 *IEEVSEND    0  374     0 DYNABLDL     0
     2    $DASDMNT 8      1    437 *EXEC        0  390     0 PGM         11 
     3    $DATECNV 8      1    343 *ALLOC       0  390     0 ALLOC      343 
     4    $MINDX   8      2    319 *IBMBOPCA    3  262     0 IEEVSEND   508 
     5    $MNTMON  8      0    319 *IBMBOPBA    3  262     0 EXEC       437 
     6    $MNTMRG  8      0    319 *IBMBOPAA    3  262     0 SORT        84 
     7    $MNTREN  8      0    318 *IBMBOPDA    3  262     0 IOFCMD      43 
     8    $NEWPARS 8     72    239 *IBMBOCAA    3  262     0 IOFSPF      36 
     9    $OPTIONR 8      2    115 *FREE        3  390     1 IEWL        53 
     10   $OPTIONS 8      8    105 *IEEVSTAR   38  439     1 IDCTSUV0    33 
     11   $PDSFA31 5      5     96 *IBMBOPEA   11  251     2 PDS         25 
     12   $PDSXF31 5      5     84  SORT        0  326     2 IDCTSLC0    23 
     13   $SM      8      2     82  ICEAM1     11  326     2 IDCLC01     23 
     14   $SP      8      7     72  $AUTHEXT    5  119     2 IDCCDLC     23 
     15   $SPCUB   8      4     72  $NEWPARS    5  119     2 IDCRILT     34 
     16   $STATUS  8      2     71 *IKJEFF10    4  374     2 IDCRI04     32 
     17   $TAU     8     11     71 *IKJEFF04    4  374     2 IDCTSTP0    34 
     18   $VALASM2 8      1     69 *SUBMIT      4  374     2 IDCTSEX0    34 
     19   $VUDATA  8      1     68 *IBMBREFA   11  262     2 IDCIO04     32 
     20   AHLCWRIT 0      2     67 *IKJEFT25    3  390     2 IDCSATO     32 
     21   AHLGTF   0      2     67 *LOGOFF      9  343     2 LISTC       31 
     22   AHLTMON  0      2     64 *IKJEES73    3  390     2 IKJEHSIR    36 
     23   AHLWTASK 0      2     63 *IBMBPGRA    3  262     2 LISTD       15 
     24   ALLOC    3    343     63 *IBMBPIIA    3  262     3 FREE       115 
     25   ALLOCATE 3     33     62 *IKJEFF18    4  390     3 TERMINAL     3 

horizontal rule

The information on this site is the combined effort of a lot of people, please credit the authors if you use their information.
Please read the Disclaimer page for the restrictions, copyright, and other uses of the information contained on this site.
For problems or questions regarding this web contact Bob.
Last updated: November 26, 2003.