Using LE370 with the CA Repository for z/OS.

Document ID : KB000053449
Last Modified Date : 14/02/2018
Show Technical Document Details

Description:

The following document describes the correlation between LE/370 and the CA Repository for z/OS.

Solution:

Concatenation of Runtime libraries

The LE370 Runtime library SCEERUN replaces both the PLI and COBOL runtime libraries. IF the LE370 runtime library is in the Link list make sure that there are no PLI and COBOL runtime libraries listed ahead of the LE370 library. If The LE370 runtime library is in your STEPLIB, make sure that the PLI and COBOL runtime libraries have been removed. Mixing LE370, COBOL and PLI runtime libraries will cause various abends.

Common abends

U4091
A User 4091 abend always means that the LE370 ERRCOUNT parameter has not been set properly. Repository/MVS requires that the ERRCOUNT parameter be set to ZERO - ERRCOUNT(0). Refer to the section below on setting LE370 runtime parameters for more information.

U4000
A User 4000 abend usually means that there is an old PLI 1.5 runtime library in the Link List and this library is being used for PLI runtime modules instead of the LE370 runtime library. PLI 1.5 is not compatible with LE 370 and is not supported by Repository/MVS.

U4048
A User 4048 abend indicates that one of the IBM PLI modules was modified, and is now causing problems in an LE370 environment. For more information refer to IBM document BDC000006324 on IBMLINK.

U8XXX
User abends in the 8000 series usually mean that PLI and COBOL runtime libraries are being used instead of the LE370 runtime library.

U4XXX
User abends in the 4000 series except for U4000 are legitimate LE370 runtime abends. If you are unable to resolve one of these abends by following the instructions in this document, please report the abend to tech support.

Return Code Initialization

There have been several instances where a Repository/MVS batch job will no longer function properly after upgrading to a newer release of LE370. The symptons are that the program will immediately terminate for no apparent reason. Sometime a bad return code is issued. In other cases the Return code is zero.
In all cases the Return code has not been initialized prior to calling a PLI subroutine. Listed below are the available Repository/MVS APARS that have been published to correct this problem.

LE370 Runtime Parameters

ALL31
ALL31(ON) allows Language Environment to allocate its control blocks above the line. With ALL31(OFF), Language Environment increases its use of below the 16-MB line storage.

The CA Repository for z/OS ARZOS rexx member contains ALL31(ON) since every program in the Langauage Environment enclave was linked with AMODE(31).

RPTOPTS
Setting the RPTOPTS parameter to ON - RPTOPTS(ON) will produce a report of the LE370 runtime installation defaults. This report should be analyzed to determine if any of the options specified above should be changed.

RPTSTG
Setting the RPTSTG parameter to ON - RPTSTG(ON) will produce a report of the amount and types of storage used by a particular process at runtime. The report can be used to help maximize performance.

HEAP
Heap storage is used to manage PLI controlled and based storage and COBOL working storage. Repository/MVS is a heavy user of Heap storage. Controlled storage is allocated at run time when the amount of storage required is unknown at development time. For example, Controlled storage is allocated to hold all fields within a record when processing copybooks. Storage is allocated and freed as needed.

Allthough the application was written to free storage when it was no longer required, LE370 may not actually free the storage until the application ends. The LE370 HEAP storage option controls when storage is actually freed. The HEAP storage option also controls how much storage is initially and subsequently allocated when requested. The installation default for HEAP storage can be found in the options report RPTOPTS(ON). An example of the HEAP parameter is HEAP(32768,32768,ANYWHERE,KEEP,8192,4096). The fourth parameter KEEP tells LE370 to ignore free requests from the program and instead keep the memory until the program ends. If you are running out of memory and receiving U4038 or U4039 abends you will want to change the fourth parameter to FREE.

