Skip to main content

 
IBM Systems  > Servers  > Mainframe servers  > z/OS  > 

Performance tuning targets

for z/OS UNIX System Services

  
grey_rule.gif

Customers are often surprised by the difference tuning will make. In some cases, the tuning can improve throughput by 2 to 3 times, and response time by 2 to 5 times.




Tuning tips for SYS1.PARMLIB

Putting the SCEELPA data set in the LPA list

Because the SCEERUN data set has many modules that are not reentrant, you cannot place the entire data set in the link pack area using the LPALIST member of SYS1.PARMLIB. However, you can take advantage of a SCEELPA data set that contains a subset of the SCEERUN modules - those that are reentrant, reside above the line, and are heavily used by z/OS UNIX.

To improve performance, put the SCEERUN data set in the link list, using the LNKLSTxx member of SYS1.PARMLIB. Then place the new SCEELPA data set in the LPA list, using the LNKLSxx member.

Tip: You can also add additional modules to the LPA, using the dynamic LPA capability (SET PROG=). This method is preferable to adding modules to the LPA by using the Modify Link Pack Area (MLPA=) option at IPL, because it avoids the performance degradation that occurs with the use of MLPA.

For more information about LPALSTxx and LNKLSTxx, see z/OS MVS Initialization and Tuning Reference.

Putting the linkage editor into dynamic LPA

Before you begin: Your primary Language Environment level must be the default level for the release, and you must be using the default compiler. To verify your Language Environment primary level, check that the library name (for example, CEE.SCEERUN) appears first in the linklist concatenation in the LNKLSTxx member of SYS1.PARMLIB.

On systems where application development is the primary activity, performance may benefit if you put the linkage editor into the dynamic LPA by making these changes to the PROGxx member of SYS1.PARMLIB:

SYS1.PARMLIB(PROGxx)
      LPA,ADD,MODNAME(CEEBINIT,CEEBLIBM,CEEEV003,EDCZV)
                        ,DSNAME(CEE.SCEERUN)
      LPA,ADD,MODNAME(IEFIB600,IEFXB603),DSNAME(SYS1.LINKLIB)

Putting CBC.SCBCCMP into the LPALIST concatenation

Before you begin: Your primary Language Environment level must be the default level for the release, and you must be using the default compiler. To verify your Language Environment primary level, check that the library name (for example, CEE.SCEERUN) appears first in the linklist concatenation in the LNKLSTxx member of SYS1.PARMLIB.

On systems where application development is the primary activity, performance may benefit if you put CBC.SCBCCMP in the LPALST concatenation. All compiler modules run above the line, and they consume just over 42 MB in total.

Ensuring VLF caching of UIDs and GIDs

Before you begin: Your primary Language Environment level must be the default level for the release, and you must be using the default compiler. To verify your Language Environment primary level, check that the library name (for example, CEE.SCEERUN) appears first in the linklist concatenation in the LNKLSTxx member of SYS1.PARMLIB.

To ensure VLF caching of UIDs and GIDs, add the following statements to your COFVLFxx parmlib member, if they are not already included.

...
 ...
 CLASS NAME(IRRGMAP)
       EMAJ(GMAP)
 CLASS NAME(IRRUMAP)
       EMAJ(UMAP)
 CLASS NAME(IRRGTS)
       EMAJ(GTS)
 CLASS NAME(IRRACEE)
       EMAJ(ACEE)

After you are done, make sure that you have VLF started and are using the COFVLFxx parmlib member.


Tuning tips for the file system

You can fine-tune your file system with the following tips:

  • Make sure that all files in your file system have valid owning UIDs and GIDs. If you restore files from an archive and accidentally keep an UID and GID that were valid on another system, it can create problems that affect response time. For example, say that there is an invalid UID associated with a file - when you use a utility that checks the UID (such as ls -l), RACF searches the entire database for the UID.
  • Place HFS data sets on packs that are cached with DASD Fast Write.
  • Give each user a separate mountable file system. Doing so enables you to spread user file systems across multiple DASD devices, to avoid I/O contention.
  • Use control unit caching with DASD Fast Write. Doing so can improve make processing.
  • Use the temporary file system (TFS) for /tmp.



Tuning tips for the compiler utilities

