Obtaining additional HSPSERV performance
You can use HSPSERV to improve the performance of data transfer between central and expanded storage. Specify the ALET of the hiperspace on the HSPALET parameter on HSPSERV.
To obtain the ALET, issue the following:
ALESERV ADD,ALET=. . .,STOKEN=. . .
STOKEN is the eight-byte identifier of the hiperspace, and ALET is the four-byte index into the DU-AL, the access list that is associated with the task. The STOKEN is input to ALESERV ADD; the ALET is output.
Before you issue the HSPSERV macro with the HSPALET parameter, obtain a 144-byte workarea for the HSPSERV macro service and place the address of this area in GPR 13 and a zero in AR 13.
Note: When the HSPALET parameter is specified, the application's RANGLIST
data may be modified by the system.
Do not specify RELEASE=YES with the HSPALET parameter.
Programming Notes for Obtaining ALETs for Hiperspaces:
- A program never uses an ALET to directly access data in a hiperspace as it would use the ALET to access the data in a data space.
- To use hiperspaces, you do not need to switch into AR mode.
- When you are finished using the hiperspace, use ALESERV DELETE to delete the entry on the DU-AL.
- The system places certain restrictions on the combined use of hiperspaces and data-in-virtual. These restrictions are listed in Using data-in-virtual with hiperspaces.
- By obtaining an ALET, you can share a hiperspace with a subtask in the same way you share a data space. Use the ALCOPY parameter on the ATTACHX macro to pass a copy of your DU-AL to the subtask. Follow the procedure suggested in Sharing data spaces among problem-state programs with PSW key 8-F.
Example of a HSPSERV with the HSPALET Parameter: The following example
creates a non-shared hiperspace. To get additional performance from
HSPSERV, the program obtains an ALET from the ALESERV macro and uses
that ALET as input to HSPSERV. The example assumes the ASC mode is
primary.
⋮
* DSPSERV CREATES A NON-SHARED STANDARD HIPERSPACE OF 20 4096-BYTE BLOCKS
*
DSPSERV CREATE,NAME=HSNAME,TYPE=HIPERSPACE,BLOCKS=20, X
STOKEN=HSSTOKEN,ORIGIN=HSORIG1
*
* ALESERV RETURNS AN ALET ON THE DU-AL FOR THE HIPERSPACE
*
ALESERV ADD,STOKEN=HSSTOKEN,ALET=HSALET,AL=WORKUNIT
*
* THE STORAGE MACRO OBTAINS FOUR PAGES OF ADDRESS SPACE STORAGE,
* THE BNDRY=PAGE PARAMETER ALIGNS PAGES ON A 4K BOUNDARY
* - THE FIRST AND SECOND PAGES ARE THE SWRITE SOURCE
* - THE THIRD AND FOURTH PAGES ARE THE SREAD TARGET
* COPY INTO FIRST AND SECOND PAGES THE DATA TO BE WRITTEN TO HIPERSPACE
.
STORAGE OBTAIN,LENGTH=4096*4,BNDRY=PAGE
ST 1,ASPTR * SAVE ADDR SPACE STORAGE ADDRESS
MVC 0(20,1),SRCTEXT1 * INIT FIRST ADDR SPACE PAGE
A 1,ONEBLK * COMPUTE PAGE TWO ADDRESS
MVC 0(20,1),SRCTEXT2 * INIT SECOND ADDR SPACE PAGE
.
* SET UP THE SWRITE RANGE LIST TO WRITE FROM THE FIRST AND SECOND
* ADDRESS SPACE PAGES INTO THE HIPERSPACE
.
L 1,ASPTR * GET FIRST ADDR PAGE ADDRESS
ST 1,ASPTR1 * PUT ADDRESS INTO RANGE LIST
.
* SAVE CONTENTS OF AR/GPR 13 BEFORE RESETTING THEM FOR HSPSERV
.
ST 13,SAVER13 * SAVE THE CONTENTS OF GPR 13
EAR 13,13 * LOAD GPR 13 FROM AR 13
ST 13,SAVEAR13 * SAVE THE CONTENTS OF AR 13
.
* ESTABLISH ADDRESS OF 144-BYTE SAVE AREA, AS HSPALET ON HSPSERV REQUIRES
* AND WRITE TWO PAGES FROM THE ADDRESS SPACE TO THE HIPERSPACE
.
SLR 13,13 * SET GPR 13 TO 0
SAR 13,13 * SET AR 13 TO 0
LA 13,WORKAREA * SET UP AR/GPR 13 TO WORKAREA ADDR
HSPSERV SWRITE,STOKEN=HSSTOKEN,RANGLIST=RANGPTR1,HSPALET=HSALET
.
* AFTER THE SWRITE, THE FIRST TWO ADDRESS SPACE PAGES MIGHT BE OVERLAID
.
* RESTORE ORIGINAL CONTENTS OF AR/GPR 13
.
L 13,SAVEAR13 * SET GPR 13 TO SAVED AR 13
SAR 13,13 * RESET AR 13
L 13,SAVER13 * RESET GPR 13
.
* SET UP THE SREAD RANGE LIST TO READ INTO THE THIRD AND FOURTH
* ADDRESS SPACE PAGES WHAT WAS PREVIOUSLY WRITTEN TO THE HIPERSPACE
.
MVC HSORIG2,HSORIG1 * COPY ORIGIN OF HIPERSPACE TO HSORIG2
L 1,ASPTR * GET FIRST ADDR PAGE ADDRESS
A 1,TWOBLKS * COMPUTE THIRD PAGE ADDRESS
ST 1,ASPTR2 * PUT ADDRESS INTO RANGE LIST
.
* SAVE CONTENTS OF AR/GPR 13
.
ST 13,SAVER13 * SAVE THE CONTENTS OF GPR 13
EAR 13,13 * LOAD GPR 13 FROM AR 13
ST 13,SAVEAR13 * SAVE THE CONTENTS OF AR 13
.
* ESTABLISH ADDRESS OF 144-BYTE SAVE AREA, AS HSPALET ON HSPSERV REQUIRES,
* AND READ TWO BLOCKS OF DATA FROM THE HIPERSPACE INTO THE
* THIRD AND FOURTH PAGES IN THE ADDRESS SPACE STORAGE USING HSPALET
.
SLR 13,13 * SET GPR 13 TO 0
SAR 13,13 * SET AR 13 TO 0
LA 13,WORKAREA * SET UP AR/GPR 13 TO WORKAREA ADDR
HSPSERV SREAD,STOKEN=HSSTOKEN,RANGLIST=RANGPTR2,HSPALET=HSALET
.
* RESTORE ORIGINAL CONTENTS OF AR/GPR 13
.
L 13,SAVEAR13 * SET GPR 13 TO SAVED AR 13
SAR 13,13 * RESET AR 13
L 13,SAVER13 * RESET GPR 13
.
* FREE THE ALET, FREE ADDRESS SPACE STORAGE, AND DELETE THE HIPERSPACE
⋮
* DATA AREAS AND CONSTANTS
.
HSNAME DC CL8'SCROLLHS' * NAME FOR THE HIPERSPACE
HSSTOKEN DS CL8 * STOKEN FOR THE HIPERSPACE
HSALET DS CL4 * ALET FOR THE HIPERSPACE
ASPTR DS 1F * LOCATION OF ADDR SPACE STORAGE
SAVER13 DS 1F * LOCATION TO SAVE GPR 13
SAVEAR13 DS 1F * LOCATION TO SAVE AR 13
WORKAREA DS CL144 * WORK AREA FOR HSPSERV
ONEBLK DC F'4096' * LENGTH OF ONE BLOCK OF STORAGE
TWOBLKS DC F'8192' * LENGTH OF TWO BLOCKS OF STORAGE
SRCTEXT1 DC CL20' INVENTORY ITEMS '
SRCTEXT2 DC CL20' INVENTORY SURPLUSES'
DS 0F
RANGPTR1 DC A(SWRITLST) * ADDRESS OF SWRITE RANGE LIST
RANGPTR2 DC A(SREADLST) * ADDRESS OF SREAD RANGE LIST
DS 0F
SWRITLST DS 0CL12 * SWRITE RANGE LIST
ASPTR1 DS F * START OF ADDRESS SPACE SOURCE
HSORIG1 DS F * TARGET LOCATION IN HIPERSPACE
NUMBLKS1 DC F'2' * NUMBER OF 4K BLOCKS IN SWRITE
DS 0F
SREADLST DS 0CL12 * SREAD RANGE LIST
ASPTR2 DS F * TARGET LOCATION IN ADDR SPACE
HSORIG2 DS F * START OF HIPERSPACE SOURCE
NUMBLKS2 DC F'2' * NUMBER OF 4K BLOCKS IN SREAD
DS 0F