The first parameter represents the amount of Heap memory initially acquired when the application is started. The second parameter represents the amount of Heap memory subsequently allocated when the initial amount is insufficient to satisfy an allocate request. The runtime storage report (RPTSTG(ON) can be used to help tune memory allocation. An example of the report is shown below.

HEAP statistics:
Initial size: 512000
Increment size: 512000
Total heap storage used (sugg. initial size): 1205688
Successful Get Heap requests: 123
Successful Free Heap requests: 103
Number of segments allocated: 3
Number of segments freed: 1

To improve performance, you will want to increase the Initial storage allocation.

STACK

Stack storage is used to manage PLI automatic variables and COBOL local storage. Repository/MVS is also a heavy user of Stack storage through the use of subroutines. Every time a subroutine is called Storage will be allocated to contain the automatic variables. The storage is freed on a return. The LE370 STACK storage option controls when storage is actually freed. The STACK storage option also controls how much storage is initially and subsequently allocated when requested. The installation default for STACK storage can be found in the options report RPTOPTS(ON). An example of the STACK parameter is STACK(665600, 51200, BELOW, KEEP). The fourth parameter KEEP tells LE370 to ignore free requests from the program and instead keep the memory until the application ends. If you are running out of memory and receiving U4038 or U4039 abends you will want to change the fourth parameter to FREE.

The first parameter represents the amount of Stack memory initially acquired when the application is started. The second parameter represents the amount of Heap memory subsequently allocated when the initial amount is insufficient to satisfy an allocate request. The runtime storage report (RPTSTG(ON) can be used to help tune memory allocation. An example of the report is shown below.

STACK statistics:
Initial size: 665600
Increment size: 51200
Maximum used by all concurrent threads: 750208
Largest used by any thread: 750208
Number of segments allocated: 3
Number of segments freed: 0

To improve performance, you will want to increase the Initial storage allocation.

Other sources of information

For more information regarding LE370 runtime options, refer to the IBM Language Environment manuals.

Setting LE370 Runtime options

LE370 parameters can be set two ways. LE370 installation overrides can be used. The LE370 System Programmer can set a parameter for the entire installation, or individual parameters can be overridden through the use of job step parameters. This section of the document shows how to override individual LE370 parameters on a step by step process.

Batch jobs
LE370 runtime parameters are specified on the PARM= statement of the EXEC statement. A slash in the PARM= statement separates LE370 runtime parameters from program parameters. PLI programs contain LE370 runtime options before the slash. COBOL programs contain LE370 runtime parameters after the slash. To set RPTOPTS on for a PLI program you would code PARM='(ERRCOUNT(0),RPTOPTS(ON)/program specific parameters)'. To set RPTOPTS on for a COBOL program you would code PARM='(program specific parameters/ERRCOUNT(0),RPTOPTS(ON))'.

The maximum length of a PARM= statement on the EXEC statement is 100 characters. Because there are many LE370 runtime options that can be set, the program specific parameters started to exceed the maximum length. For this reason the Repository/MVS batch jobs are starting to use a PARMFILE DD statement to hold program specific parameters.

REXX Exec

LE370 runtime parameters are specified on the PARM statement of a program within a REXX exec. The ARZOS REXX exec has been setup to provide optimal performance of the online application. The pertinent information regarding LE370 parameters is listed below.

PARM1 = "ERRCOUNT(0),STACK(669K,500K,BELOW,FREE),", 
        "HEAP(1M,200K,ANYWHERE,FREE),", 
        "THREADHEAP(4K,4K,ANYWHERE,KEEP),", 
        "ANYHEAP(8K,4K,ANYWHERE,FREE),", 
        "LIBSTACK(12K,4K,FREE),", 
        "DEPTHCONDLMT(0),ALL31(ON),POSIX(ON)", 
        "RPTOPTS(OFF),RPTSTG(OFF)", 
        "STO(00,NONE,00,0)" 

Erroneous Parm Option Ignored

If you receive the message "Erroneous Parm Option Ignored" when trying to set LE370 runtime options such as ERRCOUNT, you are not using the LE370 runtime library.