Packaging and deployment performance
You might have to change the way that packaging and deployment are done to improve their performance. Such is the case if large data sets or members are packaged and deployed.
Optional properties are provided to tailor the packaging and deployment process. However, using these properties in a normal packaging situation might decrease performance. So, it is wise to run some benchmark testing first.
- Use extended-format data sets for the large data sets and specify additional allocation parameters such as BUFNO and MAXVOL.
- Use the extended UNIX cp command instead of XMIT, OCOPY, and RECEIVE. If you use the cp command, you must use it both for the packaging and the deployment.
Package definitions
Property | Description |
---|---|
_ALLOCATION_PARMS_PDS | Additional allocation parameters for temporary PDS allocation. For example,
you can enter the following parameters:
|
_ALLOCATION_PARMS_SEQ | Additional allocation parameters for the allocation of temporary sequential
files. For example, you can enter the following parameters:
|
_TEMPORARY_PREFIX | Prefix for temporary file allocations. It is like the temporary prefix that is used in
deployment. However, as it is not yet available through the editor, it can be specified as a
property. For example, you can enter the following prefix:
DOHERTL.TEMPDSN |
debug | Debug messages. If you set this property to true , additional
debug messages about the timing of the various steps of the process will be generated. If you set it
to false , no additional debug messages will be generated. |
useEXTPREF | Use of the extended format. If you set this property to true ,
DSNTYPE(EXTPREF) will be used for the allocations of temporary PDS and temporary
sequential files.
|
useCP | Use of the improved z/OS® cp command. If you add this property, you do not use the XMIT, OCOPY, and RECEIVE commands. Instead, you use the cp command to copy load modules into the z/OS file system (zFS) and out again, as it keeps the ALIAS and other important information. |
cpBinaries | Low-level qualifiers to be transferred as binary files. If you add this property, you must specify a list of data set low-level qualifiers, separated by semi-colons. For example, SBLZPAX contains PAX files that need to be transferred as binary files. |
_STDERR_LINES | Number of error message lines to display. You can specify a number to limit the
number of lines that are produced by the cp command. For example, if you set this
property to 50, STDERR is limited to 50 lines. As cp calls the binder, some binder warning messages might not be relevant. |
Deployment definitions
Property | Description |
---|---|
_ALLOCATION_PARMS_PDS | Additional allocation parameters for temporary PDS allocation. For example,
you can enter the following parameters:
|
_ALLOCATION_PARMS_SEQ | Additional allocation parameters for the allocation of temporary sequential
files. For example, you can enter the following parameters:
|
_ALLOCATION_PARMS_DEP | Additional allocation parameters for physical PDS allocations in the BLZDEPZP program. |
_TEMPORARY_PREFIX | Prefix to be used for temporary file allocations in the BLZBKPZP program. The temporary prefix that is specified in the z/OS Deployment tab is not passed through to BLZBKPZP. So, if you want to use the temporary prefix in BLZBKPZP, you must specify the _TEMPORARY_PREFIX property. In the deployment, the value that is specified in the editor overrules this property. For example:DOHERTL.TEMPDSN |
debug | Debug messages. If you set this property to true , additional
debug messages about the timing of the various steps of the process will be generated. If you set it
to false , no additional debug messages will be generated. |
useEXTPREF | Use of the extended format. If you set this property to true ,
DSNTYPE(EXTPREF) will be used for the allocations of temporary PDS and temporary
sequential files.
|
useCP | Use of the improved z/OS cp command. If you add this property, you do not use the XMIT, OCOPY, and RECEIVE commands. Instead, you use the cp command to copy load modules into the z/OS file system (zFS) and out again, as it keeps the ALIAS and other important information. |
cpBinaries | Low-level qualifiers to be transferred as binary files. If you add this property, you must specify a list of data set low-level qualifiers, separated by semi-colons. For example, SBLZPAX contains PAX files that need to be transferred as binary files. |
_STDERR_LINES | Number of error message lines to display. You can specify a number to limit the
number of lines that are produced by the cp command. For example, if you set this
property to 50, STDERR is limited to 50 lines. As cp calls the binder, some binder warning messages might not be relevant. |
Use of DSNTYPE(EXTPREF)
If large data sets are to be packaged and deployed, then using DSNTYPE(EXTPREF) can give large performance improvements. However, it changes how the packaging and deployment were originally designed to work. The packaging uses the XMIT command to create the object to be deployed. The advantage is that the DCB attributes of the data set that is deployed do not need to be stored anywhere. The RECEIVE command that is run at deployment time will create the data set, if it does not already exist, with the same DCB attributes as the packaged data set.
However, if DSNTYPE(EXTPREF) is specified on the temporary internal PDS,
when a specific list of members or a list of member patterns is packaged, then the temporary
internal PDS is allocated as a Variable Spanned file (RECFM=VS
). Such an
allocation, which is valid for IEBCOPY, gives the most performance improvement.
However, at deployment time, when the sequential XMIT file is received, it will
create a RECFM=VS
file. If the deployment to data set (second column of the table
in the z/OS Deployment tab) already exists, there is no problem, as
IEBCOPY will copy from the RECFM=VS
to the deployment to data
set. However, if the deployment to data set does not exist, then the deployment will allocate the
data set as it was received, RECFM=VS
, which is not correct.
As such, packaging and deployment will store the DCB information of the data set being deployed, in the generated manifest. So, if the deployment to data set does not exist, and if the useEXTPREF=true property is set, then the deployment will use the information in the manifest to allocate the deployment to data sets.
<?xml version="1.0"?>
<manifest type="MANIFEST_LIST">
<container name="DOHERTL.TEST.LOAD" type="PDS" DSNTYPE="LIBRARY" DSORG="PO" RECFM="U" LRECL="0" BLKSIZE="21504" UNIT="BLOCK" PRI="383232" SEC="653889" >
<resource name="HS011" type="PDSMember" lastModifiedTimestamp="2021/03/03 06:52:27"/>
<resource name="HS034" type="PDSMember" lastModifiedTimestamp="2021/03/03 13:34:33"/>
<resource name="HS040" type="PDSMember" lastModifiedTimestamp="2021/03/03 04:41:12"/>
<resource name="EX358" type="PDSMember" lastModifiedTimestamp="2021/03/03 00:51:51"/>
<resource name="CM013" type="PDSMember" lastModifiedTimestamp="2021/03/03 06:28:05"/>
<resource name="CN101" type="PDSMember" lastModifiedTimestamp="2021/03/03 01:20:25"/>
<resource name="CN110" type="PDSMember" lastModifiedTimestamp="2021/03/03 05:31:46"/>
<resource name="BM199" type="PDSMember" lastModifiedTimestamp="2021/03/02 22:28:05"/>
<resource name="BR001" type="PDSMember" lastModifiedTimestamp="2021/03/03 06:19:04"/>
<resource name="AV201" type="PDSMember" lastModifiedTimestamp="2021/03/03 05:53:30"/>
<resource name="KF243" type="PDSMember" lastModifiedTimestamp="2021/03/03 06:15:26"/>
<resource name="KO017" type="PDSMember" lastModifiedTimestamp="2021/03/03 06:20:03"/>
<resource name="KO024" type="PDSMember" lastModifiedTimestamp="2021/03/03 06:18:27"/>
<resource name="KO109" type="PDSMember" lastModifiedTimestamp="2021/03/03 06:06:24"/>
<resource name="KO125" type="PDSMember" lastModifiedTimestamp="2021/03/03 04:22:12"/>
<resource name="KP055" type="PDSMember" lastModifiedTimestamp="2021/03/03 01:29:23"/>
<resource name="KP087" type="PDSMember" lastModifiedTimestamp="2021/03/03 03:59:48"/>
<resource name="KP171" type="PDSMember" lastModifiedTimestamp="2021/03/03 13:39:37"/>
<resource name="KP187" type="PDSMember" lastModifiedTimestamp="2021/03/03 01:09:57"/>
<resource name="KP267" type="PDSMember" lastModifiedTimestamp="2021/03/03 00:08:18"/>
</container>
</manifest>
- You can copy all the members in a data set by specifying an asterisk (*) in the package definition. If the useEXTPREF property is not specified and smaller packages are being processed, then it is slightly faster than if you specify the useEXTPREF property.
- If BUFNO is specified, it needs to be monitored. If its assigned value is too high, then s878-10 abends might occur because the required storage was not available.
Using cp versus XMIT, OCOPY, and RECEIVE
Optionally, packaging and deployment can use the new cp support available with z/OS.
As the cp command works only with zFS, parameters such as EXTPREF and MAXVOL do not need to be supported. However, the cp command requires the specification of the useCP and cpBinaries properties and accepts the _STDERR_LINES property.
To copy a load module, the cp command calls the binder. No relinking occurs but the content of the load module changes. These changes do not impact the running of the load module. However, as the binder is called during the copy processing, some binder warning messages might appear. These messages are the messages that you would have seen during the initial link edit of the load module. The following lines are message examples:
IEW2609W 5104 SECTION UTP336G USABILITY ATTRIBUTE OF REUSABLE CONFLICTS WITH REQUESTED USABILITY OF REENTRANT.
IEW2646W 5383 ESD RMODE(24) CONFLICTS WITH USER-SPECIFIED RMODE(ANY) FOR SECTION AP701TW CLASS B_TEXT.
The size of the load module is identical in the original data set and in the deployed data set. So, it is a good indication that the module is the same. An AMBLIST command can be run to further compare contents. See AMBLIST in the z/OS documentation.
- Timings for XMIT, OCOPY, and RECEIVE:
- Packaging of 20 large load modules: 5 minutes 14 seconds
- Deployment of 20 large load modules: 11 minutes 23 seconds
- Timings for cp:
- Packaging of 20 large load modules: 2 minutes 4 seconds
- Deployment of 20 large load modules: 5 minutes 4 seconds
- Test 1: Packaging and Deployment tests without the SBLZPAX library. Tests showed that for
normal-sized data sets, the cp command was slower than XMIT,
OCOPY, and RECEIVE.
- Packaging with XMIT and OCOPY (1381 objects): 1 minute 4 seconds
- Deployment with OCOPY and RECEIVE (1381 objects): 2 minutes 6 seconds
- Packaging with cp (1381 objects): 1 minute 28 seconds
- Deployment with cp (1381 objects): 3 minutes 52 seconds
- Test 2: Packaging and Deployment tests without the SBLZPAX library. Tests showed that for a
package with large-sized data sets, the cp command was much faster than
XMIT and OCOPY.
- Packaging with XMIT and OCOPY (1524 objects): 17 minutes 28 seconds
- Deployment with OCOPY and RECEIVE (1524 objects): 21 minutes 57 seconds
- Packaging with cp (1524 objects): 4 minutes 20 seconds
- Deployment with cp (1524 objects): 13 minutes 36 seconds