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 --
DYNABLDL will then:
Stopping DYNABLDL processing:
To stop DYNABLDL use the following operator command.
S DYNABLDL,PARM=STOP -- or --
DYNABLDL will then:
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 --
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=REPORT -- or --
The following is a sample report from the source code. Only the first 25 lines are displayed:
Shown are the contents of the currently active dyna-table sorted three ways:
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%
MAX ENTRY AGE 439 MINUTES, MAX ENTRY IDLE TIME 107 MINUTES
SORTED BY NAME SORTED BY HITS SORTED BY L.R.U.
CNT NAME LIB# HITS HITS NAME IDLE AGE IDLE NAME HITS
The information on this site is the combined effort of a lot of people,
please credit the authors if you use their information.