This section contains tuning tips for the compiler utilities ( c89/ cc/ cxx/ c++).

Restriction: The main compiler executable ( c89/ cc/ cxx/ c++) cannot be made a shared library object because it is not a DLL that is loaded. Instead, it is executed via spawn or exec.

If you are using the compiler utilities, you have two tuning options:

  • Turn off the s extended attribute. The extended attribute is turned off because the computer utilities should not be locally spawned.
  • Put the c89, cc, cxx and c++ commands into the LPA.


Turning off the s extended attribute for the compiler utilities

Because the compiler utilities should not be locally spawned, use the extattr command with the -s option to turn off the extended attribute for these utilities. The _BPX_SHAREAS and _BPX_SHAREAS_REUSE environment variables will then be ignored during spawn. You will also gain most of the performance benefit of putting the module in LPA with less effort.

Rule: To specify the -s extended attribute, you must be the owner of the file or have superuser authority.

Example: 
extattr -s /bin/c89 /bin/cc /bin/cxx /bin/c++ 

However, if you want the best compile performance, put the compiler utilities in LPA as described below. Like using the -s extended attribute, putting them in LPA prevents local spawn and also gives you the other benefits of putting modules in LPA, such as no load from disk and one copy of the module in virtual storage.

Putting the compiler utilities into the LPA

In general, follow these steps when moving a module into the LPA, after making sure that the s extended attribute has not been set:

  1. Preallocate a PDSE library using ISPF option 3.2. For a PDSE, you must specify DSNTYPE=LIBRARY.
  2. Bind the executable into the PDSE by issuing the cp command in the z/OS UNIX environment.
                                         
    Example:
    cp -X myprog "//'OECMD.LPALIB(MYPROG)' "
    cp -X mylongprogram "//'OECMD.LPALIB(MYLONGPG' "
                                      
  3. Add the PDSE library to the dynamic LPA. You have two choices:
    • Use the SETPROG console command to add the library to the dynamic LPA without reIPLing.
    • Update the PROGxx parmlib member to ensure that the library is in the dynamic LPA after the next IPL.
  4. Point to the new program by using an external link from the z/OS UNIX environment.
                                         
    Example:
    
    mv myprog myprog.backup
    mv mylongprogram mylongprogram.backup
    ln -e MYPROG myprog
    ln -e MYLONGPG mylongprogram
    
                                      

For an extended example of the process, refer to the section on putting the compiler utilities into the LPA in z/OS UNIX System Services Planning.


Other Recommendations

Shared object libraries contain subroutines that can be shared by multiple processes. Programs that use shared libraries contain references to library routines that are resolved by the loader at run time. Only DLLs that are loaded via dllload() can be made shared library objects. The shared library region is carved out of each address space that does a dllload() against HFS programs (DLLs) that have the shared library extended attribute turned on. This region is then shared between all the address spaces that load these DLLs.

The st_sharelib file attribute marks system-shared object libraries, and the .so suffix marks user-shared library programs.

Using system-shared library programs is an optimal way of sharing large HFS executables across many address spaces in the system. Setting up shared library support is simple.

To improve the performance of security checking for z/OS UNIX, define the BPX.SAFFASTPATH FACILITY class profile. Using this turns off auditing for successful security checks, which reduces overhead when doing security checks for a variety of operations -- such as file access checking, IPC access checking, and process ownership checking. Auditing successful accesses can generate enormous amounts of audit records, particularly for directory searches. For more information about the BPX.SAFFASTPATH profile, see z/OS UNIX System Services Planning.


Next Steps

You can continue tuning your system in order to improve performance. The tuning performance chapter in z/OS UNIX System Services Planning has information about tuning limits in BPXPRMxx and organinzing the file system, both of which may improve performance.

For reference information about various parmlib members in SYS1.PARMLIB, such as BPXPRMxx, refer to z/OS MVS Initialization and Tuning Reference.

You can add a statement in /etc/profile to improve the z/OS shell's performance for users who enter the OMVS command from ISPF or with STEPLIB data sets allocated. This prevents excessive searching of STEPLIB data sets and the propagation of STEPLIB data sets from the shell process to the shell command processes on exec. The change that you need to make to /etc/profile is included in the tuning recommendations for each z/OS release (above).