RTIBIND and the IBM Run Time Instrumentation Profiler

The IBM Run Time Instrumentation (RTI) Profiler is a performance analysis tool to collect and report on the execution time CPU performance characteristics of your batch z/OS applications.

The RTIBIND option controls whether to rebind your modules with the RTI program modules to enable the RTI performance profiling reports to be generated when the program runs.

All the Language Environment (LE) CSECTs in your application can be bound with the RTI program modules to enable profiling in order to get a complete picture of overall CPU performance. This includes programs compiled by the IBM COBOL, C/C++ and PL/I compilers as well as COBOL programs optimized by ABO. The time spent in any LE library routines is also collected and reported.

Read syntax diagramSkip visual syntax diagramRTIBIND= N | NOI | INO | OUTA | ALL

Default

RTIBIND=N | NO

Usage

When RTIBIND=N | NO is specified, ABO optimizes any eligible CSECTs as usual, and does not rebind any of the input program modules with the RTI program modules.

When RTIBIND=I | IN is specified, ABO does not perform any optimizations, but only rebinds all the input program modules with the RTI program modules (that is, rebind the modules specified by the BOPT IN= directive).

When RTIBIND=O | OUT is specified, ABO optimizes any eligible CSECTs as usual, and rebinds any input program modules that have at least one eligible CSECT optimized with the RTI program modules (that is, rebind the modules optimized and placed in the location specified by the BOPT OUT= directive).

When RTIBIND=A | ALL is specified, ABO optimizes any eligible CSECTs as usual, and rebinds these optimized modules plus any input modules that are not optimized, with the RTI program modules (that is, rebind the union of all the modules specified by BOPT IN= and OUT= directives).

New SYSLIB requirement for the JCL used to invoke ABO

When specifying RTIBIND=I | O | A, the JCL used to invoke ABO requires an additional DD name, SYSLIB, to be present (see JCL sample)

 //SYSLIB   DD DSN=hlqboz.BOZ210.SBOZMOD1,DISP=SHR  <- ABO install location
 //         DD DSN=hlqcee.SCEELKED,DISP=SHR
 //         DD DSN=hlqcee.SCEELKEX,DISP=SHR
If the SYSLIB DD is not specified when required, the severe message BOZ1426S is issued:
BOZ1426S Link library "SYSLIB" not specified or does not specify a PDS(E).

Capturing profiling results during program execution

Before using the RTI Profiler enabled modules, you must allocate a PDS or PDSE dataset in order to hold the profiling results. The RTI Profiler generated report is stored into a member of this dataset. In the following JCL examples, this dataset is named hlq.SYSPROFD.

The following table shows the recommended allocation parameters for hlq.SYSPROFD.

Table 1. Recommended allocation parameters
Data sets Recommended allocation parameters
hlq.SYSPROFD (as a PDS)
Space units : CYLINDER
Primary quantity : 10
Secondary quantity : 10
Directory blocks : 10
Record format : FB
Record length : 80
Block size : 27920
Data set name type PDS
hlq.SYSPROFD (as a PDSE)
Space units : CYLINDER
Primary quantity: 10
Secondary quantity : 10
Directory blocks : 10
Record format : FB
Record length : 80
Block size : 27920
Data set name type LIBRARY

In addition, when running the application containing the RTI rebound modules there are two modifications required to your run step JCL in order to collect the profile.

In your existing JCL for executing your program:
  • Add the ABO install location, for example hlqboz.BOZ210.SBOZMOD1, to the existing STEPLIB
  • Add the DDNAME SYSPROFD as the location to receive the profiling results
Below is a JCL example for this step:
 //GO EXEC PGM=pgmname
 //STEPLIB DD DSN=hlq.OUT.LOAD.RTI,DISP=SHR        <- the RTI rebound modules from ABO 
 //        DD DSN=hlqboz.BOZ210.SBOZMOD1,DISP=SHR  <- add ABO install location 
 //SYSPROFD DD DSN=hlq.SYSPROFD(pgmname),DISP=SHR  <- add SYSPROFD DD

When program execution completes, the profiling results are contained in hlq.SYSPROFD(pgmname).

If SYSPROFD is not added in the execution step, the message RIDATA: OPENING SYSPROFD FAILED is generated to the job log. Also, the abend code ABEND=S000 U1130 REASON=00000000 is produced.

Understanding the RTI Profiler Results

The output of the RTI Profiler is a text file containing details per compiled or optimized module and CSECT where the program is spending its time while running. There is a high-level summary provided as well as a breakdown of timing samples down to the offsets within each CSECT. For more detailed information, see Run Time Instrumentation report.

In conjunction with the corresponding compiler or ABO listing files for the programs being profiled, the RTI Profiler output can help determine specific parts of your program, down to the machine instruction, where there may be opportunities for improving application CPU performance.

An IBM support or development representative may also request the RTIBIND option be used and an RTI Profile be collected, and its output sent to IBM along with other artifacts (e.g. listing files) from the original compilation or optimization of your programs to aid in performance investigations.

RTI Profiler hardware and software prerequisites

The supported z/OS versions for using the RTI Profiler are z/OS 2.2 and above.

The supported IBM Z systems for using the RTI Profiler enabled modules are zEC12 and later: zEC12, zBC12, z13, z13s, z14, z14 ZR1, z15, and z15 T02.

RTI Profiler capabilities and restrictions

The RTI Profiler is best suited for in-depth CPU profiling of LE enabled batch applications but does not provide other system-level performance metrics such as wait times, I/O performance or DASD usage.

The RTI Profiler can be used on all LE enabled batch applications including IMS batch and batch programs that interact with Db2®. Running non-LE programs that have been rebound with the RTI program modules is not supported and the result is unpredictable.

The RTI Profiler does not work for CICS® applications and is not supported for any application that is part of a non-batch IMS environment.

The RTI Profiler will not work if your z/OS operating system is running on z/VM®. If run on z/VM guest, the message RISTART: AUTH REQUEST FAILED is output to the job log.

The RTI Profiler does not provide CSECT level details for modules in LPA or that are managed by LLA. Profiling sample information will only be reported at the module level for these cases.

If you require more complete and full featured application profiling, we recommend using a profiling tool such as Application Performance Analyzer for z/OS in ADFz.

Notes:
  1. SCAN=Y takes precedence over the RTIBIND option settings. Specifying SCAN=Y disables rebinding with the RTI program modules and optimization of any eligible CSECTs regardless of the RTIBIND option.
  2. When processing a module originally linked with the AMODE 24 or RMODE 24 option and then processed by ABO with the RTIBIND=I | O | A option, the warning message BOZ1490W is expected. The BOZ1490W message reflects an AMODE/RMODE conflict due to rebinding with the AMODE 31 RTI modules. The message has no impact on the original module execution. The program will still run correctly in the original AMODE 24 or RMODE 24 mode.
  3. The RTIBIND option is the most convenient way to enable modules for RTI profiling. However, if you require more low-level control of the rebinding process, see Manual RTI rebinding instructions.
  4. If the program to be profiled was compiled using VS COBOL II or an ABO optimized VS COBOL II compiled program, an extra step might be needed to rebind the module to replace the bootstrap routine IGZEBST with the current version from LE. If you do not see any profiling output at the SYSPROFD location after using RTIBIND and attempting to profile VS COBOL II or an ABO optimized VS COBOL II compiled program, follow the steps below to replace the IGZEBST routine before using RTIBIND (or before following the manual rebinding steps) to enable the module for RTI profiling.
    //LKED EXEC PGM=IEWL,PARM=’options’ <- original link options
    //SYSLIB DD DSN=hlqcee.SCEELKED,DISP=SHR
    // DD DSN=hlqcee.SCEELKEX,DISP=SHR
    //LOAD DD DISP=SHR,DSN=&LOAD <- original module that will be linked with new IGZEBST
    //SYSLMOD DD DISP=SHR,DSN=&SYSLMOD(pgmname) <- output module location
    //SYSPRINT DD SYSOUT=*
    //SYSLIN DD *
      INCLUDE SYSLIB(IGZEBST)  <- new bootstrap to include from CEE
      INCLUDE LOAD(pgmname)    <- original member from LOAD to link new parts into
      REPLACE -IMMED,IGZEBST   <- bootstrap member to replace
      ENTRY pgmname
      NAME pgmname(R)
    //*